Author: Antonio Cuni <anto.c...@gmail.com>
Branch: faster-rstruct-2
Changeset: r91266:88ae2f6e9df5
Date: 2017-05-12 16:25 +0200
http://bitbucket.org/pypy/pypy/changeset/88ae2f6e9df5/

Log:    implement support for gc_store_indexed also in llsupport: this fixes
        the tests for the x86 backend, and hopefully for the other backends
        as well

diff --git a/rpython/jit/backend/llsupport/llmodel.py 
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -754,6 +754,16 @@
         offset = base_ofs + scale * index
         return self.read_float_at_mem(addr, offset)
 
+    def bh_gc_store_indexed_i(self, addr, index, val, scale, base_ofs, bytes,
+                              descr):
+        offset = base_ofs + scale * index
+        self.write_int_at_mem(addr, offset, bytes, val)
+
+    def bh_gc_store_indexed_f(self, addr, index, val, scale, base_ofs, bytes,
+                              descr):
+        offset = base_ofs + scale * index
+        self.write_float_at_mem(addr, offset, val)
+
     def bh_new(self, sizedescr):
         return self.gc_ll_descr.gc_malloc(sizedescr)
 
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
@@ -262,7 +262,7 @@
         raise AssertionError("cannot store GC pointers in gc_store_indexed for 
now")
     elif arraydescr.is_array_of_floats():
         floatval = valuebox.getfloat()
-        cpu.bh_gc_store_indexed_i(addr, index, floatval, scale, base_ofs, 
bytes,
+        cpu.bh_gc_store_indexed_f(addr, index, floatval, scale, base_ofs, 
bytes,
                                   arraydescr)
     else:
         intval = valuebox.getint()
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
@@ -33,7 +33,9 @@
         def f(value):
             lst = newlist_and_gc_store(TYPE, value)
             got = ''.join(lst)
-            assert got == expected
+            if got != expected:
+                # I'm not sure why, but if I use an assert, the test doesn't 
fail
+                raise ValueError('got != expected')
             return len(got)
         return self.interp_operations(f, [value], supports_singlefloats=True)
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to