[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