[pypy-dev] Rough draft of x86-64 JIT backend GSoC proposal
jcreigh at gmail.com
Tue Mar 30 05:12:47 CEST 2010
I am a student planning on applying to GSoC to create an x86-64 backend
for the JIT. I have a (very) rough draft of my proposal, and I was
hoping to get some feedback on it.
Specifically, I'm wondering about operating system support. I've written
the proposal as if I would support Linux/Mac OS X/Windows.
I would be developing on Linux, so I think we can assume that would be
fairly well supported, but obviously I would like it to work on Mac OS X
and Windows as well. (I'm not sure if I would have the time/motivation
to care about obscure BSDs). OTOH, if there are already a lot of
outstanding issues on one of those platforms, I don't know that I would
be able to get it working. So what do you think would be a reasonable
Secondly, my timeline is pretty vague. The PSF proposal template
recommends a week-by-week timeline, but honestly, I'm not sure how the
time usage would break down. Any comments on that would be greatly
Here's the draft:
=== Proposal ===
The PyPy JIT, which has shown substantial performance improvements over
CPython, often several times faster, does not currently support the
x86-64 instruction set, making it impractical to use on 64-bit x86
My proposal is to extend the existing x86 JIT backend to support x86-64
=== 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 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. 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.
2. Port the existing 32-bit backend to use the new instruction encoding
3. Add 64-bit support to the backend,
A) Modify register allocator to use new general purpose and
floating point registers.
B) Port "ResOperation" operations to 64-bit
C) Port guard failure handling to 64-bit
4. Test 64-bit on Mac OS X and Windows and fix inevitable issues.
=== 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
Phone: (will be given on request, but not preferred)
More information about the Pypy-dev