[pypy-commit] pypy default: Fixes
arigo
noreply at buildbot.pypy.org
Sun Jun 3 12:18:59 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r55277:6bab143c4abe
Date: 2012-06-03 10:18 +0200
http://bitbucket.org/pypy/pypy/changeset/6bab143c4abe/
Log: Fixes
diff --git a/pypy/jit/backend/x86/assembler.py b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -10,7 +10,7 @@
from pypy.rlib.jit import AsmInfo
from pypy.jit.backend.model import CompiledLoopToken
from pypy.jit.backend.x86.regalloc import (RegAlloc, get_ebp_ofs, _get_scale,
- gpr_reg_mgr_cls, _valid_addressing_size)
+ gpr_reg_mgr_cls, xmm_reg_mgr_cls, _valid_addressing_size)
from pypy.jit.backend.x86.arch import (FRAME_FIXED_SIZE, FORCE_INDEX_OFS, WORD,
IS_X86_32, IS_X86_64)
@@ -371,7 +371,7 @@
#
frame_size = (1 + # my argument, considered part of my frame
1 + # my return address
- len(self._regalloc.rm.save_around_call_regs))
+ len(gpr_reg_mgr_cls.save_around_call_regs))
if withfloats:
frame_size += 16 # X86_32: 16 words for 8 registers;
# X86_64: just 16 registers
@@ -385,13 +385,13 @@
mc.SUB_ri(esp.value, correct_esp_by)
#
ofs = correct_esp_by
- for reg in self._regalloc.rm.save_around_call_regs:
+ if withfloats:
+ for reg in xmm_reg_mgr_cls.save_around_call_regs:
+ ofs -= 8
+ mc.MOVSD_sx(ofs, reg.value)
+ for reg in gpr_reg_mgr_cls.save_around_call_regs:
ofs -= WORD
mc.MOV_sr(ofs, reg.value)
- if withfloats:
- for reg in self._regalloc.xmm.save_around_call_regs:
- ofs -= 8
- mc.MOVSD_sx(ofs, reg.value)
#
if IS_X86_32:
mc.MOV_rs(eax.value, (frame_size - 1) * WORD)
@@ -409,18 +409,18 @@
imm(-0x80))
#
ofs = correct_esp_by
- for reg in self._regalloc.rm.save_around_call_regs:
+ if withfloats:
+ for reg in xmm_reg_mgr_cls.save_around_call_regs:
+ ofs -= 8
+ mc.MOVSD_xs(reg.value, ofs)
+ for reg in gpr_reg_mgr_cls.save_around_call_regs:
ofs -= WORD
mc.MOV_rs(reg.value, ofs)
- if withfloats:
- for reg in self._regalloc.xmm.save_around_call_regs:
- ofs -= 8
- mc.MOVSD_xs(reg.value, ofs)
#
# ADD esp, correct_esp_by --- but cannot use ADD, because
# of its effects on the CPU flags
mc.LEA_rs(esp.value, correct_esp_by)
- mc.RET(WORD)
+ mc.RET16_i(WORD)
#
rawstart = mc.materialize(self.cpu.asmmemmgr, [])
self.wb_slowpath[withcards + 2 * withfloats] = rawstart
@@ -2443,10 +2443,10 @@
# Write only a CALL to the helper prepared in advance, passing it as
# argument the address of the structure we are writing into
# (the first argument to COND_CALL_GC_WB).
- self.mc.PUSH(loc_base) # push loc_base, either a reg or an immed
helper_num = card_marking
if self._regalloc.xrm.reg_bindings:
helper_num += 2
+ self.mc.PUSH(loc_base)
self.mc.CALL(imm(self.wb_slowpath[helper_num]))
if card_marking:
diff --git a/pypy/jit/backend/x86/rx86.py b/pypy/jit/backend/x86/rx86.py
--- a/pypy/jit/backend/x86/rx86.py
+++ b/pypy/jit/backend/x86/rx86.py
@@ -531,7 +531,7 @@
PUSH_r = insn(rex_nw, register(1), '\x50')
PUSH_b = insn(rex_nw, '\xFF', orbyte(6<<3), stack_bp(1))
- PUSH_i32 = insn('\x68', immediate(1, 'i'))
+ PUSH_i = insn('\x68', immediate(1, 'i'))
POP_r = insn(rex_nw, register(1), '\x58')
POP_b = insn(rex_nw, '\x8F', orbyte(0<<3), stack_bp(1))
More information about the pypy-commit
mailing list