Author: Maciej Fijalkowski <[email protected]>
Branch: slim-down-resumedescr
Changeset: r75101:8a5a8258f0a8
Date: 2014-12-24 12:55 +0200
http://bitbucket.org/pypy/pypy/changeset/8a5a8258f0a8/
Log: Make adr_jump_offset official and put it in attrs, I did not realize
the extent to which backends store garbage on the descrs, next step
is to fight it
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
@@ -901,7 +901,7 @@
descr = tok.faildescr
assert isinstance(descr, AbstractFailDescr)
failure_recovery_pos = block_start + tok.pos_recovery_stub
- descr._arm_failure_recovery_block = failure_recovery_pos
+ descr.adr_jump_offset = failure_recovery_pos
relative_offset = tok.pos_recovery_stub - tok.offset
guard_pos = block_start + tok.offset
if not tok.is_guard_not_invalidated:
@@ -968,11 +968,11 @@
def patch_trace(self, faildescr, looptoken, bridge_addr, regalloc):
b = InstrBuilder(self.cpu.cpuinfo.arch_version)
- patch_addr = faildescr._arm_failure_recovery_block
+ patch_addr = faildescr.adr_jump_offset
assert patch_addr != 0
b.B(bridge_addr)
b.copy_to_raw_memory(patch_addr)
- faildescr._arm_failure_recovery_block = 0
+ faildescr.adr_jump_offset = 0
# regalloc support
def load(self, loc, value):
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -572,13 +572,13 @@
def patch_pending_failure_recoveries(self, rawstart):
# after we wrote the assembler to raw memory, set up
- # tok.faildescr._x86_adr_jump_offset to contain the raw address of
+ # tok.faildescr.adr_jump_offset to contain the raw address of
# the 4-byte target field in the JMP/Jcond instruction, and patch
# the field in question to point (initially) to the recovery stub
clt = self.current_clt
for tok in self.pending_guard_tokens:
addr = rawstart + tok.pos_jump_offset
- tok.faildescr._x86_adr_jump_offset = addr
+ tok.faildescr.adr_jump_offset = addr
relative_target = tok.pos_recovery_stub - (tok.pos_jump_offset + 4)
assert rx86.fits_in_32bits(relative_target)
#
@@ -685,7 +685,7 @@
self.cpu.gc_ll_descr.gcrootmap)
def patch_jump_for_descr(self, faildescr, adr_new_target):
- adr_jump_offset = faildescr._x86_adr_jump_offset
+ adr_jump_offset = faildescr.adr_jump_offset
assert adr_jump_offset != 0
offset = adr_new_target - (adr_jump_offset + 4)
# If the new target fits within a rel32 of the jump, just patch
@@ -705,7 +705,7 @@
p = rffi.cast(rffi.INTP, adr_jump_offset)
adr_target = adr_jump_offset + 4 + rffi.cast(lltype.Signed, p[0])
mc.copy_to_raw_memory(adr_target)
- faildescr._x86_adr_jump_offset = 0 # means "patched"
+ faildescr.adr_jump_offset = 0 # means "patched"
def fixup_target_tokens(self, rawstart):
for targettoken in self.target_tokens_currently_compiling:
diff --git a/rpython/jit/metainterp/history.py
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -151,7 +151,7 @@
index = -1
final_descr = False
- _attrs_ = ()
+ _attrs_ = ('adr_jump_offset',)
def handle_fail(self, deadframe, metainterp_sd, jitdriver_sd):
raise NotImplementedError
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit