[pypy-svn] r79145 - in pypy/branch/arm-backend/pypy/jit/backend/arm: . helper

david at codespeak.net david at codespeak.net
Tue Nov 16 14:14:18 CET 2010


Author: david
Date: Tue Nov 16 14:14:17 2010
New Revision: 79145

Modified:
   pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py
   pypy/branch/arm-backend/pypy/jit/backend/arm/helper/assembler.py
   pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py
Log:
Implement same_as operation

Modified: pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py
==============================================================================
--- pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py	(original)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py	Tue Nov 16 14:14:17 2010
@@ -199,13 +199,12 @@
     epilog_size = 3*WORD
     def gen_func_epilog(self,cond=c.AL):
         self.mc.MOV_rr(r.sp.value, r.fp.value)
-        self.mc.POP([r.r4.value], cond=cond) # Pop value used as forcething
+        self.mc.ADD_ri(r.sp.value, r.sp.value, WORD)
         self.mc.POP([reg.value for reg in r.callee_restored_registers], cond=cond)
 
     def gen_func_prolog(self):
         self.mc.PUSH([reg.value for reg in r.callee_saved_registers])
-        self.mc.MOV_ri(r.r4.value, 0xCC)
-        self.mc.PUSH([r.r4.value]) # Push some reg to use as force thing which is restored when popping from stack
+        self.mc.SUB_ri(r.sp.value, r.sp.value,  WORD)
         self.mc.MOV_rr(r.fp.value, r.sp.value)
 
     def gen_bootstrap_code(self, inputargs, regalloc, looptoken):

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	Tue Nov 16 14:14:17 2010
@@ -50,10 +50,8 @@
         arg2 = regalloc.make_sure_var_in_reg(a1, [a0], selected_reg=r.r1, imm_fine=False)
         assert arg1 == r.r0
         assert arg2 == r.r1
-        regalloc.before_call()
         res = regalloc.force_allocate_reg(op.result, selected_reg=r.r0)
         getattr(self.mc, opname)(fcond)
-        regalloc.after_call(op.result)
         regalloc.possibly_free_vars_for_op(op)
         return fcond
     return f

Modified: pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py
==============================================================================
--- pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py	(original)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py	Tue Nov 16 14:14:17 2010
@@ -13,7 +13,7 @@
 from pypy.jit.backend.llsupport import symbolic
 from pypy.jit.backend.llsupport.descr import BaseFieldDescr, BaseArrayDescr
 from pypy.jit.backend.llsupport.regalloc import compute_vars_longevity, TempBox
-from pypy.jit.metainterp.history import ConstInt, BoxInt, BasicFailDescr
+from pypy.jit.metainterp.history import Const, ConstInt, BoxInt, BasicFailDescr
 from pypy.jit.metainterp.resoperation import rop
 from pypy.rlib import rgc
 from pypy.rlib.objectmodel import we_are_translated
@@ -275,6 +275,17 @@
             self._adjust_sp(-n, regalloc, fcond=fcond)
         regalloc.possibly_free_vars(locs)
 
+    def emit_op_same_as(self, op, regalloc, fcond):
+        resloc = regalloc.force_allocate_reg(op.result)
+        arg = op.getarg(0)
+        imm_arg = isinstance(arg, ConstInt) and (arg.getint() <= 0xFF or -1 * arg.getint() <= 0xFF)
+        argloc = regalloc.make_sure_var_in_reg(arg, imm_fine=imm_arg)
+        if argloc.is_imm():
+            self.mc.MOV_ri(resloc.value, argloc.getint())
+        else:
+            self.mc.MOV_rr(resloc.value, argloc.value)
+        regalloc.possibly_free_vars_for_op(op)
+
 class FieldOpAssembler(object):
 
     _mixin_ = True



More information about the Pypy-commit mailing list