[pypy-commit] pypy ffi-backend: Fixes on 32-bits.

arigo noreply at buildbot.pypy.org
Tue Aug 7 11:45:32 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r56631:96ba98c64e41
Date: 2012-08-07 11:45 +0200
http://bitbucket.org/pypy/pypy/changeset/96ba98c64e41/

Log:	Fixes on 32-bits.

diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -841,7 +841,7 @@
         elif arraydescr.typeinfo == INT:
             do_raw_store_int(addr, offset, arraydescr.ofs, value)
         elif arraydescr.typeinfo == FLOAT:
-            do_raw_store_float(addr, offset, arraydescr.ofs, value)
+            do_raw_store_float(addr, offset, value)
         else:
             raise NotImplementedError
 
@@ -851,7 +851,7 @@
         elif arraydescr.typeinfo == INT:
             return do_raw_load_int(addr, offset, arraydescr.ofs)
         elif arraydescr.typeinfo == FLOAT:
-            return do_raw_load_float(addr, offset, arraydescr.ofs)
+            return do_raw_load_float(addr, offset)
         else:
             raise NotImplementedError
 
@@ -1520,19 +1520,24 @@
     value = ll_p[0]
     return rffi.cast(lltype.Signed, value)
 
-def do_raw_load_float(struct, offset, descrofs):
-    TYPE = symbolic.Size2Type[descrofs]
+def do_raw_load_float(struct, offset):
     ll_p = rffi.cast(rffi.CCHARP, struct)
-    ll_p = rffi.cast(lltype.Ptr(TYPE), rffi.ptradd(ll_p, offset))
+    ll_p = rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE),
+                     rffi.ptradd(ll_p, offset))
     value = ll_p[0]
-    return rffi.cast(longlong.FLOATSTORAGE, value)
+    return value
 
 def do_raw_store_int(struct, offset, descrofs, value):
     TYPE = symbolic.Size2Type[descrofs]
     ll_p = rffi.cast(rffi.CCHARP, struct)
     ll_p = rffi.cast(lltype.Ptr(TYPE), rffi.ptradd(ll_p, offset))
     ll_p[0] = rffi.cast(TYPE.OF, value)
-do_raw_store_float = do_raw_store_int
+
+def do_raw_store_float(struct, offset, value):
+    ll_p = rffi.cast(rffi.CCHARP, struct)
+    ll_p = rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE),
+                     rffi.ptradd(ll_p, offset))
+    ll_p[0] = value
 
 def do_new(size):
     TYPE = symbolic.Size2Type[size]
diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -470,13 +470,13 @@
         return llimpl.do_raw_store_int(struct, offset, descr.ofs, newvalue)
     def bh_raw_store_f(self, struct, offset, descr, newvalue):
         assert isinstance(descr, Descr)
-        return llimpl.do_raw_store_float(struct, offset, descr.ofs, newvalue)
+        return llimpl.do_raw_store_float(struct, offset, newvalue)
     def bh_raw_load_i(self, struct, offset, descr):
         assert isinstance(descr, Descr)
         return llimpl.do_raw_load_int(struct, offset, descr.ofs)
     def bh_raw_load_f(self, struct, offset, descr):
         assert isinstance(descr, Descr)
-        return llimpl.do_raw_load_float(struct, offset, descr.ofs)
+        return llimpl.do_raw_load_float(struct, offset)
 
     def bh_new(self, sizedescr):
         assert isinstance(sizedescr, Descr)
diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -3383,7 +3383,7 @@
             p = rawstorage.alloc_raw_storage(31)
             for i in range(31):
                 p[i] = '\xDD'
-            value = 0x4243444546474849
+            value = 0x4243444546474849 & sys.maxint
             loop = parse(ops, self.cpu, namespace=locals())
             looptoken = JitCellToken()
             self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
@@ -3412,7 +3412,8 @@
             looptoken = JitCellToken()
             self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
             self.cpu.execute_token(looptoken,
-                                   rffi.cast(lltype.Signed, p), 16, value)
+                                   rffi.cast(lltype.Signed, p), 16,
+                                   longlong.getfloatstorage(value))
             result = rawstorage.raw_storage_getitem(T, p, 16)
             assert result == rffi.cast(T, value)
             rawstorage.free_raw_storage(p)


More information about the pypy-commit mailing list