[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