[pypy-commit] pypy release-5.x: (s390x) impl uint_mul_high, removed uint_floordiv, int_floordiv and int_mod
plan_rich
pypy.commits at gmail.com
Tue Jun 7 09:15:40 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: release-5.x
Changeset: r84999:4dbea4b610dd
Date: 2016-06-06 23:06 +0200
http://bitbucket.org/pypy/pypy/changeset/4dbea4b610dd/
Log: (s390x) impl uint_mul_high, removed uint_floordiv, int_floordiv and
int_mod
diff --git a/rpython/jit/backend/ppc/regalloc.py b/rpython/jit/backend/ppc/regalloc.py
--- a/rpython/jit/backend/ppc/regalloc.py
+++ b/rpython/jit/backend/ppc/regalloc.py
@@ -439,7 +439,7 @@
prepare_int_lshift = helper.prepare_binary_op
prepare_int_rshift = helper.prepare_binary_op
prepare_uint_rshift = helper.prepare_binary_op
- prepare_uint_mul_high = helper.prepare_binary_op
+ prepare_uint_mul_high = helper.prepare_int_mul_ovf
prepare_int_add_ovf = helper.prepare_binary_op
prepare_int_sub_ovf = helper.prepare_binary_op
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
@@ -29,6 +29,7 @@
'MGHI': ('ri', ['\xA7','\x0D']),
'MSGFI': ('ril', ['\xC2','\x00']),
'MLGR': ('rre', ['\xB9','\x86'], 'eo,r'),
+ 'MLG': ('rxy', ['\xE3','\x86'], 'eo,bid'),
# div/mod
'DSGR': ('rre', ['\xB9','\x0D'], 'eo,r'),
'DSG': ('rxy', ['\xE3','\x0D'], 'eo,bidl'),
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
@@ -160,11 +160,15 @@
omc.BRC(c.ANY, l.imm(label_end - jmp_neither_lqlr_overflow))
omc.overwrite()
- emit_int_floordiv = gen_emit_div_mod('DSGR', 'DSG')
- emit_uint_floordiv = gen_emit_div_mod('DLGR', 'DLG')
- # NOTE division sets one register with the modulo value, thus
- # the regalloc ensures the right register survives.
- emit_int_mod = gen_emit_div_mod('DSGR', 'DSG')
+ def emit_uint_mul_high(self, op, arglocs, regalloc):
+ r0, _, a1 = arglocs
+ # _ carries the value, contents of r0 are ignored
+ assert not r0.is_imm()
+ assert not a1.is_imm()
+ if a1.is_core_reg():
+ self.mc.MLGR(r0, a1)
+ else:
+ self.mc.MLG(r0, a1)
def emit_int_invert(self, op, arglocs, regalloc):
l0, = arglocs
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
@@ -733,9 +733,6 @@
prepare_int_sub_ovf = helper.prepare_int_sub
prepare_int_mul = helper.prepare_int_mul
prepare_int_mul_ovf = helper.prepare_int_mul_ovf
- prepare_int_floordiv = helper.prepare_int_div
- prepare_uint_floordiv = helper.prepare_int_div
- prepare_int_mod = helper.prepare_int_mod
prepare_nursery_ptr_increment = prepare_int_add
prepare_int_and = helper.prepare_int_logic
@@ -746,6 +743,18 @@
prepare_int_lshift = helper.prepare_int_shift
prepare_uint_rshift = helper.prepare_int_shift
+ def prepare_uint_mul_high(self, op):
+ a0 = op.getarg(0)
+ a1 = op.getarg(1)
+ if a0.is_constant():
+ a0, a1 = a1, a0
+ if helper.check_imm32(a1):
+ l1 = self.ensure_reg(a1)
+ else:
+ l1 = self.ensure_reg_or_pool(a1)
+ lr,lq = self.rm.ensure_even_odd_pair(a0, op, bind_first=True)
+ return [lr, lq, l1]
+
prepare_int_le = helper.generate_cmp_op()
prepare_int_lt = helper.generate_cmp_op()
prepare_int_ge = helper.generate_cmp_op()
More information about the pypy-commit
mailing list