Author: Richard Plangger <planri...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit