[pypy-svn] r79784 - pypy/branch/arm-backend/pypy/jit/backend/arm/helper
david at codespeak.net
david at codespeak.net
Fri Dec 3 17:29:20 CET 2010
Author: david
Date: Fri Dec 3 17:29:17 2010
New Revision: 79784
Modified:
pypy/branch/arm-backend/pypy/jit/backend/arm/helper/assembler.py
Log:
Fix comparison ops based on random test results
Modified: pypy/branch/arm-backend/pypy/jit/backend/arm/helper/assembler.py
==============================================================================
--- pypy/branch/arm-backend/pypy/jit/backend/arm/helper/assembler.py (original)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/helper/assembler.py Fri Dec 3 17:29:17 2010
@@ -45,7 +45,7 @@
regalloc.possibly_free_var(op.result)
if l1.is_imm():
- ri_op(self.mc, res.value, l0.value, imm=l1.getint(), cond=fcond)
+ ri_op(self.mc, res.value, l0.value, imm=l1.value, cond=fcond)
else:
rr_op(self.mc, res.value, l0.value, l1.value)
return fcond
@@ -74,30 +74,32 @@
def gen_emit_cmp_op(condition, inverse=False):
def f(self, op, regalloc, fcond):
assert fcond is not None
- args = op.getarglist()
+ boxes = list(op.getarglist())
if not inverse:
- arg0 = op.getarg(0)
- arg1 = op.getarg(1)
+ arg0, arg1 = boxes
else:
- arg0 = op.getarg(1)
- arg1 = op.getarg(0)
+ arg1, arg0 = boxes
# XXX consider swapping argumentes if arg0 is const
imm_a0 = self._check_imm_arg(arg0)
imm_a1 = self._check_imm_arg(arg1)
+
+ l0, box = self._ensure_value_is_boxed(arg0, regalloc, forbidden_vars=boxes)
+ boxes.append(box)
if imm_a1 and not imm_a0:
- l0 = regalloc.make_sure_var_in_reg(arg0, args, imm_fine=False)
- l1 = regalloc.make_sure_var_in_reg(arg1, args)
- res = regalloc.force_allocate_reg(op.result)
- self.mc.CMP_ri(l0.value, imm=l1.getint(), cond=fcond)
+ l1 = regalloc.make_sure_var_in_reg(arg1, boxes)
else:
- l0 = regalloc.make_sure_var_in_reg(arg0, args, imm_fine=False)
- l1 = regalloc.make_sure_var_in_reg(arg1, args, imm_fine=False)
- res = regalloc.force_allocate_reg(op.result)
- self.mc.CMP_rr(l0.value, l1.value, cond=fcond)
+ l1, box = self._ensure_value_is_boxed(arg1, regalloc, forbidden_vars=boxes)
+ boxes.append(box)
+ res = regalloc.force_allocate_reg(op.result)
+ regalloc.possibly_free_vars(boxes)
+ regalloc.possibly_free_var(op.result)
inv = c.get_opposite_of(condition)
+ if l1.is_imm():
+ self.mc.CMP_ri(l0.value, imm=l1.getint(), cond=fcond)
+ else:
+ self.mc.CMP_rr(l0.value, l1.value, cond=fcond)
self.mc.MOV_ri(res.value, 1, cond=condition)
self.mc.MOV_ri(res.value, 0, cond=inv)
- regalloc.possibly_free_vars([arg0, arg1, op.result])
return fcond
return f
More information about the Pypy-commit
mailing list