[pypy-svn] r79254 - pypy/branch/arm-backend/pypy/jit/backend/arm/helper

david at codespeak.net david at codespeak.net
Thu Nov 18 15:27:14 CET 2010


Author: david
Date: Thu Nov 18 15:27:13 2010
New Revision: 79254

Modified:
   pypy/branch/arm-backend/pypy/jit/backend/arm/helper/assembler.py
Log:
Fix result handling when calling helper functions for arithmetic operations

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	Thu Nov 18 15:27:13 2010
@@ -4,6 +4,7 @@
 
 def gen_emit_op_unary_cmp(true_cond, false_cond):
     def f(self, op, regalloc, fcond):
+        assert fcond is not None
         a0 = op.getarg(0)
         reg = regalloc.make_sure_var_in_reg(a0, imm_fine=False)
         res = regalloc.force_allocate_reg(op.result, [a0])
@@ -16,6 +17,7 @@
 
 def gen_emit_op_ri(opname, imm_size=0xFF, commutative=True, allow_zero=True):
     def f(self, op, regalloc, fcond):
+        assert fcond is not None
         ri_op = getattr(self.mc, '%s_ri' % opname)
         rr_op = getattr(self.mc, '%s_rr' % opname)
 
@@ -44,20 +46,23 @@
 
 def gen_emit_op_by_helper_call(opname):
     def f(self, op, regalloc, fcond):
+        assert fcond is not None
         a0 = op.getarg(0)
         a1 = op.getarg(1)
         arg1 = regalloc.make_sure_var_in_reg(a0, selected_reg=r.r0, imm_fine=False)
         arg2 = regalloc.make_sure_var_in_reg(a1, [a0], selected_reg=r.r1, imm_fine=False)
         assert arg1 == r.r0
         assert arg2 == r.r1
-        res = regalloc.force_allocate_reg(op.result, selected_reg=r.r0)
+        regalloc.before_call()
         getattr(self.mc, opname)(fcond)
+        regalloc.after_call(op.result)
         regalloc.possibly_free_vars_for_op(op)
         return fcond
     return f
 
 def gen_emit_cmp_op(condition, inverse=False):
     def f(self, op, regalloc, fcond):
+        assert fcond is not None
         if not inverse:
             arg0 = op.getarg(0)
             arg1 = op.getarg(1)



More information about the Pypy-commit mailing list