[pypy-commit] pypy ppc-jit-backend: Define getarrayitem_raw, getfield_raw, etc. Sign extend getfield result.
edelsohn
noreply at buildbot.pypy.org
Mon Nov 14 00:08:14 CET 2011
Author: edelsohn
Branch: ppc-jit-backend
Changeset: r49384:3bebd83ccde0
Date: 2011-11-13 18:08 -0500
http://bitbucket.org/pypy/pypy/changeset/3bebd83ccde0/
Log: Define getarrayitem_raw, getfield_raw, etc. Sign extend getfield
result.
diff --git a/pypy/jit/backend/ppc/ppcgen/opassembler.py b/pypy/jit/backend/ppc/ppcgen/opassembler.py
--- a/pypy/jit/backend/ppc/ppcgen/opassembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/opassembler.py
@@ -312,6 +312,7 @@
self.mc.stbx(value_loc.value, base_loc.value, ofs.value)
else:
assert 0, "size not supported"
+
emit_setfield_raw = emit_setfield_gc
def emit_getfield_gc(self, op, arglocs, regalloc):
@@ -338,6 +339,14 @@
self.mc.lbzx(res.value, base_loc.value, ofs.value)
else:
assert 0, "size not supported"
+
+ #XXX Hack, Hack, Hack
+ if not we_are_translated():
+ descr = op.getdescr()
+ size = descr.get_field_size(False)
+ signed = descr.is_field_signed()
+ self._ensure_result_bit_extension(res, size, signed)
+
emit_getfield_raw = emit_getfield_gc
emit_getfield_raw_pure = emit_getfield_gc
emit_getfield_gc_pure = emit_getfield_gc
@@ -376,6 +385,8 @@
else:
assert 0, "scale %s not supported" % (scale.value)
+ emit_setarrayitem_raw = emit_setarrayitem_gc
+
def emit_getarrayitem_gc(self, op, arglocs, regalloc):
res, base_loc, ofs_loc, scale, ofs = arglocs
if scale.value > 0:
@@ -409,6 +420,9 @@
signed = descr.is_item_signed()
self._ensure_result_bit_extension(res, size, signed)
+ emit_getarrayitem_raw = emit_getarrayitem_gc
+ emit_getarrayitem_gc_pure = emit_getarrayitem_gc
+
def emit_strlen(self, op, arglocs, regalloc):
l0, l1, res = arglocs
if l1.is_imm():
diff --git a/pypy/jit/backend/ppc/ppcgen/regalloc.py b/pypy/jit/backend/ppc/ppcgen/regalloc.py
--- a/pypy/jit/backend/ppc/ppcgen/regalloc.py
+++ b/pypy/jit/backend/ppc/ppcgen/regalloc.py
@@ -449,6 +449,8 @@
self.possibly_free_vars(boxes)
return [value_loc, base_loc, ofs_loc, imm(scale), imm(ofs)]
+ prepare_setarrayitem_raw = prepare_setarrayitem_gc
+
def prepare_getarrayitem_gc(self, op):
a0, a1 = boxes = list(op.getarglist())
_, scale, ofs, _, ptr = self._unpack_arraydescr(op.getdescr())
@@ -462,6 +464,9 @@
self.possibly_free_var(op.result)
return [res, base_loc, ofs_loc, imm(scale), imm(ofs)]
+ prepare_getarrayitem_raw = prepare_getarrayitem_gc
+ prepare_getarrayitem_gc_pure = prepare_getarrayitem_gc
+
def prepare_strlen(self, op):
l0, box = self._ensure_value_is_boxed(op.getarg(0))
boxes = [box]
More information about the pypy-commit
mailing list