Author: Antonio Cuni <anto.c...@gmail.com> Branch: faster-rstruct-2 Changeset: r91262:0b70e69aebec Date: 2017-05-12 00:59 +0200 http://bitbucket.org/pypy/pypy/changeset/0b70e69aebec/
Log: hoorray! Implement the last bits of gc_store_indexed in llgraph and finally the test passes :) diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -747,11 +747,21 @@ return llop.gc_load_indexed(longlong.FLOATSTORAGE, struct, index, scale, base_ofs) - def bh_gc_store_indexed_i(self, struct, index, scale, base_ofs, val, bytes): + def bh_gc_store_indexed_i(self, struct, index, scale, base_ofs, val, bytes, + descr): T = self._get_int_type_from_size(bytes) val = lltype.cast_primitive(T, val) llop.gc_store_indexed(lltype.Void, struct, index, scale, base_ofs, val) + def bh_gc_store_indexed(self, struct, index, scale, base_ofs, val, bytes, + descr): + if descr.A.OF == lltype.Float: + XXX + self.bh_raw_store_f(struct, offset, newvalue, descr) + else: + self.bh_gc_store_indexed_i(struct, index, scale, base_ofs, + val, bytes, descr) + def bh_increment_debug_counter(self, addr): p = rffi.cast(rffi.CArrayPtr(lltype.Signed), addr) p[0] += 1 diff --git a/rpython/jit/metainterp/executor.py b/rpython/jit/metainterp/executor.py --- a/rpython/jit/metainterp/executor.py +++ b/rpython/jit/metainterp/executor.py @@ -264,7 +264,8 @@ import pdb;pdb.set_trace() else: intval = valuebox.getint() - cpu.bh_gc_store_indexed_i(addr, index, scale, base_ofs, intval, bytes) + cpu.bh_gc_store_indexed_i(addr, index, scale, base_ofs, intval, bytes, + arraydescr) def exec_new_with_vtable(cpu, descr): diff --git a/rpython/jit/metainterp/test/test_llop.py b/rpython/jit/metainterp/test/test_llop.py --- a/rpython/jit/metainterp/test/test_llop.py +++ b/rpython/jit/metainterp/test/test_llop.py @@ -29,9 +29,12 @@ return longlong.int2singlefloat(res) return res - def newlist_and_gc_store(self, TYPE, value): + def newlist_and_gc_store(self, TYPE, value, expected): def f(value): - return newlist_and_gc_store(TYPE, value) + lst = newlist_and_gc_store(TYPE, value) + got = ''.join(lst) + assert got == expected + return len(got) return self.interp_operations(f, [value], supports_singlefloats=True) diff --git a/rpython/rtyper/test/test_llop.py b/rpython/rtyper/test/test_llop.py --- a/rpython/rtyper/test/test_llop.py +++ b/rpython/rtyper/test/test_llop.py @@ -48,9 +48,7 @@ def test_gc_store_indexed(self): expected = struct.pack('i', 0x12345678) - lst = self.newlist_and_gc_store(rffi.INT, 0x12345678) - buf = ''.join(lst) - assert buf == expected + self.newlist_and_gc_store(rffi.INT, 0x12345678, expected) class TestDirect(BaseLLOpTest): @@ -58,8 +56,10 @@ def gc_load_from_string(self, TYPE, buf, offset): return str_gc_load(TYPE, buf, offset) - def newlist_and_gc_store(self, TYPE, value): - return newlist_and_gc_store(TYPE, value) + def newlist_and_gc_store(self, TYPE, value, expected): + got = newlist_and_gc_store(TYPE, value) + got = ''.join(got) + assert got == expected class TestRTyping(BaseLLOpTest, BaseRtypingTest): @@ -68,8 +68,9 @@ return str_gc_load(TYPE, buf, offset) return self.interpret(fn, [offset]) - def newlist_and_gc_store(self, TYPE, value): + def newlist_and_gc_store(self, TYPE, value, expected): def fn(value): return newlist_and_gc_store(TYPE, value) ll_res = self.interpret(fn, [value]) - return list(ll_res.items) + got = ''.join(ll_res.items) + assert got == expected diff --git a/rpython/translator/c/test/test_llop.py b/rpython/translator/c/test/test_llop.py --- a/rpython/translator/c/test/test_llop.py +++ b/rpython/translator/c/test/test_llop.py @@ -26,7 +26,7 @@ x = fn(buf, offset) return lltype.cast_primitive(TYPE, x) - def newlist_and_gc_store(self, TYPE, value): + def newlist_and_gc_store(self, TYPE, value, expected): if TYPE not in self.cache: assert isinstance(TYPE, lltype.Primitive) if TYPE in (lltype.Float, lltype.SingleFloat): @@ -43,4 +43,5 @@ self.cache[TYPE] = fn # fn = self.cache[TYPE] - return fn(value) + got = fn(value) + assert got == expected _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit