[pypy-svn] r36808 - pypy/dist/pypy/jit/codegen/ppc
mwh at codespeak.net
mwh at codespeak.net
Tue Jan 16 15:59:31 CET 2007
Author: mwh
Date: Tue Jan 16 15:59:30 2007
New Revision: 36808
Modified:
pypy/dist/pypy/jit/codegen/ppc/rgenop.py
Log:
use one less instruction to implement int_rshift
Modified: pypy/dist/pypy/jit/codegen/ppc/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/ppc/rgenop.py Tue Jan 16 15:59:30 2007
@@ -794,8 +794,7 @@
gv_ntlu_y_32 = self._arg_arg_op(gv_b, gv_y, _PPC.subf)
gv_c = self._arg_imm_op(gv_x, self.rgenop.genconst(31), _PPC.srawi)
- gv_d = self._arg_op(gv_ntlu_y_32, _PPC.not_)
- gv_o = self._arg_arg_op(gv_c, gv_d, _PPC.and_)
+ gv_o = self._arg_arg_op(gv_c, gv_ntlu_y_32, _PPC.andc_)
gv_e = self._arg_arg_op(gv_x, gv_y, _PPC.sraw)
gv_w = self._arg_arg_op(gv_e, gv_ntlu_y_32, _PPC.and_)
@@ -851,6 +850,9 @@
op_uint_or = op_int_or
op_uint_lshift = op_int_lshift
+
+ ## def op_uint_lshift_val(self, gv_x, gv_y):
+
def op_uint_rshift(self, gv_x, gv_y):
if gv_y.fits_in_immediate():
if abs(gv_y.value) >= 32:
@@ -862,16 +864,13 @@
# here's the plan:
#
# z = ngeu(y, 32) (as per cwg)
- # w = x << y
+ # w = x >> y
# r = w&z
gv_a = self._arg_imm_op(gv_y, self.rgenop.genconst(32), _PPC.subfic)
gv_b = self._arg_op(gv_y, _PPC.addze)
gv_z = self._arg_arg_op(gv_b, gv_y, _PPC.subf)
gv_w = self._arg_arg_op(gv_x, gv_y, _PPC.srw)
return self._arg_arg_op(gv_z, gv_w, _PPC.and_)
-
- ## def op_uint_lshift_val(self, gv_x, gv_y):
- ## def op_uint_rshift(self, gv_x, gv_y):
## def op_uint_rshift_val(self, gv_x, gv_y):
op_uint_xor = op_int_xor
More information about the Pypy-commit
mailing list