Author: Armin Rigo <[email protected]>
Branch:
Changeset: r85760:ebbc735b234e
Date: 2016-07-18 16:27 +0200
http://bitbucket.org/pypy/pypy/changeset/ebbc735b234e/
Log: ppc support
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
@@ -1025,9 +1025,8 @@
_mixin_ = True
- def emit_call_malloc_gc(self, op, arglocs, regalloc):
- self._emit_call(op, arglocs)
- self.propagate_memoryerror_if_r3_is_null()
+ def emit_check_memory_error(self, op, arglocs, regalloc):
+ self.propagate_memoryerror_if_reg_is_null(arglocs[0])
def emit_call_malloc_nursery(self, op, arglocs, regalloc):
# registers r.RES and r.RSZ are allocated for this call
diff --git a/rpython/jit/backend/ppc/ppc_assembler.py
b/rpython/jit/backend/ppc/ppc_assembler.py
--- a/rpython/jit/backend/ppc/ppc_assembler.py
+++ b/rpython/jit/backend/ppc/ppc_assembler.py
@@ -412,7 +412,7 @@
# Check that we don't get NULL; if we do, we always interrupt the
# current loop, as a "good enough" approximation (same as
# emit_call_malloc_gc()).
- self.propagate_memoryerror_if_r3_is_null()
+ self.propagate_memoryerror_if_reg_is_null(r.r3)
mc.mtlr(r.RCS1.value) # restore LR
self._pop_core_regs_from_jitframe(mc, saved_regs)
@@ -594,9 +594,6 @@
self.wb_slowpath[withcards + 2 * withfloats] = rawstart
def _build_propagate_exception_path(self):
- if not self.cpu.propagate_exception_descr:
- return
-
self.mc = PPCBuilder()
#
# read and reset the current exception
@@ -1326,11 +1323,8 @@
pmc.b(offset) # jump always
pmc.overwrite()
- def propagate_memoryerror_if_r3_is_null(self):
- # if self.propagate_exception_path == 0 (tests), this may jump to 0
- # and segfaults. too bad. the alternative is to continue anyway
- # with r3==0, but that will segfault too.
- self.mc.cmp_op(0, r.r3.value, 0, imm=True)
+ def propagate_memoryerror_if_reg_is_null(self, reg_loc):
+ self.mc.cmp_op(0, reg_loc.value, 0, imm=True)
self.mc.b_cond_abs(self.propagate_exception_path, c.EQ)
def write_new_force_index(self):
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
@@ -533,8 +533,9 @@
res = self.rm.force_allocate_reg(op)
return [res]
- def prepare_call_malloc_gc(self, op):
- return self._prepare_call(op)
+ def prepare_check_memory_error(self, op):
+ loc = self.ensure_reg(op.getarg(0))
+ return [loc]
def _prepare_guard(self, op, args=None):
if args is None:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit