Author: Armin Rigo <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit