[pypy-commit] pypy s390x-backend: replaced load 32bit imm with load imm that can handle 64 bit too

plan_rich pypy.commits at gmail.com
Mon Jan 18 07:52:43 EST 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r81834:045f28548d0a
Date: 2016-01-18 13:51 +0100
http://bitbucket.org/pypy/pypy/changeset/045f28548d0a/

Log:	replaced load 32bit imm with load imm that can handle 64 bit too

diff --git a/rpython/jit/backend/zarch/assembler.py b/rpython/jit/backend/zarch/assembler.py
--- a/rpython/jit/backend/zarch/assembler.py
+++ b/rpython/jit/backend/zarch/assembler.py
@@ -1227,8 +1227,7 @@
             gcmap = lltype.nullptr(jitframe.GCMAP)
         self.load_gcmap(self.mc, r.r2, gcmap)
 
-        assert fail_descr_loc.getint() <= 2**32-1
-        self.mc.LGFI(r.r3, fail_descr_loc)
+        self.mc.load_imm(r.r3, fail_descr_loc.getint())
         self.mc.STG(r.r3, l.addr(ofs, r.SPP))
         self.mc.STG(r.r2, l.addr(ofs2, r.SPP))
 
diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py
--- a/rpython/jit/backend/zarch/opassembler.py
+++ b/rpython/jit/backend/zarch/opassembler.py
@@ -694,16 +694,19 @@
 
     def _cmp_guard_class(self, op, locs, regalloc):
         offset = self.cpu.vtable_offset
+        loc_ptr = locs[0]
+        loc_classptr = locs[1]
         if offset is not None:
             # could be one instruction shorter, but don't care because
             # it's not this case that is commonly translated
-            self.mc.LG(r.SCRATCH, l.addr(offset, locs[0]))
+            self.mc.LG(r.SCRATCH, l.addr(offset, loc_ptr))
             self.mc.load_imm(r.SCRATCH2, locs[1].value)
             self.mc.cmp_op(r.SCRATCH, r.SCRATCH2)
         else:
+            classptr = loc_classptr.value
             expected_typeid = (self.cpu.gc_ll_descr
-                    .get_typeid_from_classptr_if_gcremovetypeptr(locs[1].value))
-            self._cmp_guard_gc_type(locs[0], expected_typeid)
+                    .get_typeid_from_classptr_if_gcremovetypeptr(classptr))
+            self._cmp_guard_gc_type(loc_ptr, expected_typeid)
 
     def _read_typeid(self, targetreg, loc_ptr):
         # Note that the typeid half-word is at offset 0 on a little-endian
@@ -753,10 +756,10 @@
         offset2 = self.cpu.subclassrange_min_offset
         if offset is not None:
             # read this field to get the vtable pointer
-            self.mc.LG(r.SCRATCH2, l.addr(offset, loc_object))
+            self.mc.LG(r.SCRATCH, l.addr(offset, loc_object))
             # read the vtable's subclassrange_min field
             assert check_imm_value(offset2)
-            self.mc.load(r.SCRATCH2, r.SCRATCH2, offset2)
+            self.mc.load(r.SCRATCH2, r.SCRATCH, offset2)
         else:
             # read the typeid
             self._read_typeid(r.SCRATCH, loc_object)
diff --git a/rpython/jit/backend/zarch/regalloc.py b/rpython/jit/backend/zarch/regalloc.py
--- a/rpython/jit/backend/zarch/regalloc.py
+++ b/rpython/jit/backend/zarch/regalloc.py
@@ -1081,6 +1081,11 @@
         arglocs = self._prepare_guard(op, [loc, resloc])
         return arglocs
 
+    def prepare_guard_is_object(self, op):
+        loc_object = self.ensure_reg(op.getarg(0), force_in_reg=True)
+        arglocs = self._prepare_guard(op, [loc_object])
+        return arglocs
+
     def prepare_save_exception(self, op):
         res = self.rm.force_allocate_reg(op)
         return [res]
@@ -1191,6 +1196,7 @@
         # we know it does not move, but well
         rgc._make_sure_does_not_move(fail_descr)
         fail_descr = rffi.cast(lltype.Signed, fail_descr)
+        assert fail_descr > 0
         if op.numargs() > 0:
             loc = self.ensure_reg(op.getarg(0))
             locs = [loc, imm(fail_descr)]


More information about the pypy-commit mailing list