Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r63369:b0630c2d6da5 Date: 2013-04-15 16:38 +0200 http://bitbucket.org/pypy/pypy/changeset/b0630c2d6da5/
Log: merge diff --git a/rpython/jit/backend/arm/assembler.py b/rpython/jit/backend/arm/assembler.py --- a/rpython/jit/backend/arm/assembler.py +++ b/rpython/jit/backend/arm/assembler.py @@ -770,7 +770,7 @@ def _load_shadowstack_top(self, mc, reg, gcrootmap): rst = gcrootmap.get_root_stack_top_addr() mc.gen_load_int(reg.value, rst) - self.load_reg(mc, reg.value, reg.value) + self.load_reg(mc, reg, reg) return rst def fixup_target_tokens(self, rawstart): diff --git a/rpython/jit/backend/arm/opassembler.py b/rpython/jit/backend/arm/opassembler.py --- a/rpython/jit/backend/arm/opassembler.py +++ b/rpython/jit/backend/arm/opassembler.py @@ -352,7 +352,8 @@ def _emit_call(self, adr, arglocs, fcond=c.AL, resloc=None, result_info=(-1, -1), - can_collect=1): + can_collect=1, + reload_frame=False): if self.cpu.hf_abi: stack_args, adr = self._setup_call_hf(adr, arglocs, fcond, resloc, result_info) @@ -365,7 +366,6 @@ gcmap = self._regalloc.get_gcmap([r.r0], noregs=noregs) self.push_gcmap(self.mc, gcmap, store=True) #the actual call - #self.mc.BKPT() if adr.is_imm(): self.mc.BL(adr.value) elif adr.is_stack(): @@ -388,6 +388,8 @@ if can_collect: self._reload_frame_if_necessary(self.mc, can_collect=can_collect) self.pop_gcmap(self.mc) + elif reload_frame: + self._reload_frame_if_necessary(self.mc) return fcond def _restore_sp(self, stack_args, fcond): @@ -1266,6 +1268,10 @@ resloc = arglocs[0] if gcrootmap: + noregs = self.cpu.gc_ll_descr.is_shadow_stack() + assert noregs + gcmap = self._regalloc.get_gcmap([r.r0], noregs=noregs) + self.push_gcmap(self.mc, gcmap, store=True) self.call_release_gil(gcrootmap, arglocs, regalloc, fcond) # do the call self._store_force_index(guard_op) @@ -1275,7 +1281,8 @@ signed = descr.is_result_signed() # self._emit_call(adr, callargs, fcond, - resloc, (size, signed)) + resloc, (size, signed), + can_collect=0) # then reopen the stack if gcrootmap: self.call_reacquire_gil(gcrootmap, resloc, regalloc, fcond) @@ -1288,7 +1295,8 @@ # NOTE: We assume that the floating point registers won't be modified. assert gcrootmap.is_shadow_stack with saved_registers(self.mc, regalloc.rm.save_around_call_regs): - self._emit_call(imm(self.releasegil_addr), [], fcond) + self._emit_call(imm(self.releasegil_addr), [], + fcond, can_collect=False) def call_reacquire_gil(self, gcrootmap, save_loc, regalloc, fcond): # save the previous result into the stack temporarily, in case it is in @@ -1305,7 +1313,8 @@ assert gcrootmap.is_shadow_stack # call the reopenstack() function (also reacquiring the GIL) with saved_registers(self.mc, regs_to_save, vfp_regs_to_save): - self._emit_call(imm(self.reacqgil_addr), [], fcond) + self._emit_call(imm(self.reacqgil_addr), [], fcond, + can_collect=False, reload_frame=True) def _store_force_index(self, guard_op): faildescr = guard_op.getdescr() diff --git a/rpython/translator/c/src/support.h b/rpython/translator/c/src/support.h --- a/rpython/translator/c/src/support.h +++ b/rpython/translator/c/src/support.h @@ -2,6 +2,16 @@ /************************************************************/ /*** C header subsection: support functions ***/ +/* a temporary(?) workaround for GCC 4.8. See: + http://stackoverflow.com/questions/16016627/ +*/ +#ifdef __GNUC__ +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) +# pragma GCC optimize("no-aggressive-loop-optimizations") +# endif +#endif + + #define RUNNING_ON_LLINTERP 0 #define OP_JIT_RECORD_KNOWN_CLASS(i, c, r) /* nothing */ _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit