[pypy-commit] pypy ppc-jit-backend: Implemented SAME_AS operation.

hager noreply at buildbot.pypy.org
Tue Oct 25 12:20:33 CEST 2011


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r48425:be68ff457064
Date: 2011-10-25 12:19 +0200
http://bitbucket.org/pypy/pypy/changeset/be68ff457064/

Log:	Implemented SAME_AS operation.

diff --git a/pypy/jit/backend/ppc/ppcgen/opassembler.py b/pypy/jit/backend/ppc/ppcgen/opassembler.py
--- a/pypy/jit/backend/ppc/ppcgen/opassembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/opassembler.py
@@ -428,5 +428,9 @@
         else:
             assert 0, itemsize.value
 
+    def emit_same_as(self, op, arglocs, regalloc):
+        argloc, resloc = arglocs
+        self.regalloc_mov(argloc, resloc)
+
     def nop(self):
         self.mc.ori(0, 0, 0)
diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
@@ -613,8 +613,7 @@
             value = prev_loc.getint()
             # move immediate value to register
             if loc.is_reg():
-                reg = loc.as_key()
-                self.mc.load_imm(reg, value)
+                self.mc.load_imm(loc, value)
                 return
             # move immediate value to memory
             elif loc.is_stack():
diff --git a/pypy/jit/backend/ppc/ppcgen/regalloc.py b/pypy/jit/backend/ppc/ppcgen/regalloc.py
--- a/pypy/jit/backend/ppc/ppcgen/regalloc.py
+++ b/pypy/jit/backend/ppc/ppcgen/regalloc.py
@@ -526,6 +526,19 @@
         scale = itemsize/2
         return [value_loc, base_loc, ofs_loc, imm(scale), imm(basesize), imm(itemsize)]
 
+    def prepare_same_as(self, op):
+        arg = op.getarg(0)
+        imm_arg = _check_imm_arg(arg)
+        if imm_arg:
+            argloc = self.make_sure_var_in_reg(arg)
+        else:
+            argloc, box = self._ensure_value_is_boxed(arg)
+            self.possibly_free_var(box)
+
+        resloc = self.force_allocate_reg(op.result)
+        self.possibly_free_var(op.result)
+        return [argloc, resloc]
+
     # from ../x86/regalloc.py:791
     def _unpack_fielddescr(self, fielddescr):
         assert isinstance(fielddescr, BaseFieldDescr)
diff --git a/pypy/jit/backend/ppc/ppcgen/test/test_regalloc.py b/pypy/jit/backend/ppc/ppcgen/test/test_regalloc.py
--- a/pypy/jit/backend/ppc/ppcgen/test/test_regalloc.py
+++ b/pypy/jit/backend/ppc/ppcgen/test/test_regalloc.py
@@ -81,12 +81,12 @@
         self.asm.mc = self.builder
 
     def test_immediate_to_reg(self):
-        self.asm.regalloc_mov(imm(5), reg(10))
+        self.asm.regalloc_mov(imm(5), r10)
         big = 2 << 28
-        self.asm.regalloc_mov(imm(big), reg(0))
+        self.asm.regalloc_mov(imm(big), r0)
 
-        exp_instr = [MI("load_imm", 10, 5), 
-                     MI("load_imm", 0, big)]
+        exp_instr = [MI("load_imm", r10, 5), 
+                     MI("load_imm", r0, big)]
         assert self.asm.mc.instrs == exp_instr
 
     def test_immediate_to_mem(self):


More information about the pypy-commit mailing list