Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r66878:2df4a2cdc3d4
Date: 2013-09-09 21:19 +0200
http://bitbucket.org/pypy/pypy/changeset/2df4a2cdc3d4/

Log:    Oups, attempt to fix translation

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
@@ -418,7 +418,6 @@
 
     bh_setfield_raw   = bh_setfield_gc
     bh_setfield_raw_i = bh_setfield_raw
-    bh_setfield_raw_r = bh_setfield_raw
     bh_setfield_raw_f = bh_setfield_raw
 
     def bh_arraylen_gc(self, a, descr):
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
@@ -390,9 +390,11 @@
         else:
             raise NotImplementedError("size = %d" % size)
 
+    @specialize.argtype(1)
     def read_ref_at_mem(self, gcref, ofs):
         return llop.raw_load(llmemory.GCREF, gcref, ofs)
 
+    # non-@specialized: must only be called with llmemory.GCREF
     def write_ref_at_mem(self, gcref, ofs, newvalue):
         llop.raw_store(lltype.Void, gcref, ofs, newvalue)
         # the write barrier is implied above
@@ -541,6 +543,7 @@
         ofs, size, sign = self.unpack_fielddescr_size(fielddescr)
         return self.read_int_at_mem(struct, ofs, size, sign)
 
+    @specialize.argtype(1)
     def bh_getfield_gc_r(self, struct, fielddescr):
         ofs = self.unpack_fielddescr(fielddescr)
         return self.read_ref_at_mem(struct, ofs)
@@ -551,6 +554,7 @@
         return self.read_float_at_mem(struct, ofs)
 
     bh_getfield_raw_i = bh_getfield_gc_i
+    bh_getfield_raw_r = bh_getfield_gc_r
     bh_getfield_raw_f = bh_getfield_gc_f
 
     @specialize.argtype(1)
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -264,8 +264,6 @@
 
     def bh_setfield_raw_i(self, struct, newvalue, fielddescr):
         raise NotImplementedError
-    def bh_setfield_raw_r(self, struct, newvalue, fielddescr):
-        raise NotImplementedError
     def bh_setfield_raw_f(self, struct, newvalue, fielddescr):
         raise NotImplementedError
 
diff --git a/rpython/jit/codewriter/jtransform.py 
b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -688,6 +688,10 @@
         kind = getkind(RESULT)[0]
         op1 = SpaceOperation('getfield_%s_%s%s' % (argname, kind, pure),
                              [v_inst, descr], op.result)
+        if op1.opname == 'getfield_raw_r':
+            # note: 'getfield_raw_r_pure' is used e.g. to load class
+            # attributes that are GC objects, so that one is supported.
+            raise Exception("getfield_raw_r (without _pure) not supported")
         #
         if immut in (IR_QUASIIMMUTABLE, IR_QUASIIMMUTABLE_ARRAY):
             descr1 = self.cpu.fielddescrof(
@@ -720,6 +724,8 @@
         descr = self.cpu.fielddescrof(v_inst.concretetype.TO,
                                       c_fieldname.value)
         kind = getkind(RESULT)[0]
+        if argname == 'raw' and kind == 'r':
+            raise Exception("setfield_raw_r not supported")
         return SpaceOperation('setfield_%s_%s' % (argname, kind),
                               [v_inst, v_value, descr],
                               None)
diff --git a/rpython/jit/metainterp/blackhole.py 
b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -1263,14 +1263,15 @@
     def bhimpl_getfield_raw_i(cpu, struct, fielddescr):
         return cpu.bh_getfield_raw_i(struct, fielddescr)
     @arguments("cpu", "i", "d", returns="r")
-    def bhimpl_getfield_raw_r(cpu, struct, fielddescr):
+    def _bhimpl_getfield_raw_r(cpu, struct, fielddescr):
+        # only for 'getfield_raw_r_pure'
         return cpu.bh_getfield_raw_r(struct, fielddescr)
     @arguments("cpu", "i", "d", returns="f")
     def bhimpl_getfield_raw_f(cpu, struct, fielddescr):
         return cpu.bh_getfield_raw_f(struct, fielddescr)
 
     bhimpl_getfield_raw_i_pure = bhimpl_getfield_raw_i
-    bhimpl_getfield_raw_r_pure = bhimpl_getfield_raw_r
+    bhimpl_getfield_raw_r_pure = _bhimpl_getfield_raw_r
     bhimpl_getfield_raw_f_pure = bhimpl_getfield_raw_f
 
     @arguments("cpu", "r", "i", "d")
@@ -1290,9 +1291,6 @@
     @arguments("cpu", "i", "i", "d")
     def bhimpl_setfield_raw_i(cpu, struct, newvalue, fielddescr):
         cpu.bh_setfield_raw_i(struct, newvalue, fielddescr)
-    @arguments("cpu", "i", "r", "d")
-    def bhimpl_setfield_raw_r(cpu, struct, newvalue, fielddescr):
-        cpu.bh_setfield_raw_r(struct, newvalue, fielddescr)
     @arguments("cpu", "i", "f", "d")
     def bhimpl_setfield_raw_f(cpu, struct, newvalue, fielddescr):
         cpu.bh_setfield_raw_f(struct, newvalue, fielddescr)
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
@@ -177,9 +177,8 @@
 
 def do_setfield_raw(cpu, _, structbox, itembox, fielddescr):
     struct = structbox.getint()
-    if fielddescr.is_pointer_field():
-        cpu.bh_setfield_raw_r(struct, itembox.getref_base(), fielddescr)
-    elif fielddescr.is_float_field():
+    assert not fielddescr.is_pointer_field()
+    if fielddescr.is_float_field():
         cpu.bh_setfield_raw_f(struct, itembox.getfloatstorage(), fielddescr)
     else:
         cpu.bh_setfield_raw_i(struct, itembox.getint(), fielddescr)
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -643,7 +643,6 @@
     def _opimpl_getfield_raw_any(self, box, fielddescr):
         return self.execute_with_descr(rop.GETFIELD_RAW, fielddescr, box)
     opimpl_getfield_raw_i = _opimpl_getfield_raw_any
-    opimpl_getfield_raw_r = _opimpl_getfield_raw_any
     opimpl_getfield_raw_f = _opimpl_getfield_raw_any
 
     @arguments("box", "descr")
@@ -657,7 +656,6 @@
     def _opimpl_setfield_raw_any(self, box, valuebox, fielddescr):
         self.execute_with_descr(rop.SETFIELD_RAW, fielddescr, box, valuebox)
     opimpl_setfield_raw_i = _opimpl_setfield_raw_any
-    opimpl_setfield_raw_r = _opimpl_setfield_raw_any
     opimpl_setfield_raw_f = _opimpl_setfield_raw_any
 
     @arguments("box", "box", "box", "descr")
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to