[pypy-svn] r34343 - pypy/dist/pypy/jit/codegen/ppc
mwh at codespeak.net
mwh at codespeak.net
Tue Nov 7 20:01:37 CET 2006
Author: mwh
Date: Tue Nov 7 20:01:35 2006
New Revision: 34343
Modified:
pypy/dist/pypy/jit/codegen/ppc/rgenop.py
Log:
factor the "fits in an immediate" calculation into a couple of methods.
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 Nov 7 20:01:35 2006
@@ -29,6 +29,8 @@
_var_index[0] += 1
def __repr__(self):
return "<Var %d>" % self.__magic_index
+ def fits_in_immediate(self):
+ return False
class IntConst(GenConst):
@@ -56,6 +58,9 @@
asm.load_word(rSCRATCH, self.value)
asm.stw(rSCRATCH, rFP, loc.offset)
+ def fits_in_immediate(self):
+ return abs(self.value) < 2**16
+
class JumpPatchupGenerator(object):
def __init__(self, asm, min_offset):
@@ -348,20 +353,20 @@
return gv_result
def op_int_add(self, gv_x, gv_y):
- if isinstance(gv_y, IntConst) and abs(gv_y.value) < 2**16:
- gv_result = Var()
+ gv_result = Var()
+ if gv_y.fits_in_immediate():
self.insns.append(
insn.Insn_GPR__GPR_IMM(RPPCAssembler.addi,
gv_result, [gv_x, gv_y]))
- return gv_result
- elif isinstance(gv_x, IntConst):
- return self.op_int_add(gv_y, gv_x)
+ elif gv_x.fits_in_immediate():
+ self.insns.append(
+ insn.Insn_GPR__GPR_IMM(RPPCAssembler.addi,
+ gv_result, [gv_y, gv_x]))
else:
- gv_result = Var()
self.insns.append(
insn.Insn_GPR__GPR_GPR(RPPCAssembler.add,
gv_result, [gv_x, gv_y]))
- return gv_result
+ return gv_result
def op_int_sub(self, gv_x, gv_y):
gv_result = Var()
@@ -397,10 +402,10 @@
'ne': ( 2, 1 ),
}
gv_result = Var()
- if isinstance(gv_y, IntConst) and abs(gv_y.value) < 2*16:
+ if gv_y.fits_in_immediate():
self.insns.append(
insn.CMPWI(cmp2info[op], gv_result, [gv_x, gv_y]))
- elif isinstance(gv_x, IntConst) and abs(gv_x.value) < 2*16:
+ elif gv_x.fits_in_immediate():
self.insns.append(
insn.CMPWI(cmp2info_flipped[op], gv_result, [gv_y, gv_x]))
else:
More information about the Pypy-commit
mailing list