[pypy-commit] pypy optresult: support GETFIELD_RAW_R

fijal noreply at buildbot.pypy.org
Wed Jun 3 17:24:24 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r77828:6bb83ce45814
Date: 2015-06-03 17:24 +0200
http://bitbucket.org/pypy/pypy/changeset/6bb83ce45814/

Log:	support GETFIELD_RAW_R

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
@@ -180,17 +180,20 @@
     struct = structbox.getref_base()
     return cpu.bh_getfield_gc_f(struct, fielddescr)
 
-def do_getfield_raw(cpu, _, structbox, fielddescr):
-    raise Exception("implement me")    
-    xxxx
+def do_getfield_raw_i(cpu, _, structbox, fielddescr):
     check_descr(fielddescr)
     struct = structbox.getint()
-    if fielddescr.is_pointer_field():
-        return BoxPtr(cpu.bh_getfield_raw_r(struct, fielddescr))
-    elif fielddescr.is_float_field():
-        return BoxFloat(cpu.bh_getfield_raw_f(struct, fielddescr))
-    else:
-        return BoxInt(cpu.bh_getfield_raw_i(struct, fielddescr))
+    return cpu.bh_getfield_raw_i(struct, fielddescr)
+
+def do_getfield_raw_f(cpu, _, structbox, fielddescr):
+    check_descr(fielddescr)
+    struct = structbox.getint()
+    return cpu.bh_getfield_raw_f(struct, fielddescr)
+
+def do_getfield_raw_r(cpu, _, structbox, fielddescr):
+    check_descr(fielddescr)
+    struct = structbox.getint()
+    return cpu.bh_getfield_raw_r(struct, fielddescr)
 
 def do_setfield_gc(cpu, _, structbox, itembox, fielddescr):
     struct = structbox.getref_base()
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -407,6 +407,7 @@
             b1.make_le(IntUpperBound(descr.get_integer_max()))
 
     optimize_GETFIELD_RAW_F = optimize_GETFIELD_RAW_I
+    optimize_GETFIELD_RAW_R = optimize_GETFIELD_RAW_I
     optimize_GETFIELD_GC_I = optimize_GETFIELD_RAW_I
     optimize_GETFIELD_GC_R = optimize_GETFIELD_RAW_I
     optimize_GETFIELD_GC_F = optimize_GETFIELD_RAW_I
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
@@ -784,6 +784,9 @@
     def opimpl_getfield_raw_i_pure(self, box, fielddescr):
         return self.execute_with_descr(rop.GETFIELD_RAW_PURE_I, fielddescr, box)
     @arguments("box", "descr")
+    def opimpl_getfield_raw_r_pure(self, box, fielddescr):
+        return self.execute_with_descr(rop.GETFIELD_RAW_PURE_R, fielddescr, box)
+    @arguments("box", "descr")
     def opimpl_getfield_raw_f_pure(self, box, fielddescr):
         return self.execute_with_descr(rop.GETFIELD_RAW_PURE_F, fielddescr, box)
 
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -725,7 +725,7 @@
     'STRLEN/1/i',
     'STRGETITEM/2/i',
     'GETFIELD_GC_PURE/1d/rfi',
-    'GETFIELD_RAW_PURE/1d/fi',
+    'GETFIELD_RAW_PURE/1d/rfi',
     'GETARRAYITEM_GC_PURE/2d/rfi',
     'GETARRAYITEM_RAW_PURE/2d/fi',
     'UNICODELEN/1/i',


More information about the pypy-commit mailing list