passing vm ptr to lazy_jit_compile mostly working

db4
Phil Dawes 2009-08-19 19:02:12 +01:00
parent 6a193bb0d5
commit 4afc16e95b
14 changed files with 26 additions and 15 deletions

View File

@ -240,6 +240,7 @@ M: x86.32 %alien-callback ( quot -- )
4 [ 4 [
EAX swap %load-reference EAX swap %load-reference
EAX PUSH EAX PUSH
param-reg-2 0 MOV rc-absolute-cell rt-vm rel-fixup
"c_to_factor" f %alien-invoke "c_to_factor" f %alien-invoke
] with-aligned-stack ; ] with-aligned-stack ;

View File

@ -12,6 +12,7 @@ IN: bootstrap.x86
: div-arg ( -- reg ) EAX ; : div-arg ( -- reg ) EAX ;
: mod-arg ( -- reg ) EDX ; : mod-arg ( -- reg ) EDX ;
: arg ( -- reg ) EAX ; : arg ( -- reg ) EAX ;
: arg2 ( -- reg ) EDX ;
: temp0 ( -- reg ) EAX ; : temp0 ( -- reg ) EAX ;
: temp1 ( -- reg ) EDX ; : temp1 ( -- reg ) EDX ;
: temp2 ( -- reg ) ECX ; : temp2 ( -- reg ) ECX ;

View File

@ -6,6 +6,7 @@ IN: bootstrap.x86
: stack-frame-size ( -- n ) 4 bootstrap-cells ; : stack-frame-size ( -- n ) 4 bootstrap-cells ;
: arg ( -- reg ) RDI ; : arg ( -- reg ) RDI ;
: arg2 ( -- reg ) RSI ;
<< "vocab:cpu/x86/64/bootstrap.factor" parse-file parsed >> << "vocab:cpu/x86/64/bootstrap.factor" parse-file parsed >>
call call

View File

@ -7,6 +7,7 @@ IN: bootstrap.x86
: stack-frame-size ( -- n ) 8 bootstrap-cells ; : stack-frame-size ( -- n ) 8 bootstrap-cells ;
: arg ( -- reg ) RCX ; : arg ( -- reg ) RCX ;
: arg2 ( -- reg ) RDX ;
<< "vocab:cpu/x86/64/bootstrap.factor" parse-file parsed >> << "vocab:cpu/x86/64/bootstrap.factor" parse-file parsed >>
call call

View File

@ -251,6 +251,8 @@ big-endian off
arg ds-reg [] MOV arg ds-reg [] MOV
! pop stack ! pop stack
ds-reg bootstrap-cell SUB ds-reg bootstrap-cell SUB
! pass vm pointer
arg2 0 MOV rc-absolute-cell rt-vm jit-rel
! call quotation ! call quotation
arg quot-xt-offset [+] JMP arg quot-xt-offset [+] JMP
] \ (call) define-sub-primitive ] \ (call) define-sub-primitive

View File

@ -81,9 +81,9 @@ inline static unsigned int fpu_status(unsigned int status)
} }
/* Defined in assembly */ /* Defined in assembly */
VM_ASM_API void c_to_factor(cell quot); VM_ASM_API void c_to_factor(cell quot, void *vm);
VM_ASM_API void throw_impl(cell quot, stack_frame *rewind); VM_ASM_API void throw_impl(cell quot, stack_frame *rewind, void *vm);
VM_ASM_API void lazy_jit_compile(cell quot); VM_ASM_API void lazy_jit_compile(cell quot, void *vm);
VM_ASM_API void flush_icache(cell start, cell len); VM_ASM_API void flush_icache(cell start, cell len);
VM_ASM_API void set_callstack(stack_frame *to, VM_ASM_API void set_callstack(stack_frame *to,

View File

@ -34,17 +34,19 @@ multiply_overflow:
mov ARITH_TEMP_2,ARG1 mov ARITH_TEMP_2,ARG1
jmp MANGLE(overflow_fixnum_multiply) jmp MANGLE(overflow_fixnum_multiply)
DEF(F_FASTCALL void,c_to_factor,(CELL quot)): DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)):
PUSH_NONVOLATILE PUSH_NONVOLATILE
mov ARG0,NV_TEMP_REG mov ARG0,NV_TEMP_REG
//mov $35,ARG1
/* Create register shadow area for Win64 */ /* Create register shadow area for Win64 */
sub $32,STACK_REG sub $32,STACK_REG
/* Save stack pointer */ /* Save stack pointer */
lea -CELL_SIZE(STACK_REG),ARG0 lea -CELL_SIZE(STACK_REG),ARG0
push ARG1 /* save vm ptr */
call MANGLE(save_callstack_bottom) call MANGLE(save_callstack_bottom)
pop ARG1
/* Call quot-xt */ /* Call quot-xt */
mov NV_TEMP_REG,ARG0 mov NV_TEMP_REG,ARG0
call *QUOT_XT_OFFSET(ARG0) call *QUOT_XT_OFFSET(ARG0)
@ -65,10 +67,13 @@ DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to)):
mov ARG1,STACK_REG mov ARG1,STACK_REG
jmp *QUOT_XT_OFFSET(ARG0) jmp *QUOT_XT_OFFSET(ARG0)
DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot)): DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot, void *vm)):
mov ARG1,NV_TEMP_REG /* stash vm ptr */
mov STACK_REG,ARG1 /* Save stack pointer */ mov STACK_REG,ARG1 /* Save stack pointer */
sub $STACK_PADDING,STACK_REG sub $STACK_PADDING,STACK_REG
push NV_TEMP_REG /* push vm ptr as arg3 */
call MANGLE(lazy_jit_compile_impl) call MANGLE(lazy_jit_compile_impl)
pop NV_TEMP_REG
mov RETURN_REG,ARG0 /* No-op on 32-bit */ mov RETURN_REG,ARG0 /* No-op on 32-bit */
add $STACK_PADDING,STACK_REG add $STACK_PADDING,STACK_REG
jmp *QUOT_XT_OFFSET(ARG0) /* Call the quotation */ jmp *QUOT_XT_OFFSET(ARG0) /* Call the quotation */

View File

@ -69,9 +69,9 @@ inline static unsigned int fpu_status(unsigned int status)
} }
/* Defined in assembly */ /* Defined in assembly */
VM_ASM_API void c_to_factor(cell quot); VM_ASM_API void c_to_factor(cell quot,void *vm);
VM_ASM_API void throw_impl(cell quot, stack_frame *rewind_to); VM_ASM_API void throw_impl(cell quot, stack_frame *rewind_to);
VM_ASM_API void lazy_jit_compile(cell quot); VM_ASM_API void lazy_jit_compile(cell quot, void *vm);
VM_C_API void set_callstack(stack_frame *to, VM_C_API void set_callstack(stack_frame *to,
stack_frame *from, stack_frame *from,

View File

@ -5,7 +5,7 @@ namespace factor
void c_to_factor_toplevel(cell quot) void c_to_factor_toplevel(cell quot)
{ {
c_to_factor(quot); c_to_factor(quot,vm);
} }
void init_signals() void init_signals()

View File

@ -10,7 +10,7 @@ void c_to_factor_toplevel(cell quot)
for(;;) for(;;)
{ {
NS_DURING NS_DURING
c_to_factor(quot); c_to_factor(quot,vm);
NS_VOIDRETURN; NS_VOIDRETURN;
NS_HANDLER NS_HANDLER
dpush(vm->allot_alien(F,(cell)localException)); dpush(vm->allot_alien(F,(cell)localException));

View File

@ -37,7 +37,7 @@ PRIMITIVE(os_envs)
void c_to_factor_toplevel(cell quot) void c_to_factor_toplevel(cell quot)
{ {
c_to_factor(quot); c_to_factor(quot,vm);
} }
void open_console() { } void open_console() { }

View File

@ -62,7 +62,7 @@ void factorvm::c_to_factor_toplevel(cell quot)
{ {
if(!AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)exception_handler)) if(!AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)exception_handler))
fatal_error("AddVectoredExceptionHandler failed", 0); fatal_error("AddVectoredExceptionHandler failed", 0);
c_to_factor(quot); c_to_factor(quot,this);
RemoveVectoredExceptionHandler((void *)exception_handler); RemoveVectoredExceptionHandler((void *)exception_handler);
} }

View File

@ -368,7 +368,7 @@ cell factorvm::lazy_jit_compile_impl(cell quot_, stack_frame *stack)
return quot.value(); return quot.value();
} }
VM_ASM_API cell lazy_jit_compile_impl(cell quot_, stack_frame *stack) VM_ASM_API cell lazy_jit_compile_impl(cell quot_, stack_frame *stack, factorvm *myvm)
{ {
return vm->lazy_jit_compile_impl(quot_,stack); return vm->lazy_jit_compile_impl(quot_,stack);
} }

View File

@ -27,7 +27,7 @@ PRIMITIVE(jit_compile);
PRIMITIVE(array_to_quotation); PRIMITIVE(array_to_quotation);
PRIMITIVE(quotation_xt); PRIMITIVE(quotation_xt);
VM_ASM_API cell lazy_jit_compile_impl(cell quot, stack_frame *stack); VM_ASM_API cell lazy_jit_compile_impl(cell quot, stack_frame *stack, factorvm *myvm);
PRIMITIVE(quot_compiled_p); PRIMITIVE(quot_compiled_p);