Author: Richard Plangger <planri...@gmail.com>
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
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to