Author: Richard Plangger <[email protected]>
Branch:
Changeset: r83610:b55e5e29e2f0
Date: 2016-04-12 11:47 +0200
http://bitbucket.org/pypy/pypy/changeset/b55e5e29e2f0/
Log: wrong parameter to LG command and wrong jump target to bridge
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
@@ -144,7 +144,7 @@
def load_gcref_into(self, register, index):
topoff = index * WORD
size = self.pool.gcref_table_size
- self.mc.LG(r.SCRATCH, l.addr(-size + topoff, r.POOL))
+ self.mc.LG(register, l.addr(-size + topoff, r.POOL))
def _build_wb_slowpath(self, withcards, withfloats=False, for_frame=False):
descr = self.cpu.gc_ll_descr.write_barrier_descr
@@ -706,11 +706,11 @@
operations = regalloc.prepare_bridge(inputargs, arglocs,
operations, allgcrefs,
self.current_clt.frame_info)
- self.pool.pre_assemble(self, operations, all_gcrefs, bridge=True)
- startpos = self.mc.get_relative_pos()
- self.mc.LARL(r.POOL, l.halfword(self.pool.pool_start - startpos))
+ startpos = len(allgcrefs) * WORD
+ self.pool.pre_assemble(self, operations, allgcrefs, bridge=True)
self._check_frame_depth(self.mc, regalloc.get_gcmap())
bridgestartpos = self.mc.get_relative_pos()
+ self.mc.LARL(r.POOL, l.halfword(self.pool.pool_start - bridgestartpos))
frame_depth_no_fixed_size = self._assemble(regalloc, inputargs,
operations)
codeendpos = self.mc.get_relative_pos()
#self.pool.post_assemble(self)
@@ -732,7 +732,7 @@
debug_stop("jit-backend-addr")
self.patch_pending_failure_recoveries(rawstart)
# patch the jump from original guard
- self.patch_jump_for_descr(faildescr, rawstart + startpos)
+ self.patch_jump_for_descr(faildescr, rawstart + bridgestartpos)
ops_offset = self.mc.ops_offset
frame_depth = max(self.current_clt.frame_info.jfi_frame_depth,
frame_depth_no_fixed_size + JITFRAME_FIXED_SIZE)
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
@@ -642,7 +642,7 @@
def emit_load_from_gc_table(self, op, arglocs, regalloc):
resloc, = arglocs
index = op.getarg(0).getint()
- assert isinstance(resloc, RegLoc)
+ assert resloc.is_reg()
self.load_gcref_into(resloc, index)
def emit_guard_true(self, op, arglocs, regalloc):
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
@@ -1216,7 +1216,7 @@
return []
def prepare_load_from_gc_table(self, op):
- resloc = self.rm.ensure_reg(op)
+ resloc = self.rm.force_allocate_reg(op)
return [resloc]
def prepare_finish(self, op):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit