Author: hager <sven.ha...@uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r48149:f853fd60f4d0
Date: 2011-10-17 19:06 +0200
http://bitbucket.org/pypy/pypy/changeset/f853fd60f4d0/

Log:    Reimplemented INT_MUL.

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
@@ -18,6 +18,10 @@
 
 class OpAssembler(object):
         
+    # ********************************************************
+    # *               I N T    O P E R A T I O N S           *
+    # ********************************************************
+
     def emit_int_add(self, op, arglocs, regalloc):
         l0, l1, res = arglocs
         if l0.is_imm():
@@ -36,7 +40,11 @@
             self.mc.subi(res.value, l0.value, l1.value)
         else:
             self.mc.sub(res.value, l0.value, l1.value)
-   
+ 
+    def emit_int_mul(self, op, arglocs, regalloc):
+        reg1, reg2, res = arglocs
+        self.mc.mullw(res.value, reg1.value, reg2.value)
+
     emit_int_le = gen_emit_cmp_op(c.LE)   
 
     def _emit_guard(self, op, arglocs, fcond, save_exc=False,
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
@@ -159,7 +159,7 @@
                 box = TempInt()
             loc = self.force_allocate_reg(box, forbidden_vars=forbidden_vars)
             imm = self.rm.convert_to_imm(thing)
-            self.assembler.load_word(loc, imm)
+            self.assembler.load_imm(loc.value, imm.value)
         else:
             loc = self.make_sure_var_in_reg(thing,
                     forbidden_vars=forbidden_vars)
@@ -221,6 +221,21 @@
         res = self.force_allocate_reg(op.result)
         return locs + [res]
 
+    def prepare_int_mul(self, op):
+        boxes = list(op.getarglist())
+        b0, b1 = boxes
+
+        reg1, box = self._ensure_value_is_boxed(b0, forbidden_vars=boxes)
+        boxes.append(box)
+        reg2, box = self._ensure_value_is_boxed(b1, forbidden_vars=boxes)
+        boxes.append(box)
+
+        self.possibly_free_vars(boxes)
+        self.possibly_free_vars_for_op(op)
+        res = self.force_allocate_reg(op.result)
+        self.possibly_free_var(op.result)
+        return [reg1, reg2, res]
+
     def prepare_finish(self, op):
         args = [locations.imm(self.frame_manager.frame_depth)]
         for i in range(op.numargs()):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to