[pypy-svn] r34594 - pypy/dist/pypy/jit/codegen/ppc
mwh at codespeak.net
mwh at codespeak.net
Tue Nov 14 13:46:33 CET 2006
Author: mwh
Date: Tue Nov 14 13:46:30 2006
New Revision: 34594
Modified:
pypy/dist/pypy/jit/codegen/ppc/rgenop.py
Log:
baby steps towards genop_call for ppc
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 14 13:46:30 2006
@@ -187,8 +187,10 @@
# ----------------------------------------------------------------
# the public Builder interface:
-## @specialize.arg(1)
-## def genop1(self, opname, gv_arg):
+ @specialize.arg(1)
+ def genop1(self, opname, gv_arg):
+ genmethod = getattr(self, 'op_' + opname)
+ return genmethod(gv_arg)
@specialize.arg(1)
def genop2(self, opname, gv_arg1, gv_arg2):
@@ -196,7 +198,7 @@
return genmethod(gv_arg1, gv_arg2)
def genop_call(self, sigtoken, gv_fnptr, args_gv):
- pass
+ return Var()
## def genop_getfield(self, fieldtoken, gv_ptr):
## def genop_setfield(self, fieldtoken, gv_ptr, gv_value):
@@ -454,35 +456,36 @@
gv_result, [gv_x, gv_y]))
return gv_result
+ cmp2info = {
+ # bit-in-crf negated
+ 'gt': ( 1, 0 ),
+ 'lt': ( 0, 0 ),
+ 'le': ( 1, 1 ),
+ 'ge': ( 0, 1 ),
+ 'eq': ( 2, 0 ),
+ 'ne': ( 2, 1 ),
+ }
+ cmp2info_flipped = {
+ # bit-in-crf negated
+ 'gt': ( 1, 1 ),
+ 'lt': ( 0, 1 ),
+ 'le': ( 1, 0 ),
+ 'ge': ( 0, 0 ),
+ 'eq': ( 2, 0 ),
+ 'ne': ( 2, 1 ),
+ }
+
def _compare(self, op, gv_x, gv_y):
- cmp2info = {
- # bit-in-crf negated
- 'gt': ( 1, 0 ),
- 'lt': ( 0, 0 ),
- 'le': ( 1, 1 ),
- 'ge': ( 0, 1 ),
- 'eq': ( 2, 0 ),
- 'ne': ( 2, 1 ),
- }
- cmp2info_flipped = {
- # bit-in-crf negated
- 'gt': ( 1, 1 ),
- 'lt': ( 0, 1 ),
- 'le': ( 1, 0 ),
- 'ge': ( 0, 0 ),
- 'eq': ( 2, 0 ),
- 'ne': ( 2, 1 ),
- }
gv_result = Var()
if gv_y.fits_in_immediate():
self.insns.append(
- insn.CMPWI(cmp2info[op], gv_result, [gv_x, gv_y]))
+ insn.CMPWI(self.cmp2info[op], gv_result, [gv_x, gv_y]))
elif gv_x.fits_in_immediate():
self.insns.append(
- insn.CMPWI(cmp2info_flipped[op], gv_result, [gv_y, gv_x]))
+ insn.CMPWI(self.cmp2info_flipped[op], gv_result, [gv_y, gv_x]))
else:
self.insns.append(
- insn.CMPW(cmp2info[op], gv_result, [gv_x, gv_y]))
+ insn.CMPW(self.cmp2info[op], gv_result, [gv_x, gv_y]))
return gv_result
def op_int_gt(self, gv_x, gv_y):
@@ -517,6 +520,12 @@
return targetbuilder
+ def op_int_is_true(self, gv_arg):
+ gv_result = Var()
+ self.insns.append(
+ insn.CMPWI(self.cmp2info['eq'], gv_result, [gv_arg, self.rgenop.genconst(0)]))
+ return gv_result
+
class RPPCGenOp(AbstractRGenOp):
More information about the Pypy-commit
mailing list