
Hello all I am a graduate student interested in participation in GSoC 2010. I found some PyPy projects closely related to my background. In particular writing a backend for Intel 64, for JIT compiler, sounds interesting. Also I would like to know more about projects on stackless features. I would be happy to hear any comment on these projects and pointers to documents/paper/code that might be helpful. Last year I participated in GSoC as well. I developed a prototype of an architecture independent SIMD library for Python. This library provides an interface for programmers to write SIMD code in Python and then translates it to low level architecture specific SIMD code using CorePy. The prototype that I developed last year supports intel 64 as I did not have enough time to develop code generators for any other architecture. Best Ehsan

Hi Ehsan! 2010/3/23 Ehsan Amiri <ehsanamiri@gmail.com>:
We have somebody who has voiced interest in doing a 64 bit backend, but there's no reason you couldn't assist them or work on some other aspect of PyPy. Feel free to drop by the #pypy channel on Freenode anytime. -- Regards, Benjamin

Hi Benjamin, hi all, On Tue, Mar 23, 2010 at 08:31:50PM -0500, Benjamin Peterson wrote:
I should probably mention here what I only explained in private mails so far. The 32-bit backend is in pypy/jit/backend/x86/. However that directory uses ri386.py and ri386setup.py, which are old and very custom hacks based on multimethods in order to encode machine code instructions. I already started some work on replacing these two files. It's done in this branch: http://codespeak.net/svn/pypy/branch/remove-ri386-multimethod-2 There, we have a single file rx86.py that is simpler, and supports both 32-bit and 64-bit instruction generation. But the interface is very different, so that means the whole rest of the backend has to be adapted. That would be the main work of a SoC student. To get started, look at rx86.py and its test files test/test_rx86*.py and try to write small examples that uses a subclass of X86_32_CodeBuilder or X86_64_CodeBuilder in order to build and call a test function. The 64-bit version is more complicated, because the ABI on 64-bit is to use some number of registers in order to pass arguments; see details e.g. in http://www.x86-64.org/documentation/abi.pdf section "Function Calling Sequence". A bientot, Armin.

Re-hi, On Thu, Mar 25, 2010 at 12:52:58PM +0100, Armin Rigo wrote:
I should point out that we only need to pass integers (of at most 64-bit), pointers, and 64-bit floats (that's "double", in C) as arguments to functions. Don't go discouraged because of the messy rules for passing structs, arrays, or 128- or 256-bit stuff. :-) A bientot, Armin.

Hi Ehsan! 2010/3/23 Ehsan Amiri <ehsanamiri@gmail.com>:
We have somebody who has voiced interest in doing a 64 bit backend, but there's no reason you couldn't assist them or work on some other aspect of PyPy. Feel free to drop by the #pypy channel on Freenode anytime. -- Regards, Benjamin

Hi Benjamin, hi all, On Tue, Mar 23, 2010 at 08:31:50PM -0500, Benjamin Peterson wrote:
I should probably mention here what I only explained in private mails so far. The 32-bit backend is in pypy/jit/backend/x86/. However that directory uses ri386.py and ri386setup.py, which are old and very custom hacks based on multimethods in order to encode machine code instructions. I already started some work on replacing these two files. It's done in this branch: http://codespeak.net/svn/pypy/branch/remove-ri386-multimethod-2 There, we have a single file rx86.py that is simpler, and supports both 32-bit and 64-bit instruction generation. But the interface is very different, so that means the whole rest of the backend has to be adapted. That would be the main work of a SoC student. To get started, look at rx86.py and its test files test/test_rx86*.py and try to write small examples that uses a subclass of X86_32_CodeBuilder or X86_64_CodeBuilder in order to build and call a test function. The 64-bit version is more complicated, because the ABI on 64-bit is to use some number of registers in order to pass arguments; see details e.g. in http://www.x86-64.org/documentation/abi.pdf section "Function Calling Sequence". A bientot, Armin.

Re-hi, On Thu, Mar 25, 2010 at 12:52:58PM +0100, Armin Rigo wrote:
I should point out that we only need to pass integers (of at most 64-bit), pointers, and 64-bit floats (that's "double", in C) as arguments to functions. Don't go discouraged because of the messy rules for passing structs, arrays, or 128- or 256-bit stuff. :-) A bientot, Armin.
participants (3)
-
Armin Rigo
-
Benjamin Peterson
-
Ehsan Amiri