[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