[pypy-commit] pypy default: apply changes to s390x backend
plan_rich
pypy.commits at gmail.com
Wed Jul 20 09:44:59 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch:
Changeset: r85781:65dc95275780
Date: 2016-07-20 13:54 +0200
http://bitbucket.org/pypy/pypy/changeset/65dc95275780/
Log: apply changes to s390x backend
diff --git a/rpython/jit/backend/zarch/assembler.py b/rpython/jit/backend/zarch/assembler.py
--- a/rpython/jit/backend/zarch/assembler.py
+++ b/rpython/jit/backend/zarch/assembler.py
@@ -356,9 +356,6 @@
self.mc = None
def _build_propagate_exception_path(self):
- if not self.cpu.propagate_exception_descr:
- return
-
self.mc = InstrBuilder()
#
# read and reset the current exception
@@ -487,7 +484,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_r2_is_null(True)
+ self.propagate_memoryerror_if_reg_is_null(r.r2, True)
self._pop_core_regs_from_jitframe(mc, saved_regs)
self._pop_fp_regs_from_jitframe(mc)
@@ -797,12 +794,12 @@
self.mc.BRC(condition, l.imm(off)) # branch over XGR
self.mc.XGR(result_loc, result_loc)
- def propagate_memoryerror_if_r2_is_null(self, pop_one_stackframe=False):
+ def propagate_memoryerror_if_reg_is_null(self, reg, pop_one_stackframe=False):
# if self.propagate_exception_path == 0 (tests), this may jump to 0
# and segfaults. too bad. the alternative is to continue anyway
- # with r2==0, but that will segfault too.
+ # with reg==0, but that will segfault too.
jmp_pos = self.mc.get_relative_pos()
- # bails to propagate exception path if r2 != 0
+ # bails to propagate exception path if reg != 0
self.mc.reserve_cond_jump()
self.mc.load_imm(r.RETURN, self.propagate_exception_path)
@@ -812,7 +809,7 @@
curpos = self.mc.currpos()
pmc = OverwritingBuilder(self.mc, jmp_pos, 1)
- pmc.CGIJ(r.r2, l.imm(0), c.NE, l.imm(curpos - jmp_pos))
+ pmc.CGIJ(reg, l.imm(0), c.NE, l.imm(curpos - jmp_pos))
pmc.overwrite()
def regalloc_push(self, loc, already_pushed):
diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py
--- a/rpython/jit/backend/zarch/opassembler.py
+++ b/rpython/jit/backend/zarch/opassembler.py
@@ -421,9 +421,8 @@
class AllocOpAssembler(object):
_mixin_ = True
- def emit_call_malloc_gc(self, op, arglocs, regalloc):
- self._emit_call(op, arglocs)
- self.propagate_memoryerror_if_r2_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/zarch/regalloc.py b/rpython/jit/backend/zarch/regalloc.py
--- a/rpython/jit/backend/zarch/regalloc.py
+++ b/rpython/jit/backend/zarch/regalloc.py
@@ -828,8 +828,9 @@
prepare_call_f = _prepare_call
prepare_call_n = _prepare_call
- def prepare_call_malloc_gc(self, op):
- return self._prepare_call_default(op)
+ def prepare_check_memory_error(self, op):
+ loc = self.ensure_reg(op.getarg(0))
+ return [loc]
def prepare_call_malloc_nursery(self, op):
self.rm.force_allocate_reg(op, selected_reg=r.RES)
More information about the pypy-commit
mailing list