Author: Richard Plangger <planri...@gmail.com> Branch: s390x-backend Changeset: r82031:5fe38e24272c Date: 2016-02-01 13:52 +0100 http://bitbucket.org/pypy/pypy/changeset/5fe38e24272c/
Log: shadowold was a pointer not the value (which it should have been) and the comparison compared the pointers not the values diff --git a/rpython/jit/backend/zarch/callbuilder.py b/rpython/jit/backend/zarch/callbuilder.py --- a/rpython/jit/backend/zarch/callbuilder.py +++ b/rpython/jit/backend/zarch/callbuilder.py @@ -203,7 +203,7 @@ if gcrootmap.is_shadow_stack: rst = gcrootmap.get_root_stack_top_addr() self.mc.load_imm(RSHADOWPTR, rst) - self.mc.LGR(RSHADOWOLD, RSHADOWPTR) + self.mc.load(RSHADOWOLD, RSHADOWPTR, 0) # # change 'rpy_fastgil' to 0 (it should be non-zero right now) self.mc.load_imm(RFASTGILPTR, fastgil) @@ -244,7 +244,8 @@ # thread. So here we check if the shadowstack pointer # is still the same as before we released the GIL (saved # in RSHADOWOLD), and if not, we fall back to 'reacqgil_addr'. - self.mc.CGR(RSHADOWPTR, RSHADOWOLD) + self.load(r.r11, RSHADOWPTR, 0) + self.mc.CGR(r.r11, RSHADOWOLD) bne_location = b1_location b1_location = self.mc.currpos() self.mc.reserve_cond_jump() @@ -291,6 +292,8 @@ self.mc.LMG(r.r8, r.r13, l.addr(pos, r.SP)) def write_real_errno(self, save_err): + # r11 is saved in call_releasegil_addr_and_move_real_arguments, + # thus can be used freely here! if save_err & rffi.RFFI_READSAVED_ERRNO: # Just before a call, read '*_errno' and write it into the # real 'errno'. @@ -314,14 +317,14 @@ def read_real_errno(self, save_err): if save_err & rffi.RFFI_SAVE_ERRNO: # Just after a call, read the real 'errno' and save a copy of - # it inside our thread-local '*_errno'. Registers r4-r10 + # it inside our thread-local '*_errno'. Registers r3-r6 # never contain anything after the call. if save_err & rffi.RFFI_ALT_ERRNO: rpy_errno = llerrno.get_alt_errno_offset(self.asm.cpu) else: rpy_errno = llerrno.get_rpy_errno_offset(self.asm.cpu) p_errno = llerrno.get_p_errno_offset(self.asm.cpu) - self.mc.LG(r.r12, l.addr(THREADLOCAL_ADDR_OFFSET, r.SP)) - self.mc.LG(r.r11, l.addr(p_errno, r.r12)) - self.mc.LGF(r.r11, l.addr(0, r.r11)) - self.mc.STY(r.r11, l.addr(rpy_errno, r.r12)) + self.mc.LG(r.r3, l.addr(THREADLOCAL_ADDR_OFFSET, r.SP)) + self.mc.LG(r.r4, l.addr(p_errno, r.r3)) + self.mc.LGF(r.r4, l.addr(0, r.r4)) + self.mc.STY(r.r4, l.addr(rpy_errno, r.r3)) 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 @@ -495,8 +495,7 @@ mc.NILL(r.SCRATCH, l.imm(mask & 0xFF)) jz_location = mc.get_relative_pos() - mc.trap() # patched later with 'EQ' - mc.write('\x00' * 4) + mc.reserve_cond_jump() # patched later with 'EQ' # for cond_call_gc_wb_array, also add another fast path: # if GCFLAG_CARDS_SET, then we can just set one bit and be done @@ -505,8 +504,7 @@ mc.LGR(r.SCRATCH, r.SCRATCH2) mc.NILL(r.SCRATCH, l.imm(card_marking_mask & 0xFF)) js_location = mc.get_relative_pos() - mc.trap() # patched later with 'NE' - mc.write('\x00' * 4) + mc.reserve_cond_jump() # patched later with 'NE' else: js_location = 0 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit