[pypy-commit] pypy ppc-jit-backend: Implemented PTR_EQ and PTR_NE.
hager
noreply at buildbot.pypy.org
Fri Aug 26 11:40:37 CEST 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r46783:9dca1d863ba1
Date: 2011-08-26 11:44 +0200
http://bitbucket.org/pypy/pypy/changeset/9dca1d863ba1/
Log: Implemented PTR_EQ and PTR_NE.
diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
@@ -947,7 +947,8 @@
op_method(self, trace_op, cpu)
self._guard_epilog(trace_op, cpu)
else:
- if opname.startswith("int_") or opname.startswith("uint_"):
+ if opname.startswith("int_") or opname.startswith("uint_")\
+ or opname.startswith("ptr_"):
numargs = trace_op.numargs()
if numargs == 1:
free_reg, reg0 = self._unary_int_op_prolog(trace_op, cpu)
@@ -1255,6 +1256,10 @@
self.cntlzd(free_reg, reg0)
self.srdi(free_reg, free_reg, 6)
+ #******************************
+ # GUARD OPERATIONS *
+ #******************************
+
def emit_guard_true(self, op, cpu):
arg0 = op.getarg(0)
regnum = cpu.reg_map[arg0]
@@ -1326,6 +1331,29 @@
self._guard_epilog(op, cpu)
self.emit_guard_class(op, cpu)
+ #*************************************
+ # POINTER OPERATIONS *
+ #*************************************
+
+ def emit_ptr_eq(self, op, cpu, reg0, reg1, free_reg):
+ if IS_PPC_32:
+ self.cmpw(0, reg0, reg1)
+ else:
+ self.cmpd(0, reg0, reg1)
+ self.cror(3, 0, 1)
+ self.crnot(3, 3)
+ self.mfcr(free_reg)
+ self.rlwinm(free_reg, free_reg, 4, 31, 31)
+
+ def emit_ptr_ne(self, op, cpu, reg0, reg1, free_reg):
+ if IS_PPC_32:
+ self.cmpw(0, reg0, reg1)
+ else:
+ self.cmpd(0, reg0, reg1)
+ self.cror(3, 0, 1)
+ self.mfcr(free_reg)
+ self.rlwinm(free_reg, free_reg, 4, 31, 31)
+
def emit_finish(self, op, cpu):
descr = op.getdescr()
identifier = self._get_identifier_from_descr(descr, cpu)
More information about the pypy-commit
mailing list