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