Author: Armin Rigo <[email protected]>
Branch: emit-call-x86
Changeset: r64311:01e5cd6f839f
Date: 2013-05-19 11:37 +0200
http://bitbucket.org/pypy/pypy/changeset/01e5cd6f839f/
Log: 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
@@ -30,7 +30,6 @@
from rpython.jit.backend.x86 import support
from rpython.rlib.debug import debug_print, debug_start, debug_stop
from rpython.rlib import rgc
-from rpython.jit.backend.x86.jump import remap_frame_layout
from rpython.jit.codewriter.effectinfo import EffectInfo
from rpython.jit.codewriter import longlong
from rpython.rlib.rarithmetic import intmask, r_uint
diff --git a/rpython/jit/backend/x86/callbuilder.py
b/rpython/jit/backend/x86/callbuilder.py
--- a/rpython/jit/backend/x86/callbuilder.py
+++ b/rpython/jit/backend/x86/callbuilder.py
@@ -1,10 +1,13 @@
from rpython.rlib.clibffi import FFI_DEFAULT_ABI
+from rpython.rlib.objectmodel import we_are_translated
+from rpython.jit.metainterp.history import INT, FLOAT
from rpython.jit.backend.x86.arch import (WORD, IS_X86_64, IS_X86_32,
PASS_ON_MY_FRAME)
from rpython.jit.backend.x86.regloc import (eax, ecx, edx, ebx, esp, ebp, esi,
xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, r8, r9, r10, r11, edi,
r12, r13, r14, r15, X86_64_SCRATCH_REG, X86_64_XMM_SCRATCH_REG,
- RegLoc)
+ RegLoc, RawEspLoc)
+from rpython.jit.backend.x86.jump import remap_frame_layout
# darwin requires the stack to be 16 bytes aligned on calls.
@@ -29,7 +32,7 @@
# this is the calling convention (can be FFI_STDCALL on Windows)
callconv = FFI_DEFAULT_ABI
- # if False, we also push the gcmap
+ # is it for the main CALL of a call_release_gil?
is_call_release_gil = False
@@ -139,7 +142,9 @@
xmm_dst_locs = []
singlefloats = None
- unused_grp = self.unused_grp[:]
+ arglocs = self.arglocs
+ argtypes = self.argtypes
+ unused_gpr = self.unused_gpr[:]
unused_xmm = self.unused_xmm[:]
on_stack = 0
@@ -176,18 +181,18 @@
if arg.is_float() or argtypes and argtypes[i] == 'S':
floats += 1
all_args = len(arglocs)
- stack_depth = (max(all_args - floats - len(unused_gpr), 0) +
- max(floats - len(unused_xmm), 0))
+ stack_depth = (max(all_args - floats - 6, 0) +
+ max(floats - 8, 0))
assert stack_depth == on_stack
align = 0
- if on_stack > stack_max:
- align = align_stack_words(on_stack - stack_max)
+ if on_stack > self.stack_max:
+ align = align_stack_words(on_stack - self.stack_max)
self.current_esp -= align * WORD
self.mc.SUB_ri(esp.value, align * WORD)
# Handle register arguments: first remap the xmm arguments
- remap_frame_layout(self, xmm_src_locs, xmm_dst_locs,
+ remap_frame_layout(self.asm, xmm_src_locs, xmm_dst_locs,
X86_64_XMM_SCRATCH_REG)
# Load the singlefloat arguments from main regs or stack to xmm regs
if singlefloats is not None:
@@ -211,7 +216,7 @@
src_locs.append(self.fnloc)
dst_locs.append(r10)
self.fnloc = r10
- remap_frame_layout(self, src_locs, dst_locs, X86_64_SCRATCH_REG)
+ remap_frame_layout(self.asm, src_locs, dst_locs, X86_64_SCRATCH_REG)
def _fix_stdcall(self, callconv):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit