[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