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