Author: David Schneider <[email protected]>
Branch:
Changeset: r63539:53fcebf7fa52
Date: 2013-04-21 09:39 +0200
http://bitbucket.org/pypy/pypy/changeset/53fcebf7fa52/
Log: merge heads
diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+
+all: pypy-c
+
+pypy-c:
+ @echo "Building PyPy with JIT, it'll take about 40 minutes and 4G of
RAM"
+ @sleep 3
+ rpython/bin/rpython -Ojit pypy/goal/targetpypystandalone.py
diff --git a/README.rst b/README.rst
--- a/README.rst
+++ b/README.rst
@@ -22,3 +22,16 @@
and send us feedback!
the pypy-dev team <[email protected]>
+
+Building
+========
+
+build with::
+
+ rpython/bin/rpython -Ojit pypy/goal/targetpypystandalone.py
+
+This ends up with ``pypy-c`` binary in the main pypy directory. We suggest
+to use virtualenv with the resulting pypy-c as the interpreter, you can
+find more details about various installation schemes here:
+
+http://doc.pypy.org/en/latest/getting-started.html#installing-pypy
diff --git a/lib-python/2.7/json/decoder.py b/lib-python/2.7/json/decoder.py
--- a/lib-python/2.7/json/decoder.py
+++ b/lib-python/2.7/json/decoder.py
@@ -162,7 +162,7 @@
if nextchar == '}':
if object_pairs_hook is not None:
result = object_pairs_hook(pairs)
- return result, end
+ return result, end + 1
pairs = {}
if object_hook is not None:
pairs = object_hook(pairs)
diff --git a/lib-python/2.7/json/tests/test_decode.py
b/lib-python/2.7/json/tests/test_decode.py
--- a/lib-python/2.7/json/tests/test_decode.py
+++ b/lib-python/2.7/json/tests/test_decode.py
@@ -44,6 +44,7 @@
object_pairs_hook=OrderedDict,
object_hook=lambda x: None),
OrderedDict(p))
+ self.assertEqual(self.loads("{}", object_pairs_hook=list), [])
class TestPyDecode(TestDecode, PyTest): pass
diff --git a/pypy/doc/config/translation.gcrootfinder.txt
b/pypy/doc/config/translation.gcrootfinder.txt
--- a/pypy/doc/config/translation.gcrootfinder.txt
+++ b/pypy/doc/config/translation.gcrootfinder.txt
@@ -9,7 +9,9 @@
- ``--gcrootfinder=asmgcc``: use assembler hackery to find the
roots directly from the normal stack. This is a bit faster,
but platform specific. It works so far with GCC or MSVC,
- on i386 and x86-64.
+ on i386 and x86-64. It is tested only on Linux (where it is
+ the default) so other platforms (as well as MSVC) may need
+ various fixes before they can be used.
You may have to force the use of the shadowstack root finder if
you are running into troubles or if you insist on translating
diff --git a/rpython/jit/backend/arm/assembler.py
b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -87,15 +87,15 @@
ofs = self.cpu.get_ofs_of_frame_field('jf_guard_exc')
# make sure ofs fits into a register
assert check_imm_arg(ofs)
- mc.LDR_ri(r.r0.value, r.fp.value, imm=ofs)
+ self.store_reg(mc, r.r0, r.fp, ofs)
propagate_exception_descr = rffi.cast(lltype.Signed,
cast_instance_to_gcref(self.cpu.propagate_exception_descr))
# put propagate_exception_descr into frame
ofs = self.cpu.get_ofs_of_frame_field('jf_descr')
# make sure ofs fits into a register
assert check_imm_arg(ofs)
- mc.gen_load_int(r.r0.value, propagate_exception_descr)
- mc.STR_ri(r.r0.value, r.fp.value, imm=ofs)
+ mc.gen_load_int(r.r1.value, propagate_exception_descr)
+ self.store_reg(mc, r.r0, r.fp, ofs)
mc.MOV_rr(r.r0.value, r.fp.value)
self.gen_func_epilog(mc)
rawstart = mc.materialize(self.cpu.asmmemmgr, [])
diff --git a/rpython/jit/backend/test/runner_test.py
b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -3943,7 +3943,8 @@
a = lltype.malloc(A, 2, flavor='raw')
a[0] = rffi.cast(rffi.SHORT, 666)
a[1] = rffi.cast(rffi.SHORT, 777)
- a_int = rffi.cast(lltype.Signed, a)
+ addr = llmemory.cast_ptr_to_adr(a)
+ a_int = heaptracker.adr2int(addr)
print 'a_int:', a_int
self.execute_operation(rop.SETARRAYITEM_RAW,
[ConstInt(a_int), ConstInt(0), ConstInt(-7654)],
diff --git a/rpython/jit/backend/x86/rx86.py b/rpython/jit/backend/x86/rx86.py
--- a/rpython/jit/backend/x86/rx86.py
+++ b/rpython/jit/backend/x86/rx86.py
@@ -682,10 +682,12 @@
def define_modrm_modes(insnname_template, before_modrm, after_modrm=[],
regtype='GPR'):
def add_insn(code, *modrm):
- args = before_modrm + list(modrm) + after_modrm
+ args = before_modrm + list(modrm)
methname = insnname_template.replace('*', code)
- if methname.endswith('_rr') or methname.endswith('_xx'):
+ if (methname.endswith('_rr') or methname.endswith('_xx')
+ or methname.endswith('_ri')):
args.append('\xC0')
+ args += after_modrm
if regtype == 'XMM':
insn_func = xmminsn(*args)
diff --git a/rpython/jit/backend/x86/test/test_regloc.py
b/rpython/jit/backend/x86/test/test_regloc.py
--- a/rpython/jit/backend/x86/test/test_regloc.py
+++ b/rpython/jit/backend/x86/test/test_regloc.py
@@ -1,4 +1,5 @@
import struct, sys
+from rpython.jit.backend.x86.rx86 import R
from rpython.jit.backend.x86.regloc import *
from rpython.jit.backend.x86.test.test_rx86 import CodeBuilder32,
CodeBuilder64, assert_encodes_as
from rpython.jit.backend.x86.assembler import heap
@@ -15,36 +16,49 @@
cb32 = LocationCodeBuilder32
cb64 = LocationCodeBuilder64
+def test_mov_8():
+ assert_encodes_as(cb32, "MOV8_ri", (R.cl, 25), '\xB1\x19')
+
def test_mov_16():
+ # only 'MOV16_*r' and 'MOV16_*i' are supported
# 32-bit
assert_encodes_as(cb32, "MOV16", (ecx, ebx), '\x66\x89\xD9')
- assert_encodes_as(cb32, "MOV16", (ecx, ImmedLoc(12345)),
'\x66\xB9\x39\x30')
-
+ assert_encodes_as(cb32, "MOV16",
+ (AddressLoc(ecx, ImmedLoc(16), 0, 0), ebx),
+ '\x66\x89\x59\x10')
# 64-bit
assert_encodes_as(cb64, "MOV16", (r8, ebx), '\x66\x41\x89\xD8') # 11 011
000
assert_encodes_as(cb64, "MOV16", (ebx, r8), '\x66\x44\x89\xC3') # 11 000
011
- assert_encodes_as(cb64, "MOV16", (ecx, ebx), '\x66\x40\x89\xD9')
- assert_encodes_as(cb64, "MOV16", (ecx, ImmedLoc(12345)),
'\x66\xB9\x39\x30')
+ assert_encodes_as(cb64, "MOV16", (ecx, ebx), '\x66\x89\xD9')
# for the next case we don't pick the most efficient encoding, but well
- expected = '\x66\x40\xC7\xC1\xC7\xCF' # could be '\x66\xB9\xC7\xCF'
+ expected = '\x66\xC7\xC1\x39\x30' # could be '\x66\xB9\x39\x30'
+ assert_encodes_as(cb64, "MOV16", (ecx, ImmedLoc(12345)), expected)
+ # for the next case we don't pick the most efficient encoding, but well
+ expected = '\x66\xC7\xC1\xC7\xCF' # could be '\x66\xB9\xC7\xCF'
assert_encodes_as(cb64, "MOV16", (ecx, ImmedLoc(-12345)), expected)
- assert_encodes_as(cb64, "MOV16", (r9, ImmedLoc(12345)),
'\x66\x41\xB9\x39\x30')
+ # for the next case we don't pick the most efficient encoding, but well
+ expected = '\x66\x41\xC7\xC1\x39\x30' # could be '\x66\x41\xB9\x39\x30'
+ assert_encodes_as(cb64, "MOV16", (r9, ImmedLoc(12345)), expected)
# for the next case we don't pick the most efficient encoding, but well
expected = '\x66\x41\xC7\xC1\xC7\xCF' # could be '\x66\x41\xB9\xC7\xCF'
assert_encodes_as(cb64, "MOV16", (r9, ImmedLoc(-12345)), expected)
- assert_encodes_as(cb64, "MOV16", (AddressLoc(r13, ImmedLoc(0), 0, 0),
ImmedLoc(12345)), '\x66\x41\xC7\x45\x00\x39\x30')
+ assert_encodes_as(cb64, "MOV16",
+ (AddressLoc(r13, ImmedLoc(0), 0, 0), ImmedLoc(12345)),
+ '\x66\x41\xC7\x45\x00\x39\x30')
def test_cmp_16():
+ # only 'CMP16_mi' is supported
# 32-bit
- assert_encodes_as(cb32, "CMP16", (ecx, ebx), '\x66\x39\xD9')
- assert_encodes_as(cb32, "CMP16", (ecx, ImmedLoc(12345)),
'\x66\x81\xF9\x39\x30')
-
+ assert_encodes_as(cb32, "CMP16",
+ (AddressLoc(ecx, ImmedLoc(0), 0, 0), ImmedLoc(21324)),
+ '\x66\x81\x39\x4c\x53')
+ assert_encodes_as(cb32, "CMP16",
+ (AddressLoc(esi, ImmedLoc(2), 0, 0), ImmedLoc(-12345)),
+ '\x66\x81\x7e\x02\xc7\xcf')
# 64-bit
- assert_encodes_as(cb64, "CMP16", (r8, ebx), '\x66\x41\x39\xD8') # 11 011
000
- assert_encodes_as(cb64, "CMP16", (ebx, r8), '\x66\x44\x39\xC3') # 11 000
011
- assert_encodes_as(cb64, "CMP16", (ecx, ebx), '\x66\x40\x39\xD9')
- assert_encodes_as(cb64, "CMP16", (ecx, ImmedLoc(12345)),
'\x66\x40\x81\xF9\x39\x30')
- assert_encodes_as(cb64, "CMP16", (AddressLoc(r13, ImmedLoc(0), 0, 0),
ImmedLoc(12345)), '\x66\x41\x81\x7D\x00\x39\x30')
+ assert_encodes_as(cb64, "CMP16",
+ (AddressLoc(r13, ImmedLoc(0), 0, 0), ImmedLoc(12345)),
+ '\x66\x41\x81\x7D\x00\x39\x30')
def test_relocation():
from rpython.rtyper.lltypesystem import lltype, rffi
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit