passing vm ptr to lazy_jit_compile mostly working
parent
6a193bb0d5
commit
4afc16e95b
|
@ -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 ;
|
||||||
|
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
13
vm/cpu-x86.S
13
vm/cpu-x86.S
|
@ -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 */
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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() { }
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue