[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