VM fixes for Win64 calling convention

db4
unknown 2008-11-08 20:32:23 -06:00
parent de0cc7f99a
commit 359fb6e518
3 changed files with 19 additions and 8 deletions

View File

@ -10,14 +10,18 @@ and the callstack top is passed in EDX */
#define DS_REG %esi
#define RETURN_REG %eax
#define NV_TEMP_REG %rbx
#define CELL_SIZE 4
#define STACK_PADDING 12
#define PUSH_NONVOLATILE \
push %ebx ; \
push %ebp ; \
push %ebp
#define POP_NONVOLATILE \
pop %ebp ; \
pop %ebp ; \
pop %ebx

View File

@ -7,6 +7,8 @@
#define CELL_SIZE 8
#define STACK_PADDING 56
#define NV_TEMP_REG %rbp
#ifdef WINDOWS
#define ARG0 %rcx
@ -20,9 +22,11 @@
push %rdi ; \
push %rsi ; \
push %rbx ; \
push %rbp ; \
push %rbp
#define POP_NONVOLATILE \
pop %rbp ; \
pop %rbp ; \
pop %rbx ; \
pop %rsi ; \
@ -41,9 +45,11 @@
push %rbx ; \
push %rbp ; \
push %r12 ; \
push %r13 ; \
push %r13
#define POP_NONVOLATILE \
pop %r13 ; \
pop %r13 ; \
pop %r12 ; \
pop %rbp ; \

View File

@ -1,20 +1,21 @@
DEF(F_FASTCALL void,c_to_factor,(CELL quot)):
PUSH_NONVOLATILE
push ARG0
/* Save stack pointer */
lea -CELL_SIZE(STACK_REG),ARG0
mov ARG0,NV_TEMP_REG
/* Create register shadow area for Win64 */
sub $32,STACK_REG
sub $32,STACK_REG
/* Save stack pointer */
lea -CELL_SIZE(STACK_REG),ARG0
call MANGLE(save_callstack_bottom)
add $32,STACK_REG
/* Call quot-xt */
mov (STACK_REG),ARG0
mov NV_TEMP_REG,ARG0
call *QUOT_XT_OFFSET(ARG0)
pop ARG0
/* Tear down register shadow area */
add $32,STACK_REG
POP_NONVOLATILE
ret