Author: Armin Rigo <ar...@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}) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit