Author: hager <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit