[pypy-dev] Rough draft of x86-64 JIT backend GSoC proposal

Jason Creighton jcreigh at gmail.com
Wed Mar 31 00:18:03 CEST 2010

I agree with fijal that it seems short, but I don't know what else to 
put in.

Updated draft:

=== Proposal ===

The PyPy JIT, which has shown substantial performance improvements over
other implementations of Python, including CPython and Unladen Swallow,
does not currently support the x86-64 instruction set, making it
impractical to use on 64-bit x86 systems.

My proposal is to extend the existing x86 JIT backend to support x86-64
as well.

=== Deliverables ===

Stable, tested 64-bit JIT for PyPy on Linux, Mac OS X and Windows merged
into PyPy trunk.

=== Implementation plan ===

This is not a research proposal. The goal is simply to have a PyPy JIT
that works out of the box on 64-bit CPUs, implemented as conservatively
as possible.

As such, I will attempt to reuse as much of the existing x86 backend
that I can. In fact, the architectural similarities between x86 and
x86-64 are large enough that I hope to implement a unified x86/x86-64
backend with the majority of the code working for either platform.

There is an existing branch that, while very incomplete, has the
beginnings of a unified x86/x86-64 instruction encoding module, which
can encode instructions for either x86 or x86-64 in a fairly seamless
manner. I intend to use that branch as a starting point.


1. Take the existing "remove-ri386-multimethod-2" branch and use it as a
basis for instruction encoding. Modify the existing 32-bit backend to
use the new instruction encoding scheme.

2. Add 64-bit support to the backend,
         A) Add tests to ensure that 64-bit instructions are being
         generated correctly.
         B) Modify register allocator to use new general purpose and
         floating point registers.
         C) Port 32-bit specific portions of the JIT (for example, guard
         failure handling) to 64-bit

3. Test 64-bit on Mac OS X and Windows, and fix inevitable issues.

If the 64-bit JIT is completed before the end of the summer, I will
spend the remainder of the time working on other 64-bit or JIT-related
aspects of PyPy, for example adapting the "asmgcc" garbage collection
strategy to 64-bit.

=== Development Workflow ===

The PyPy project makes extensive use of Subversion branches for
development, so I will follow that convention and develop the 64-bit JIT
in one or more branches.

For unit testing, I will use the py.test framework (already used
throughout PyPy), aiming for 100% test coverage.

=== About Me ===

I am a first-year Computer Science student at Flathead Valley Community
College planning to transfer to Montana State University.

I have several years of professional development experience. I am
comfortable programming in Python, C and x86 assembly.

Starting May 17th, I will be able to commit 40 hours/week to the project
until the end of August. I may travel for a few weeks at some point in
the summer, but I will have a laptop with me with the expectation of
continuing full-time work.

=== Contact information ===

Email: jcreigh at gmail.com
IRC:   "jcreigh" on Freenode
Blog:  http://jcreigh.blogspot.com
Phone: <will be included in actual proposal, but pypy-dev is publicly 

More information about the Pypy-dev mailing list