[pypy-commit] pypy arm-backend-2: add names to the functions generated to emit code in the assembler

bivab noreply at buildbot.pypy.org
Tue Oct 25 16:31:53 CEST 2011


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r48438:e9b9f641f506
Date: 2011-10-25 16:30 +0200
http://bitbucket.org/pypy/pypy/changeset/e9b9f641f506/

Log:	add names to the functions generated to emit code in the assembler

diff --git a/pypy/jit/backend/arm/helper/assembler.py b/pypy/jit/backend/arm/helper/assembler.py
--- a/pypy/jit/backend/arm/helper/assembler.py
+++ b/pypy/jit/backend/arm/helper/assembler.py
@@ -6,7 +6,7 @@
 from pypy.rlib.rarithmetic import r_uint, r_longlong, intmask
 from pypy.jit.metainterp.resoperation import rop
 
-def gen_emit_op_unary_cmp(true_cond, false_cond):
+def gen_emit_op_unary_cmp(name, true_cond, false_cond):
     def f(self, op, arglocs, regalloc, fcond):
         assert fcond is not None
         reg, res = arglocs
@@ -14,9 +14,10 @@
         self.mc.MOV_ri(res.value, 1, true_cond)
         self.mc.MOV_ri(res.value, 0, false_cond)
         return fcond
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_op_ri(opname):
+def gen_emit_op_ri(name, opname):
     ri_op = getattr(AbstractARMv7Builder, '%s_ri' % opname)
     rr_op = getattr(AbstractARMv7Builder, '%s_rr' % opname)
     def f(self, op, arglocs, regalloc, fcond):
@@ -27,9 +28,10 @@
         else:
             rr_op(self.mc, res.value, l0.value, l1.value)
         return fcond
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_op_by_helper_call(opname):
+def gen_emit_op_by_helper_call(name, opname):
     helper = getattr(AbstractARMv7Builder, opname)
     def f(self, op, arglocs, regalloc, fcond):
         assert fcond is not None
@@ -40,9 +42,10 @@
         with saved_registers(self.mc, regs, r.caller_vfp_resp):
             helper(self.mc, fcond)
         return fcond
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_cmp_op(condition):
+def gen_emit_cmp_op(name, condition):
     def f(self, op, arglocs, regalloc, fcond):
         l0, l1, res = arglocs
 
@@ -54,9 +57,10 @@
         self.mc.MOV_ri(res.value, 1, cond=condition)
         self.mc.MOV_ri(res.value, 0, cond=inv)
         return fcond
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_cmp_op_guard(condition):
+def gen_emit_cmp_op_guard(name, condition):
     def f(self, op, guard, arglocs, regalloc, fcond):
         l0 = arglocs[0]
         l1 = arglocs[1]
@@ -72,24 +76,27 @@
             cond = inv
         self._emit_guard(guard, arglocs[2:], cond)
         return fcond
+    f.__name__ = 'emit_guard_%s' % name
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_float_op(opname):
+def gen_emit_float_op(name, opname):
     op_rr = getattr(AbstractARMv7Builder, opname)
     def f(self, op, arglocs, regalloc, fcond):
         arg1, arg2, result = arglocs
         op_rr(self.mc, result.value, arg1.value, arg2.value)
         return fcond
     return f
-def gen_emit_unary_float_op(opname):
+def gen_emit_unary_float_op(name, opname):
     op_rr = getattr(AbstractARMv7Builder, opname)
     def f(self, op, arglocs, regalloc, fcond):
         arg1, result = arglocs
         op_rr(self.mc, result.value, arg1.value)
         return fcond
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_float_cmp_op(cond):
+def gen_emit_float_cmp_op(name, cond):
     def f(self, op, arglocs, regalloc, fcond):
         arg1, arg2, res = arglocs
         inv = c.get_opposite_of(cond)
@@ -98,9 +105,10 @@
         self.mc.MOV_ri(res.value, 1, cond=cond)
         self.mc.MOV_ri(res.value, 0, cond=inv)
         return fcond
+    f.__name__ = 'emit_op_%s' % name
     return f
 
-def gen_emit_float_cmp_op_guard(guard_cond):
+def gen_emit_float_cmp_op_guard(name, guard_cond):
     def f(self, op, guard, arglocs, regalloc, fcond):
         arg1 = arglocs[0]
         arg2 = arglocs[1]
@@ -113,6 +121,7 @@
             cond = inv
         self._emit_guard(guard, arglocs[2:], cond)
         return fcond
+    f.__name__ = 'emit_guard_%s' % name
     return f
 
 class saved_registers(object):
diff --git a/pypy/jit/backend/arm/opassembler.py b/pypy/jit/backend/arm/opassembler.py
--- a/pypy/jit/backend/arm/opassembler.py
+++ b/pypy/jit/backend/arm/opassembler.py
@@ -9,6 +9,7 @@
 
 from pypy.jit.backend.arm.helper.assembler import (gen_emit_op_by_helper_call,
                                                     gen_emit_op_unary_cmp,
+                                                    gen_emit_guard_unary_cmp,
                                                     gen_emit_op_ri,
                                                     gen_emit_cmp_op,
                                                     gen_emit_cmp_op_guard,
@@ -117,45 +118,45 @@
         self._emit_guard_overflow(guard, arglocs[3:], fcond)
         return fcond
 
-    emit_op_int_floordiv = gen_emit_op_by_helper_call('DIV')
-    emit_op_int_mod = gen_emit_op_by_helper_call('MOD')
-    emit_op_uint_floordiv = gen_emit_op_by_helper_call('UDIV')
+    emit_op_int_floordiv = gen_emit_op_by_helper_call('int_floordiv', 'DIV')
+    emit_op_int_mod = gen_emit_op_by_helper_call('int_mod', 'MOD')
+    emit_op_uint_floordiv = gen_emit_op_by_helper_call('uint_floordiv', 'UDIV')
 
-    emit_op_int_and = gen_emit_op_ri('AND')
-    emit_op_int_or = gen_emit_op_ri('ORR')
-    emit_op_int_xor = gen_emit_op_ri('EOR')
-    emit_op_int_lshift = gen_emit_op_ri('LSL')
-    emit_op_int_rshift = gen_emit_op_ri('ASR')
-    emit_op_uint_rshift = gen_emit_op_ri('LSR')
+    emit_op_int_and = gen_emit_op_ri('int_and', 'AND')
+    emit_op_int_or = gen_emit_op_ri('int_or', 'ORR')
+    emit_op_int_xor = gen_emit_op_ri('int_xor', 'EOR')
+    emit_op_int_lshift = gen_emit_op_ri('int_lshift', 'LSL')
+    emit_op_int_rshift = gen_emit_op_ri('int_rshift', 'ASR')
+    emit_op_uint_rshift = gen_emit_op_ri('uint_rshift', 'LSR')
 
-    emit_op_int_lt = gen_emit_cmp_op(c.LT)
-    emit_op_int_le = gen_emit_cmp_op(c.LE)
-    emit_op_int_eq = gen_emit_cmp_op(c.EQ)
-    emit_op_int_ne = gen_emit_cmp_op(c.NE)
-    emit_op_int_gt = gen_emit_cmp_op(c.GT)
-    emit_op_int_ge = gen_emit_cmp_op(c.GE)
+    emit_op_int_lt = gen_emit_cmp_op('int_lt', c.LT)
+    emit_op_int_le = gen_emit_cmp_op('int_le', c.LE)
+    emit_op_int_eq = gen_emit_cmp_op('int_eq', c.EQ)
+    emit_op_int_ne = gen_emit_cmp_op('int_ne', c.NE)
+    emit_op_int_gt = gen_emit_cmp_op('int_gt', c.GT)
+    emit_op_int_ge = gen_emit_cmp_op('int_ge', c.GE)
 
-    emit_op_uint_le = gen_emit_cmp_op(c.LS)
-    emit_op_uint_gt = gen_emit_cmp_op(c.HI)
+    emit_op_uint_le = gen_emit_cmp_op('uint_le', c.LS)
+    emit_op_uint_gt = gen_emit_cmp_op('uint_gt', c.HI)
 
-    emit_op_uint_lt = gen_emit_cmp_op(c.HI)
-    emit_op_uint_ge = gen_emit_cmp_op(c.LS)
+    emit_op_uint_lt = gen_emit_cmp_op('uint_lt', c.HI)
+    emit_op_uint_ge = gen_emit_cmp_op('uint_ge', c.LS)
 
     emit_op_ptr_eq = emit_op_int_eq
     emit_op_ptr_ne = emit_op_int_ne
 
-    emit_guard_int_lt = gen_emit_cmp_op_guard(c.LT)
-    emit_guard_int_le = gen_emit_cmp_op_guard(c.LE)
-    emit_guard_int_eq = gen_emit_cmp_op_guard(c.EQ)
-    emit_guard_int_ne = gen_emit_cmp_op_guard(c.NE)
-    emit_guard_int_gt = gen_emit_cmp_op_guard(c.GT)
-    emit_guard_int_ge = gen_emit_cmp_op_guard(c.GE)
+    emit_guard_int_lt = gen_emit_cmp_op_guard('int_lt', c.LT)
+    emit_guard_int_le = gen_emit_cmp_op_guard('int_le', c.LE)
+    emit_guard_int_eq = gen_emit_cmp_op_guard('int_eq', c.EQ)
+    emit_guard_int_ne = gen_emit_cmp_op_guard('int_ne', c.NE)
+    emit_guard_int_gt = gen_emit_cmp_op_guard('int_gt', c.GT)
+    emit_guard_int_ge = gen_emit_cmp_op_guard('int_ge', c.GE)
 
-    emit_guard_uint_le = gen_emit_cmp_op_guard(c.LS)
-    emit_guard_uint_gt = gen_emit_cmp_op_guard(c.HI)
+    emit_guard_uint_le = gen_emit_cmp_op_guard('uint_le', c.LS)
+    emit_guard_uint_gt = gen_emit_cmp_op_guard('uint_gt', c.HI)
 
-    emit_guard_uint_lt = gen_emit_cmp_op_guard(c.HI)
-    emit_guard_uint_ge = gen_emit_cmp_op_guard(c.LS)
+    emit_guard_uint_lt = gen_emit_cmp_op_guard('uint_lt', c.HI)
+    emit_guard_uint_ge = gen_emit_cmp_op_guard('uint_ge', c.LS)
 
     emit_guard_ptr_eq = emit_guard_int_eq
     emit_guard_ptr_ne = emit_guard_int_ne
@@ -169,8 +170,8 @@
 
     _mixin_ = True
 
-    emit_op_int_is_true = gen_emit_op_unary_cmp(c.NE, c.EQ)
-    emit_op_int_is_zero = gen_emit_op_unary_cmp(c.EQ, c.NE)
+    emit_op_int_is_true = gen_emit_op_unary_cmp('int_is_true', c.NE, c.EQ)
+    emit_op_int_is_zero = gen_emit_op_unary_cmp('int_is_zero', c.EQ, c.NE)
 
     def emit_op_int_invert(self, op, arglocs, regalloc, fcond):
         reg, res = arglocs
@@ -1142,28 +1143,28 @@
 class FloatOpAssemlber(object):
     _mixin_ = True
 
-    emit_op_float_add = gen_emit_float_op('VADD')
-    emit_op_float_sub = gen_emit_float_op('VSUB')
-    emit_op_float_mul = gen_emit_float_op('VMUL')
-    emit_op_float_truediv = gen_emit_float_op('VDIV')
+    emit_op_float_add = gen_emit_float_op('float_add', 'VADD')
+    emit_op_float_sub = gen_emit_float_op('float_sub', 'VSUB')
+    emit_op_float_mul = gen_emit_float_op('float_mul', 'VMUL')
+    emit_op_float_truediv = gen_emit_float_op('float_truediv', 'VDIV')
 
-    emit_op_float_neg = gen_emit_unary_float_op('VNEG')
-    emit_op_float_abs = gen_emit_unary_float_op('VABS')
-    emit_op_math_sqrt = gen_emit_unary_float_op('VSQRT')
+    emit_op_float_neg = gen_emit_unary_float_op('float_neg', 'VNEG')
+    emit_op_float_abs = gen_emit_unary_float_op('float_abs', 'VABS')
+    emit_op_math_sqrt = gen_emit_unary_float_op('math_sqrt', 'VSQRT')
 
-    emit_op_float_lt = gen_emit_float_cmp_op(c.VFP_LT)
-    emit_op_float_le = gen_emit_float_cmp_op(c.VFP_LE)
-    emit_op_float_eq = gen_emit_float_cmp_op(c.EQ)
-    emit_op_float_ne = gen_emit_float_cmp_op(c.NE)
-    emit_op_float_gt = gen_emit_float_cmp_op(c.GT)
-    emit_op_float_ge = gen_emit_float_cmp_op(c.GE)
+    emit_op_float_lt = gen_emit_float_cmp_op('float_lt', c.VFP_LT)
+    emit_op_float_le = gen_emit_float_cmp_op('float_le', c.VFP_LE)
+    emit_op_float_eq = gen_emit_float_cmp_op('float_eq', c.EQ)
+    emit_op_float_ne = gen_emit_float_cmp_op('float_ne', c.NE)
+    emit_op_float_gt = gen_emit_float_cmp_op('float_gt', c.GT)
+    emit_op_float_ge = gen_emit_float_cmp_op('float_ge', c.GE)
 
-    emit_guard_float_lt = gen_emit_float_cmp_op_guard(c.VFP_LT)
-    emit_guard_float_le = gen_emit_float_cmp_op_guard(c.VFP_LE)
-    emit_guard_float_eq = gen_emit_float_cmp_op_guard(c.EQ)
-    emit_guard_float_ne = gen_emit_float_cmp_op_guard(c.NE)
-    emit_guard_float_gt = gen_emit_float_cmp_op_guard(c.GT)
-    emit_guard_float_ge = gen_emit_float_cmp_op_guard(c.GE)
+    emit_guard_float_lt = gen_emit_float_cmp_op_guard('float_lt', c.VFP_LT)
+    emit_guard_float_le = gen_emit_float_cmp_op_guard('float_le', c.VFP_LE)
+    emit_guard_float_eq = gen_emit_float_cmp_op_guard('float_eq', c.EQ)
+    emit_guard_float_ne = gen_emit_float_cmp_op_guard('float_ne', c.NE)
+    emit_guard_float_gt = gen_emit_float_cmp_op_guard('float_gt', c.GT)
+    emit_guard_float_ge = gen_emit_float_cmp_op_guard('float_ge', c.GE)
 
     def emit_op_cast_float_to_int(self, op, arglocs, regalloc, fcond):
         arg, temp, res = arglocs


More information about the pypy-commit mailing list