[pypy-commit] pypy ffi-backend: (fijal, arigo) fix
arigo
noreply at buildbot.pypy.org
Sun Jun 24 19:18:49 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r55808:456a41f95ce2
Date: 2012-06-24 19:02 +0200
http://bitbucket.org/pypy/pypy/changeset/456a41f95ce2/
Log: (fijal, arigo) fix
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
@@ -854,14 +854,20 @@
op.result)
def rewrite_op_raw_store(self, op):
- assert op.args[3].concretetype == op.args[1].value
- kind = getkind(op.args[3].concretetype)[0]
- size = llmemory.sizeof(op.args[1].value)
- c_size = Constant(size, lltype.Signed)
+ T = op.args[2].concretetype
+ kind = getkind(T)[0]
+ c_size = Constant(rffi.sizeof(T), lltype.Signed)
return SpaceOperation('raw_store_%s' % kind,
- [op.args[0], c_size, op.args[2], op.args[3]],
+ [op.args[0], op.args[1], c_size, op.args[2]],
None)
+ def rewrite_op_raw_load(self, op):
+ T = op.result.concretetype
+ kind = getkind(T)[0]
+ c_size = Constant(rffi.sizeof(T), lltype.Signed)
+ return SpaceOperation('raw_load_%s' % kind,
+ [op.args[0], op.args[1], c_size], op.result)
+
def _rewrite_equality(self, op, opname):
arg0, arg1 = op.args
if isinstance(arg0, Constant) and not arg0.value:
diff --git a/pypy/jit/codewriter/test/test_jtransform.py b/pypy/jit/codewriter/test/test_jtransform.py
--- a/pypy/jit/codewriter/test/test_jtransform.py
+++ b/pypy/jit/codewriter/test/test_jtransform.py
@@ -860,12 +860,27 @@
def test_raw_store():
v_storage = varoftype(llmemory.Address)
- v_typ = varoftype(lltype.Void)
v_index = varoftype(lltype.Signed)
v_item = varoftype(lltype.Signed) # for example
- op = SpaceOperation('raw_store', [v_storage, v_typ, v_index, v_item])
+ op = SpaceOperation('raw_store', [v_storage, v_index, v_item], None)
op1 = Transformer(FakeCPU()).rewrite_operation(op)
- assert op1.opname == 'raw_store'
+ assert op1.opname == 'raw_store_i'
+ assert op1.args[0] == v_storage
+ assert op1.args[1] == v_index
+ assert op1.args[2].value == rffi.sizeof(lltype.Signed)
+ assert op1.args[3] == v_item
+
+def test_raw_load():
+ v_storage = varoftype(llmemory.Address)
+ v_index = varoftype(lltype.Signed)
+ v_res = varoftype(lltype.Signed) # for example
+ op = SpaceOperation('raw_load', [v_storage, v_index], v_res)
+ op1 = Transformer(FakeCPU()).rewrite_operation(op)
+ assert op1.opname == 'raw_load_i'
+ assert op1.args[0] == v_storage
+ assert op1.args[1] == v_index
+ assert op1.args[2].value == rffi.sizeof(lltype.Signed)
+ assert op1.result == v_res
def test_promote_1():
v1 = varoftype(lltype.Signed)
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
@@ -1,7 +1,7 @@
from pypy.jit.metainterp.test.support import LLJitMixin
from pypy.rpython.lltypesystem import lltype, rffi
from pypy.rlib.rawstorage import (alloc_raw_storage, raw_storage_setitem,
- free_raw_storage)
+ free_raw_storage, raw_storage_getitem)
class TestJITRawMem(LLJitMixin):
def test_cast_void_ptr(self):
@@ -36,9 +36,10 @@
def f():
p = alloc_raw_storage(15)
raw_storage_setitem(p, 3, 24)
+ res = raw_storage_getitem(lltype.Signed, p, 3)
free_raw_storage(p)
- return 42
+ return res
res = self.interp_operations(f, [])
- assert res == 42
+ assert res == 24
self.check_operations_history({'call': 2, 'guard_no_exception': 1,
'finish': 1})
More information about the pypy-commit
mailing list