Author: Armin Rigo <ar...@tunes.org>
Branch: ppc-updated-backend
Changeset: r80261:4f967ab0ad89
Date: 2015-10-16 11:20 +0200
http://bitbucket.org/pypy/pypy/changeset/4f967ab0ad89/

Log:    save_exc_class, save_exception, restore_exception

diff --git a/rpython/jit/backend/ppc/opassembler.py 
b/rpython/jit/backend/ppc/opassembler.py
--- a/rpython/jit/backend/ppc/opassembler.py
+++ b/rpython/jit/backend/ppc/opassembler.py
@@ -554,6 +554,18 @@
             pmc.bc(BO, BI, relative_target)
             pmc.overwrite()
 
+    def emit_save_exc_class(self, op, arglocs, regalloc):
+        [resloc] = arglocs
+        diff = self.mc.load_imm_plus(r.r2, self.cpu.pos_exception())
+        self.mc.load(resloc.value, r.r2.value, diff)
+
+    def emit_save_exception(self, op, arglocs, regalloc):
+        [resloc] = arglocs
+        self._store_and_reset_exception(self.mc, resloc)
+
+    def emit_restore_exception(self, op, arglocs, regalloc):
+        self._restore_exception(self.mc, arglocs[1], arglocs[0])
+
     def emit_guard_exception(self, op, arglocs, regalloc):
         loc, resloc = arglocs[:2]
         failargs = arglocs[2:]
diff --git a/rpython/jit/backend/ppc/regalloc.py 
b/rpython/jit/backend/ppc/regalloc.py
--- a/rpython/jit/backend/ppc/regalloc.py
+++ b/rpython/jit/backend/ppc/regalloc.py
@@ -586,6 +586,16 @@
         arglocs = self._prepare_guard(op, [loc, resloc])
         return arglocs
 
+    def prepare_save_exception(self, op):
+        res = self.rm.force_allocate_reg(op)
+        return [res]
+    prepare_save_exc_class = prepare_save_exception
+
+    def prepare_restore_exception(self, op):
+        loc0 = self.ensure_reg(op.getarg(0))
+        loc1 = self.ensure_reg(op.getarg(1))
+        return [loc0, loc1]
+
     def prepare_guard_no_exception(self, op):
         arglocs = self._prepare_guard(op)
         return arglocs
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to