[pypy-commit] pypy s390x-backend: _multiply_by_constant is still used by malloc_cond_varsize

plan_rich pypy.commits at gmail.com
Sun Mar 6 12:39:33 EST 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r82821:64b4e6d07aed
Date: 2016-03-06 18:38 +0100
http://bitbucket.org/pypy/pypy/changeset/64b4e6d07aed/

Log:	_multiply_by_constant is still used by malloc_cond_varsize

diff --git a/rpython/jit/backend/ppc/opassembler.py b/rpython/jit/backend/ppc/opassembler.py
--- a/rpython/jit/backend/ppc/opassembler.py
+++ b/rpython/jit/backend/ppc/opassembler.py
@@ -828,6 +828,29 @@
 
     SIZE2SCALE = dict([(1<<_i, _i) for _i in range(32)])
 
+    def _multiply_by_constant(self, loc, multiply_by, scratch_loc):
+        # XXX should die together with _apply_scale() but can't because
+        # of emit_zero_array() and malloc_cond_varsize() at the moment
+        assert loc.is_reg()
+        if multiply_by == 1:
+            return loc
+        try:
+            scale = self.SIZE2SCALE[multiply_by]
+        except KeyError:
+            if _check_imm_arg(multiply_by):
+                self.mc.mulli(scratch_loc.value, loc.value, multiply_by)
+            else:
+                self.mc.load_imm(scratch_loc, multiply_by)
+                if IS_PPC_32:
+                    self.mc.mullw(scratch_loc.value, loc.value,
+                                  scratch_loc.value)
+                else:
+                    self.mc.mulld(scratch_loc.value, loc.value,
+                                  scratch_loc.value)
+        else:
+            self.mc.sldi(scratch_loc.value, loc.value, scale)
+        return scratch_loc
+
     def _copy_in_scratch2(self, loc):
         if loc.is_imm():
             self.mc.li(r.SCRATCH2.value, loc.value)


More information about the pypy-commit mailing list