[pypy-commit] pypy s390x-backend: added helper to prepare regalloc for an unary value, added load positive and load negative instruction

plan_rich noreply at buildbot.pypy.org
Thu Nov 12 08:33:14 EST 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r80647:56dc6a5d2a55
Date: 2015-11-12 14:33 +0100
http://bitbucket.org/pypy/pypy/changeset/56dc6a5d2a55/

Log:	added helper to prepare regalloc for an unary value, added load
	positive and load negative instruction

diff --git a/rpython/jit/backend/zarch/helper/regalloc.py b/rpython/jit/backend/zarch/helper/regalloc.py
--- a/rpython/jit/backend/zarch/helper/regalloc.py
+++ b/rpython/jit/backend/zarch/helper/regalloc.py
@@ -117,3 +117,11 @@
     self.force_result_in_reg(op, a0)
     self.free_op_vars()
     return [l0, l1]
+
+def prepare_unary(self, op):
+    a0 = op.getarg(0)
+    assert not a0.is_imm()
+    l0 = self.ensure_reg(a0)
+    self.force_result_in_reg(op, a0)
+    self.free_op_vars()
+    return [l0]
diff --git a/rpython/jit/backend/zarch/instructions.py b/rpython/jit/backend/zarch/instructions.py
--- a/rpython/jit/backend/zarch/instructions.py
+++ b/rpython/jit/backend/zarch/instructions.py
@@ -37,6 +37,11 @@
     'SRLG':    ('rsy',   ['\xEB','\x0C']),
     'SLLG':    ('rsy',   ['\xEB','\x0D']),
 
+    # invert & negative & absolute
+    'LPGR':    ('rre',   ['\xB9','\x00']),
+    'LNGR':    ('rre',   ['\xB9','\x01']),
+
+
 
     # div
 
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
@@ -555,6 +555,12 @@
     prepare_int_eq = helper.prepare_cmp_op
     prepare_int_ne = helper.prepare_cmp_op
 
+    prepare_int_is_zero = helper.prepare_unary_op
+    prepare_int_is_true = helper.prepare_unary_op
+    prepare_int_neg     = helper.prepare_unary_op
+    prepare_int_invert  = helper.prepare_unary_op
+    prepare_int_force_ge_zero = helper.prepare_unary_op
+
     prepare_float_add = helper.prepare_binary_op
     prepare_float_sub = helper.prepare_binary_op
     prepare_float_mul = helper.prepare_binary_op
@@ -696,11 +702,29 @@
 
 prepare_oplist = [notimplemented] * (rop._LAST + 1)
 
+implemented_count = 0
+total_count = 0
+missing = []
 for key, value in rop.__dict__.items():
     key = key.lower()
     if key.startswith('_'):
         continue
+    total_count += 1
     methname = 'prepare_%s' % key
     if hasattr(Regalloc, methname):
         func = getattr(Regalloc, methname).im_func
         prepare_oplist[value] = func
+        implemented_count += 1
+    else:
+        missing.append(methname)
+
+if __name__ == '__main__':
+    for m in missing:
+        print(" " * 4 + m)
+    print
+    print("regalloc implements %.2f%% of all resops" % \
+          (100.0 * implemented_count / total_count))
+
+del implemented_count
+del total_count
+del missing


More information about the pypy-commit mailing list