[pypy-commit] pypy ppc-jit-backend: Factored out common code in GUARD_x operations.

hager noreply at buildbot.pypy.org
Thu Aug 18 13:55:52 CEST 2011


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r46600:bd69385388f1
Date: 2011-08-18 13:59 +0200
http://bitbucket.org/pypy/pypy/changeset/bd69385388f1/

Log:	Factored out common code in GUARD_x operations.

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
@@ -922,6 +922,7 @@
         op_method = self.oplist[opnum]
         if trace_op.is_guard():
             op_method(self, trace_op, cpu)
+            self._guard_epilog(trace_op, cpu)
         else:
             if opname.startswith("int_") or opname.startswith("uint_"):
                 numargs = trace_op.numargs()
@@ -969,6 +970,22 @@
         cpu.reg_map[result] = result_reg
         cpu.next_free_register += 1
 
+    def _guard_epilog(self, op, cpu):
+        fail_descr = op.getdescr()
+        fail_index = self._get_identifier_from_descr(fail_descr, cpu)
+        fail_descr.index = fail_index
+        cpu.saved_descr[fail_index] = fail_descr
+        numops = self.get_number_of_ops()
+        self.beq(0)
+        failargs = op.getfailargs()
+        reglist = []
+        for failarg in failargs:
+            if failarg is None:
+                reglist.append(None)
+            else:
+                reglist.append(cpu.reg_map[failarg])
+        cpu.patch_list.append((numops, fail_index, op, reglist))
+
     # Fetches the identifier from a descr object.
     # If it has no identifier, then an unused identifier
     # is generated
@@ -1117,79 +1134,23 @@
         arg0 = op.getarg(0)
         regnum = cpu.reg_map[arg0]
         self.cmpi(0, 1, regnum, 0)
-        fail_descr = op.getdescr()
-        fail_index = self._get_identifier_from_descr(fail_descr, cpu)
-        fail_descr.index = fail_index
-        cpu.saved_descr[fail_index] = fail_descr
-        numops = self.get_number_of_ops()
-        self.beq(0)
-        failargs = op.getfailargs()
-        reglist = []
-        for failarg in failargs:
-            if failarg is None:
-                reglist.append(None)
-            else:
-                reglist.append(cpu.reg_map[failarg])
-        cpu.patch_list.append((numops, fail_index, op, reglist))
 
     def emit_guard_false(self, op, cpu):
         arg0 = op.getarg(0)
         regnum = cpu.reg_map[arg0]
         self.cmpi(0, 1, regnum, 1)
-        fail_descr = op.getdescr()
-        fail_index = self._get_identifier_from_descr(fail_descr, cpu)
-        fail_descr.index = fail_index
-        cpu.saved_descr[fail_index] = fail_descr
-        numops = self.get_number_of_ops()
-        self.beq(0)
-        failargs = op.getfailargs()
-        reglist = []
-        for failarg in failargs:
-            if failarg is None:
-                reglist.append(None)
-            else:
-                reglist.append(cpu.reg_map[failarg])
-        cpu.patch_list.append((numops, fail_index, op, reglist))
 
     def emit_guard_no_overflow(self, op, cpu):
         free_reg = cpu.next_free_register
         self.mfxer(free_reg)
         self.rlwinm(free_reg, free_reg, 2, 31, 31)
         self.cmpi(0, 1, free_reg, 1)
-        fail_descr = op.getdescr()
-        fail_index = fail_descr.identifier
-        fail_descr.index = fail_index
-        cpu.saved_descr[fail_index] = fail_descr
-        numops = self.get_number_of_ops()
-        self.beq(0)
-        failargs = op.getfailargs()
-        reglist = []
-        for failarg in failargs:
-            if failarg is None:
-                reglist.append(None)
-            else:
-                reglist.append(cpu.reg_map[failarg])
-        cpu.patch_list.append((numops, fail_index, op, reglist))
 
     def emit_guard_overflow(self, op, cpu):
         free_reg = cpu.next_free_register
         self.mfxer(free_reg)
         self.rlwinm(free_reg, free_reg, 2, 31, 31)
         self.cmpi(0, 1, free_reg, 0)
-        fail_descr = op.getdescr()
-        fail_index = fail_descr.identifier
-        fail_descr.index = fail_index
-        cpu.saved_descr[fail_index] = fail_descr
-        numops = self.get_number_of_ops()
-        self.beq(0)
-        failargs = op.getfailargs()
-        reglist = []
-        for failarg in failargs:
-            if failarg is None:
-                reglist.append(None)
-            else:
-                reglist.append(cpu.reg_map[failarg])
-        cpu.patch_list.append((numops, fail_index, op, reglist))
 
     def emit_finish(self, op, cpu):
         descr = op.getdescr()


More information about the pypy-commit mailing list