[pypy-commit] pypy ppc-jit-backend: Implemented GUARD_CLASS and GUARD_NONNULL_CLASS.
hager
noreply at buildbot.pypy.org
Thu Aug 25 17:08:54 CEST 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r46769:ccdb31c97bee
Date: 2011-08-25 17:14 +0200
http://bitbucket.org/pypy/pypy/changeset/ccdb31c97bee/
Log: Implemented GUARD_CLASS and GUARD_NONNULL_CLASS.
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
@@ -1306,6 +1306,26 @@
self.rlwinm(free_reg, free_reg, 3, 31, 31)
self.cmpi(0, 1, free_reg, 0)
+ def emit_guard_class(self, op, cpu):
+ field_addr_reg = cpu.reg_map[op.getarg(0)]
+ class_addr = rffi.cast(lltype.Signed, op.getarg(1).value)
+ offset = cpu.vtable_offset
+ free_reg = cpu.get_next_register()
+ class_reg = cpu.next_free_register
+ self.load_word(free_reg, offset)
+ self.load_word(class_reg, class_addr)
+ self.lwz(free_reg, field_addr_reg, offset)
+ self.cmpw(0, free_reg, class_reg)
+ 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_class(self, op, cpu):
+ self.emit_guard_nonnull(op, cpu)
+ self._guard_epilog(op, cpu)
+ self.emit_guard_class(op, cpu)
+
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