Author: hager <sven.ha...@uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r51283:31d52c590cbd
Date: 2012-01-12 08:15 -0800
http://bitbucket.org/pypy/pypy/changeset/31d52c590cbd/

Log:    (bivab, hager): do sign extension in decode32

diff --git a/pypy/jit/backend/ppc/ppcgen/helper/assembler.py 
b/pypy/jit/backend/ppc/ppcgen/helper/assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/helper/assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/helper/assembler.py
@@ -5,6 +5,7 @@
 from pypy.jit.metainterp.history import FLOAT
 from pypy.rlib.unroll import unrolling_iterable
 import pypy.jit.backend.ppc.ppcgen.register as r
+from pypy.rpython.lltypesystem import rffi
 
 def gen_emit_cmp_op(condition, signed=True):
     def f(self, op, arglocs, regalloc):
@@ -58,12 +59,17 @@
     mem[i+1] = chr((n >> 16) & 0xFF)
     mem[i] = chr((n >> 24) & 0xFF)
 
+# XXX this sign extension looks a bit strange ...
+# It is important for PPC64.
 def decode32(mem, index):
-    return intmask(ord(mem[index+3])
+    value = ( ord(mem[index+3])
             | ord(mem[index+2]) << 8
             | ord(mem[index+1]) << 16
             | ord(mem[index]) << 24)
 
+    rffi_value = rffi.cast(rffi.INT, value)
+    return int(rffi_value)
+
 def encode64(mem, i, n):
     mem[i+7] = chr(n & 0xFF)
     mem[i+6] = chr((n >> 8) & 0xFF)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to