[pypy-commit] pypy ffi-backend: (fijal, arigo)

arigo noreply at buildbot.pypy.org
Sun Jun 24 19:18:50 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r55809:964863171373
Date: 2012-06-24 19:18 +0200
http://bitbucket.org/pypy/pypy/changeset/964863171373/

Log:	(fijal, arigo) Phew

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
@@ -1515,6 +1515,19 @@
     else:
         return libffi._struct_getfield(lltype.Signed, addr, ofs)
 
+def do_raw_load_int(struct, offset, size):
+    assert isinstance(size, llmemory.ItemOffset) and size.repeat == 1
+    ll_p = rffi.cast(rffi.CCHARP, struct)
+    ll_p = rffi.cast(rffi.CArrayPtr(size.TYPE), rffi.ptradd(ll_p, offset))
+    value = ll_p[0]
+    return rffi.cast(lltype.Signed, value)
+
+def do_raw_store_int(struct, offset, size, value):
+    assert isinstance(size, llmemory.ItemOffset) and size.repeat == 1
+    ll_p = rffi.cast(rffi.CCHARP, struct)
+    ll_p = rffi.cast(rffi.CArrayPtr(size.TYPE), rffi.ptradd(ll_p, offset))
+    ll_p[0] = rffi.cast(size.TYPE, value)
+
 def do_new(size):
     TYPE = symbolic.Size2Type[size]
     x = lltype.malloc(TYPE, zero=True)
@@ -1921,6 +1934,7 @@
 setannotation(do_getinteriorfield_gc_int, annmodel.SomeInteger())
 setannotation(do_getinteriorfield_gc_ptr, annmodel.SomePtr(llmemory.GCREF))
 setannotation(do_getinteriorfield_gc_float, s_FloatStorage)
+setannotation(do_raw_load_int, annmodel.SomeInteger())
 setannotation(do_new, annmodel.SomePtr(llmemory.GCREF))
 setannotation(do_new_array, annmodel.SomePtr(llmemory.GCREF))
 setannotation(do_setarrayitem_gc_int, annmodel.s_None)
@@ -1937,6 +1951,7 @@
 setannotation(do_setinteriorfield_gc_int, annmodel.s_None)
 setannotation(do_setinteriorfield_gc_ptr, annmodel.s_None)
 setannotation(do_setinteriorfield_gc_float, annmodel.s_None)
+setannotation(do_raw_store_int, annmodel.s_None)
 setannotation(do_newstr, annmodel.SomePtr(llmemory.GCREF))
 setannotation(do_strsetitem, annmodel.s_None)
 setannotation(do_newunicode, annmodel.SomePtr(llmemory.GCREF))
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
@@ -482,6 +482,11 @@
         return llimpl.do_setinteriorfield_gc_float(array, index, descr.ofs,
                                                    value)
 
+    def bh_raw_store_i(self, struct, offset, size, newvalue):
+        return llimpl.do_raw_store_int(struct, offset, size, newvalue)
+    def bh_raw_load_i(self, struct, offset, size):
+        return llimpl.do_raw_load_int(struct, offset, size)
+
     def bh_new(self, sizedescr):
         assert isinstance(sizedescr, Descr)
         return llimpl.do_new(sizedescr.ofs)
diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -856,7 +856,7 @@
     def rewrite_op_raw_store(self, op):
         T = op.args[2].concretetype
         kind = getkind(T)[0]
-        c_size = Constant(rffi.sizeof(T), lltype.Signed)
+        c_size = Constant(llmemory.sizeof(T), lltype.Signed)
         return SpaceOperation('raw_store_%s' % kind,
                               [op.args[0], op.args[1], c_size, op.args[2]],
                               None)
@@ -864,7 +864,7 @@
     def rewrite_op_raw_load(self, op):
         T = op.result.concretetype
         kind = getkind(T)[0]
-        c_size = Constant(rffi.sizeof(T), lltype.Signed)
+        c_size = Constant(llmemory.sizeof(T), lltype.Signed)
         return SpaceOperation('raw_load_%s' % kind,
                               [op.args[0], op.args[1], c_size], op.result)
 
diff --git a/pypy/jit/metainterp/blackhole.py b/pypy/jit/metainterp/blackhole.py
--- a/pypy/jit/metainterp/blackhole.py
+++ b/pypy/jit/metainterp/blackhole.py
@@ -1269,6 +1269,14 @@
     def bhimpl_setfield_raw_f(cpu, struct, fielddescr, newvalue):
         cpu.bh_setfield_raw_f(struct, fielddescr, newvalue)
 
+    @arguments("cpu", "i", "i", "i", "i")
+    def bhimpl_raw_store_i(cpu, struct, offset, size, newvalue):
+        cpu.bh_raw_store_i(struct, offset, size, newvalue)
+
+    @arguments("cpu", "i", "i", "i", returns="i")
+    def bhimpl_raw_load_i(cpu, struct, offset, size):
+        return cpu.bh_raw_load_i(struct, offset, size)
+
     @arguments("r", "d", "d")
     def bhimpl_record_quasiimmut_field(struct, fielddescr, mutatefielddescr):
         pass


More information about the pypy-commit mailing list