[pypy-commit] pypy default: (fijal, bivab) only store the gcmap in finish if we are returning a REF
bivab
noreply at buildbot.pypy.org
Wed Apr 10 22:48:13 CEST 2013
Author: David Schneider <david.schneider at picle.org>
Branch:
Changeset: r63212:f41dea88cd33
Date: 2013-04-10 22:47 +0200
http://bitbucket.org/pypy/pypy/changeset/f41dea88cd33/
Log: (fijal, bivab) only store the gcmap in finish if we are returning a
REF
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
@@ -26,7 +26,7 @@
from rpython.jit.backend.llsupport.descr import InteriorFieldDescr
from rpython.jit.backend.llsupport.assembler import GuardToken, BaseAssembler
from rpython.jit.metainterp.history import (Box, AbstractFailDescr,
- INT, FLOAT)
+ INT, FLOAT, REF)
from rpython.jit.metainterp.history import TargetToken
from rpython.jit.metainterp.resoperation import rop
from rpython.rlib.objectmodel import we_are_translated
@@ -325,8 +325,15 @@
self.mc.gen_load_int(r.ip.value, fail_descr_loc.value)
# XXX self.mov(fail_descr_loc, RawStackLoc(ofs))
self.store_reg(self.mc, r.ip, r.fp, ofs, helper=r.lr)
- gcmap = self.gcmap_for_finish
- self.push_gcmap(self.mc, gcmap, store=True)
+ if op.numargs() > 0 and op.getarg(0).type == REF:
+ gcmap = self.gcmap_for_finish
+ self.push_gcmap(self.mc, gcmap, store=True)
+ else:
+ # note that the 0 here is redundant, but I would rather
+ # keep that one and kill all the others
+ ofs = self.cpu.get_ofs_of_frame_field('jf_gcmap')
+ self.mc.gen_load_int(r.ip.value, 0)
+ self.store_reg(self.mc, r.ip, r.fp, ofs)
self.mc.MOV_rr(r.r0.value, r.fp.value)
# exit function
self.gen_func_epilog()
More information about the pypy-commit
mailing list