[pypy-commit] pypy ffi-backend: raw memory for the x86 backend
fijal
noreply at buildbot.pypy.org
Sun Jul 8 18:26:34 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: ffi-backend
Changeset: r55999:7f4ef0c9bcfd
Date: 2012-07-08 18:26 +0200
http://bitbucket.org/pypy/pypy/changeset/7f4ef0c9bcfd/
Log: raw memory for the x86 backend
diff --git a/pypy/jit/backend/llsupport/llmodel.py b/pypy/jit/backend/llsupport/llmodel.py
--- a/pypy/jit/backend/llsupport/llmodel.py
+++ b/pypy/jit/backend/llsupport/llmodel.py
@@ -580,6 +580,30 @@
bh_setfield_raw_r = _base_do_setfield_r
bh_setfield_raw_f = _base_do_setfield_f
+ def bh_raw_store_i(self, addr, offset, descr, newvalue):
+ ofs, size, sign = self.unpack_arraydescr_size(descr)
+ items = addr + offset
+ for TYPE, _, itemsize in unroll_basic_sizes:
+ if size == itemsize:
+ items = rffi.cast(rffi.CArrayPtr(TYPE), items)
+ items[0] = rffi.cast(TYPE, newvalue)
+
+ def bh_raw_store_f(self, addr, offset, descr, newvalue):
+ items = rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE), addr + offset)
+ items[0] = newvalue
+
+ def bh_raw_load_i(self, addr, offset, descr):
+ ofs, size, sign = self.unpack_arraydescr_size(descr)
+ items = addr + offset
+ for TYPE, _, itemsize in unroll_basic_sizes:
+ if size == itemsize:
+ items = rffi.cast(rffi.CArrayPtr(TYPE), items)
+ return rffi.cast(lltype.Signed, items[0])
+
+ def bh_raw_load_f(self, addr, offset, descr):
+ items = rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE), addr + offset)
+ return items[0]
+
def bh_new(self, sizedescr):
return self.gc_ll_descr.gc_malloc(sizedescr)
diff --git a/pypy/jit/backend/x86/test/test_rawmem.py b/pypy/jit/backend/x86/test/test_rawmem.py
new file mode 100644
--- /dev/null
+++ b/pypy/jit/backend/x86/test/test_rawmem.py
@@ -0,0 +1,9 @@
+
+from pypy.jit.backend.x86.test.test_basic import Jit386Mixin
+from pypy.jit.metainterp.test.test_rawmem import RawMemTests
+
+
+class TestRawMem(Jit386Mixin, RawMemTests):
+ # for the individual tests see
+ # ====> ../../../metainterp/test/test_rawmem.py
+ pass
diff --git a/pypy/jit/metainterp/test/test_rawmem.py b/pypy/jit/metainterp/test/test_rawmem.py
--- a/pypy/jit/metainterp/test/test_rawmem.py
+++ b/pypy/jit/metainterp/test/test_rawmem.py
@@ -3,7 +3,7 @@
from pypy.rlib.rawstorage import (alloc_raw_storage, raw_storage_setitem,
free_raw_storage, raw_storage_getitem)
-class TestJITRawMem(LLJitMixin):
+class RawMemTests(object):
def test_cast_void_ptr(self):
TP = lltype.Array(lltype.Float, hints={"nolength": True})
VOID_TP = lltype.Array(lltype.Void, hints={"nolength": True, "uncast_on_llgraph": True})
@@ -57,3 +57,6 @@
self.check_operations_history({'call': 2, 'guard_no_exception': 1,
'raw_store': 1, 'raw_load': 1,
'finish': 1})
+
+class TestRawMem(RawMemTests, LLJitMixin):
+ pass
More information about the pypy-commit
mailing list