[pypy-svn] r76731 - pypy/branch/asmgcc-64/pypy/jit/backend/x86
jcreigh at codespeak.net
jcreigh at codespeak.net
Wed Aug 25 18:44:01 CEST 2010
Author: jcreigh
Date: Wed Aug 25 18:43:59 2010
New Revision: 76731
Modified:
pypy/branch/asmgcc-64/pypy/jit/backend/x86/assembler.py
pypy/branch/asmgcc-64/pypy/jit/backend/x86/rx86.py
Log:
fix bug that was causing guard_class to always fail on 64-bit
Modified: pypy/branch/asmgcc-64/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/asmgcc-64/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/asmgcc-64/pypy/jit/backend/x86/assembler.py Wed Aug 25 18:43:59 2010
@@ -1251,8 +1251,12 @@
sizeof_ti = rffi.sizeof(GCData.TYPE_INFO)
type_info_group = llop.gc_get_type_info_group(llmemory.Address)
type_info_group = rffi.cast(lltype.Signed, type_info_group)
- expected_typeid = (classptr - sizeof_ti - type_info_group) >> 2
- self.mc.CMP16(mem(locs[0], 0), ImmedLoc(expected_typeid))
+ expected_typeid = classptr - sizeof_ti - type_info_group
+ if IS_X86_32:
+ expected_typeid >>= 2
+ self.mc.CMP16(mem(locs[0], 0), ImmedLoc(expected_typeid))
+ elif IS_X86_64:
+ self.mc.CMP32_mi((locs[0].value, 0), expected_typeid)
def genop_guard_guard_class(self, ign_1, guard_op, guard_token, locs, ign_2):
self.mc.ensure_bytes_available(256)
Modified: pypy/branch/asmgcc-64/pypy/jit/backend/x86/rx86.py
==============================================================================
--- pypy/branch/asmgcc-64/pypy/jit/backend/x86/rx86.py (original)
+++ pypy/branch/asmgcc-64/pypy/jit/backend/x86/rx86.py Wed Aug 25 18:43:59 2010
@@ -462,6 +462,8 @@
CMP_ji = select_8_or_32_bit_immed(CMP_ji8, CMP_ji32)
CMP_rj = insn(rex_w, '\x3B', register(1, 8), '\x05', immediate(2))
+ CMP32_mi = insn(rex_nw, '\x81', orbyte(7<<3), mem_reg_plus_const(1), immediate(2))
+
AND8_rr = insn(rex_w, '\x20', byte_register(1), byte_register(2,8), '\xC0')
OR8_rr = insn(rex_w, '\x08', byte_register(1), byte_register(2,8), '\xC0')
More information about the Pypy-commit
mailing list