[pypy-svn] r34611 - pypy/dist/pypy/jit/codegen/ppc
mwh at codespeak.net
mwh at codespeak.net
Tue Nov 14 20:22:41 CET 2006
Author: mwh
Date: Tue Nov 14 20:22:38 2006
New Revision: 34611
Modified:
pypy/dist/pypy/jit/codegen/ppc/emit_moves.py
pypy/dist/pypy/jit/codegen/ppc/instruction.py
pypy/dist/pypy/jit/codegen/ppc/rgenop.py
Log:
a couple more operations to get some test_genc_ts tests running, and a fix to
handle Constant arguments to finish_and_goto.
Modified: pypy/dist/pypy/jit/codegen/ppc/emit_moves.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/emit_moves.py (original)
+++ pypy/dist/pypy/jit/codegen/ppc/emit_moves.py Tue Nov 14 20:22:38 2006
@@ -61,10 +61,15 @@
if tarvar in data.emitted: return
+ #print "tarvar in data.tar2loc", tarvar in data.tar2loc
tarloc = data.tar2loc[tarvar]
+ #print "tarvar in data.tar2src", tarvar in data.tar2src
srcvar = data.tar2src[tarvar]
+ #print "srcvar in data.src2loc", srcvar, srcvar in data.src2loc
srcloc = data.src2loc[srcvar]
+
+
# if location we are about to write to is not going to be read
# by anyone, we are safe
if tarloc not in data.loc2src:
@@ -73,12 +78,15 @@
return
# Find source node that conflicts with us
+ #print "tarloc in data.loc2src", tarloc in data.loc2src
conflictsrcvar = data.loc2src[tarloc]
if conflictsrcvar not in data.srcstack:
# No cycle on our stack yet
data.srcstack.append(srcvar)
+ #print "conflictsrcvar in data.src2tar", conflictsrcvar in data.src2tar
_cycle_walk(gen, data.src2tar[conflictsrcvar], data)
+ #print "srcvar in data.src2loc", srcvar in data.src2loc
srcloc = data.src2loc[srcvar] # warning: may have changed, so reload
gen.emit_move(tarloc, srcloc)
data.emitted.append(tarvar)
@@ -87,6 +95,7 @@
# Cycle detected, break it by moving the other node's source data
# somewhere else so we can overwrite it
freshloc = gen.create_fresh_location()
+ #print "conflictsrcvar in data.src2loc", conflictsrcvar in data.src2loc
conflictsrcloc = data.src2loc[conflictsrcvar]
gen.emit_move(freshloc, conflictsrcloc)
data.src2loc[conflictsrcvar] = freshloc
Modified: pypy/dist/pypy/jit/codegen/ppc/instruction.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/instruction.py (original)
+++ pypy/dist/pypy/jit/codegen/ppc/instruction.py Tue Nov 14 20:22:38 2006
@@ -123,6 +123,23 @@
self.arg_reg.number,
self.imm.value)
+class Insn_GPR__GPR(Insn):
+ def __init__(self, methptr, result, arg):
+ Insn.__init__(self)
+ self.methptr = methptr
+
+ self.result = result
+ self.result_regclass = GP_REGISTER
+ self.reg_args = [arg]
+ self.reg_arg_regclasses = [GP_REGISTER]
+ def allocate(self, allocator):
+ self.result_reg = allocator.loc_of(self.result)
+ self.arg_reg = allocator.loc_of(self.reg_args[0])
+ def emit(self, asm):
+ self.methptr(asm,
+ self.result_reg.number,
+ self.arg_reg.number)
+
class Insn_GPR__IMM(Insn):
def __init__(self, methptr, result, args):
Insn.__init__(self)
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 20:22:38 2006
@@ -128,8 +128,12 @@
targetlocs = target.arg_locations
for i in range(len(targetlocs)):
tloc = targetlocs[i]
- tar2loc[tloc] = tloc
- tar2src[tloc] = sourcevars[i]
+ src = sourcevars[i]
+ if isinstance(src, Var):
+ tar2loc[tloc] = tloc
+ tar2src[tloc] = src
+ else:
+ src.load_now(asm, tloc)
gen = JumpPatchupGenerator(asm, min_offset)
emit_moves(gen, tar2src, tar2loc, src2loc)
@@ -215,7 +219,14 @@
## def genop_setarrayitem(self, arraytoken, gv_ptr, gv_index, gv_value):
## def genop_malloc_fixedsize(self, alloctoken):
## def genop_malloc_varsize(self, varsizealloctoken, gv_size):
-## def genop_same_as(self, kindtoken, gv_x):
+
+ def genop_same_as(self, kindtoken, gv_arg):
+ if not isinstance(gv_arg, Var):
+ gv_result = Var()
+ gv_arg.load(self.insns, gv_result)
+ else:
+ return gv_arg
+
## def genop_debug_pdb(self): # may take an args_gv later
def enter_next_block(self, kinds, args_gv):
@@ -537,7 +548,13 @@
self.insns.append(
insn.CMPWI(self.cmp2info['ne'], gv_result, [gv_arg, self.rgenop.genconst(0)]))
return gv_result
-
+
+ def op_int_neg(self, gv_arg):
+ gv_result = Var()
+ self.insns.append(
+ insn.Insn_GPR__GPR(RPPCAssembler.neg, gv_result, gv_arg))
+ return gv_result
+
class RPPCGenOp(AbstractRGenOp):
More information about the Pypy-commit
mailing list