[pypy-commit] pypy ppc-jit-backend: Implemented GUARD_NONNULL, GUARD_ISNULL, GUARD_VALUE.
hager
noreply at buildbot.pypy.org
Wed Aug 24 18:00:44 CEST 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r46758:ed0b466d39d7
Date: 2011-08-24 18:05 +0200
http://bitbucket.org/pypy/pypy/changeset/ed0b466d39d7/
Log: Implemented GUARD_NONNULL, GUARD_ISNULL, GUARD_VALUE.
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
@@ -1261,6 +1261,32 @@
self.rlwinm(free_reg, free_reg, 2, 31, 31)
self.cmpi(0, 1, free_reg, 0)
+ def emit_guard_value(self, op, cpu):
+ free_reg = cpu.next_free_register
+ args = op.getarglist()
+ reg0 = cpu.reg_map[args[0]]
+ const = args[1]
+ self.load_word(free_reg, const.value)
+ self.cmpw(0, free_reg, reg0)
+ self.cror(3, 0, 1)
+ self.mfcr(free_reg)
+ self.rlwinm(free_reg, free_reg, 4, 31, 31)
+ self.cmpi(0, 1, free_reg, 1)
+
+ def emit_guard_nonnull(self, op, cpu):
+ arg0 = op.getarg(0)
+ regnum = cpu.reg_map[arg0]
+ self.cmpi(0, 1, regnum, 0)
+
+ def emit_guard_isnull(self, op, cpu):
+ free_reg = cpu.next_free_register
+ arg0 = op.getarg(0)
+ regnum = cpu.reg_map[arg0]
+ self.cmpi(0, 1, regnum, 0)
+ self.mfcr(free_reg)
+ self.rlwinm(free_reg, free_reg, 3, 31, 31)
+ self.cmpi(0, 1, free_reg, 0)
+
def emit_finish(self, op, cpu):
descr = op.getdescr()
identifier = self._get_identifier_from_descr(descr, cpu)
diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -720,7 +720,6 @@
assert self.execute_operation(opname, args, 'void') == None
assert not self.guard_failed
-
def test_passing_guard_class(self):
t_box, T_box = self.alloc_instance(self.T)
#null_box = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.nullptr(T)))
@@ -739,7 +738,8 @@
if not self.avoid_instances:
all.extend([
(rop.GUARD_NONNULL, [nullbox]),
- (rop.GUARD_ISNULL, [t_box])])
+ (rop.GUARD_ISNULL, [t_box])
+ ])
if self.cpu.supports_floats:
all.append((rop.GUARD_VALUE, [boxfloat(-1.0), constfloat(1.0)]))
for opname, args in all:
More information about the pypy-commit
mailing list