Author: Armin Rigo <[email protected]>
Branch: stmgc-c7
Changeset: r70203:9b37af797a13
Date: 2014-03-23 16:17 +0100
http://bitbucket.org/pypy/pypy/changeset/9b37af797a13/
Log: More fixes
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
@@ -157,7 +157,7 @@
gcrootmap = self.cpu.gc_ll_descr.gcrootmap
if gcrootmap and gcrootmap.is_shadow_stack:
self._load_shadowstack_top_in_ebx(mc, gcrootmap)
- mc.MOV_mr((ebx.value, -WORD), eax.value)
+ mc.MOV_mr((self.SEGMENT_NO, ebx.value, -WORD), eax.value)
mc.MOV_bi((self.SEGMENT_FRAME, gcmap_ofs), 0)
self._pop_all_regs_from_frame(mc, [], self.cpu.supports_floats)
@@ -474,7 +474,8 @@
mc.MOV_rs(eax.value, 3*WORD)
else:
mc.MOV_rs(eax.value, WORD)
- mc.TEST8(addr_add_const(eax, descr.jit_wb_if_flag_byteofs),
+ mc.TEST8(addr_add_const(self.SEGMENT_GC, eax,
+ descr.jit_wb_if_flag_byteofs),
imm(-0x80))
#
@@ -891,7 +892,7 @@
rst = self.heap_tl(gcrootmap.get_root_stack_top_addr())
self.mc.MOV(ebx, rst)
self.mc.SUB_ri(ebx.value, -WORD)
- self.mc.MOV_rm(eax.value, (ebx.value, 0))
+ self.mc.MOV_rm(eax.value, (self.SEGMENT_NO, ebx.value, 0))
self.mc.MOV(rst, ebx)
else:
# the return value is the jitframe
@@ -919,7 +920,8 @@
# (ebp is a writeable object and does not need a write-barrier
# again (ensured by the code calling the loop))
self._load_shadowstack_top_in_ebx(self.mc, gcrootmap)
- self.mc.MOV_mr((ebx.value, 0), ebp.value) # MOV [ebx], ebp
+ self.mc.MOV_mr((self.SEGMENT_NO, ebx.value, 0), ebp.value)
+ # MOV [ebx], ebp
self.mc.ADD_ri(ebx.value, WORD)
self.mc.MOV(self.heap_tl(gcrootmap.get_root_stack_top_addr()), ebx)
# MOV [rootstacktop], ebx
@@ -1057,7 +1059,8 @@
resloc, frame_depth)
def load_effective_addr(self, sizereg, baseofs, scale, result, frm=imm0):
- self.mc.LEA(result, addr_add(frm, sizereg, baseofs, scale))
+ self.mc.LEA(result, addr_add(self.SEGMENT_NO, frm, sizereg,
+ baseofs, scale))
def _unaryop(asmop):
def genop_unary(self, op, arglocs, resloc):
@@ -1084,7 +1087,8 @@
delta = argloc.value
if not is_add: # subtraction
delta = -delta
- self.mc.LEA_rm(result_loc.value, (loc.value, delta))
+ self.mc.LEA_rm(result_loc.value,
+ (self.SEGMENT_NO, loc.value, delta))
return genop_binary_or_lea
def _cmpop(cond, rev_cond):
@@ -1773,6 +1777,7 @@
mc.MOV(self.heap_tl(self.cpu.pos_exc_value()), imm0)
def _restore_exception(self, mc, excvalloc, exctploc, tmploc=None):
+ # for _build_wb_slowpath(): don't touch the cpu flags!
if excvalloc is not None:
mc.MOV(heap(self.cpu.pos_exc_value()), excvalloc)
else:
@@ -2169,13 +2174,14 @@
kind = op.result.type
descr = self.cpu.getarraydescr_for_frame(kind)
ofs = self.cpu.unpack_arraydescr(descr)
+ eax_plus_ofs = (self.SEGMENT_FRAME, eax.value, ofs)
if kind == FLOAT:
- self.mc.MOVSD_xm(xmm0.value, (eax.value, ofs))
+ self.mc.MOVSD_xm(xmm0.value, eax_plus_ofs)
if result_loc is not xmm0:
self.mc.MOVSD(result_loc, xmm0)
else:
assert result_loc is eax
- self.mc.MOV_rm(eax.value, (eax.value, ofs))
+ self.mc.MOV_rm(eax.value, eax_plus_ofs)
def _call_assembler_patch_jmp(self, jmp_location):
offset = self.mc.get_relative_pos() - jmp_location
@@ -2383,7 +2389,7 @@
def malloc_cond(self, nursery_free_adr, nursery_top_adr, size, gcmap):
assert size & (WORD-1) == 0 # must be correctly aligned
self.mc.MOV(eax, heap(self.SEGMENT_GC, nursery_free_adr))
- self.mc.LEA_rm(edi.value, (eax.value, size))
+ self.mc.LEA_rm(edi.value, (self.SEGMENT_NO, eax.value, size))
self.mc.CMP(edi, heap(self.SEGMENT_GC, nursery_top_adr))
self.mc.J_il8(rx86.Conditions['NA'], 0) # patched later
jmp_adr = self.mc.get_relative_pos()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit