[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