[pypy-commit] pypy s390x-backend: STC can only tak 12 bits imm, this is wrong (use STCY again), fixed pool issue

plan_rich pypy.commits at gmail.com
Wed Feb 3 16:46:11 EST 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r82065:785c6853c253
Date: 2016-02-03 22:44 +0100
http://bitbucket.org/pypy/pypy/changeset/785c6853c253/

Log:	STC can only tak 12 bits imm, this is wrong (use STCY again), fixed
	pool issue

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
@@ -563,13 +563,14 @@
                 #     (index >> card_page_shift) & 7
                 # 0x80 sets zero flag. will store 0 into all not selected bits
                 mc.RISBGN(r.SCRATCH, loc_index, l.imm(61), l.imm(0x80 | 63), l.imm(64-n))
+                #mc.SRAG(r.SCRATCH, loc_index, l.addr(n))
+                #mc.NILL(r.SCRATCH, l.imm(0x7))
 
                 # set SCRATCH2 to 1 << r1
                 # invert the bits of tmp_loc
-                mc.XIHF(tmp_loc, l.imm(0xffffFFFF))
-                mc.XILF(tmp_loc, l.imm(0xffffFFFF))
-                #mc.LG(r.SCRATCH2, l.pool(self.pool.constant_64_ones))
-                #mc.XGR(tmp_loc, r.SCRATCH2)
+                #mc.XIHF(tmp_loc, l.imm(0xffffFFFF))
+                #mc.XILF(tmp_loc, l.imm(0xffffFFFF))
+                mc.XG(tmp_loc, l.pool(self.pool.constant_64_ones))
                 mc.LGHI(r.SCRATCH2, l.imm(1))
                 mc.SLAG(r.SCRATCH2, r.SCRATCH2, l.addr(0,r.SCRATCH))
 
@@ -589,7 +590,7 @@
                 addr = l.addr(byte_ofs, loc_base)
                 mc.LLGC(r.SCRATCH, addr)
                 mc.OILL(r.SCRATCH, l.imm(byte_val))
-                mc.STC(r.SCRATCH, addr)
+                mc.STCY(r.SCRATCH, addr)
             #
             # patch the beq just above
             currpos = mc.currpos()
diff --git a/rpython/jit/backend/zarch/pool.py b/rpython/jit/backend/zarch/pool.py
--- a/rpython/jit/backend/zarch/pool.py
+++ b/rpython/jit/backend/zarch/pool.py
@@ -88,6 +88,8 @@
                 if arg.is_constant():
                     self.reserve_literal(8, arg)
             return
+        elif opnum == rop.COND_CALL_GC_WB_ARRAY:
+            self.constant_64_ones = 1 # we need constant ones!!!
         for arg in op.getarglist():
             if arg.is_constant():
                 self.reserve_literal(8, arg)


More information about the pypy-commit mailing list