2007-12-25 23:40:36 -05:00
|
|
|
#define JUMP_QUOT jmp *QUOT_XT_OFFSET(ARG0)
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-09-27 16:10:37 -04:00
|
|
|
DEF(F_FASTCALL void,c_to_factor,(CELL quot)):
|
2007-09-21 23:30:47 -04:00
|
|
|
PUSH_NONVOLATILE
|
|
|
|
push ARG0 /* Save quot */
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-09-21 23:30:47 -04:00
|
|
|
lea -CELL_SIZE(STACK_REG),ARG0 /* Save stack pointer */
|
2007-09-20 18:09:08 -04:00
|
|
|
call MANGLE(save_callstack_bottom)
|
|
|
|
|
2007-09-21 23:30:47 -04:00
|
|
|
mov (STACK_REG),ARG0 /* Pass quot as arg 1 */
|
2007-12-25 23:40:36 -05:00
|
|
|
call *QUOT_XT_OFFSET(ARG0) /* Call quot-xt */
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-09-21 23:30:47 -04:00
|
|
|
POP ARG0
|
|
|
|
POP_NONVOLATILE
|
2007-09-20 18:09:08 -04:00
|
|
|
ret
|
|
|
|
|
2007-09-27 16:10:37 -04:00
|
|
|
DEF(F_FASTCALL void,primitive_call,(void)):
|
2007-09-21 23:30:47 -04:00
|
|
|
mov (DS_REG),ARG0 /* Load quotation from data stack */
|
|
|
|
sub $CELL_SIZE,DS_REG /* Pop data stack */
|
2007-09-20 18:09:08 -04:00
|
|
|
JUMP_QUOT
|
|
|
|
|
2007-12-26 17:14:33 -05:00
|
|
|
/* Don't mess up EDX, it's the callstack top parameter to primitives. */
|
2007-09-27 16:10:37 -04:00
|
|
|
DEF(F_FASTCALL void,primitive_execute,(void)):
|
2007-09-21 23:30:47 -04:00
|
|
|
mov (DS_REG),ARG0 /* Load word from data stack */
|
|
|
|
sub $CELL_SIZE,DS_REG /* Pop data stack */
|
2007-12-25 23:40:36 -05:00
|
|
|
jmp *WORD_XT_OFFSET(ARG0) /* Load word-xt slot */
|
2007-09-21 23:30:47 -04:00
|
|
|
|
2007-09-27 16:10:37 -04:00
|
|
|
DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to)):
|
2007-09-21 23:30:47 -04:00
|
|
|
mov ARG1,STACK_REG /* rewind_to */
|
2007-09-20 18:09:08 -04:00
|
|
|
JUMP_QUOT
|
2007-09-26 00:34:37 -04:00
|
|
|
|
|
|
|
DEF(FASTCALL void,lazy_jit_compile,(CELL quot)):
|
|
|
|
mov STACK_REG,ARG1 /* Save stack pointer */
|
2007-12-25 23:40:36 -05:00
|
|
|
push ARG1 /* Alignment */
|
|
|
|
push ARG1
|
|
|
|
push ARG1
|
2007-10-03 16:56:49 -04:00
|
|
|
call MANGLE(primitive_jit_compile)
|
2007-09-26 00:34:37 -04:00
|
|
|
mov RETURN_REG,ARG0 /* No-op on 32-bit */
|
2007-12-25 23:40:36 -05:00
|
|
|
pop ARG1 /* OK to clobber ARG1 here */
|
|
|
|
pop ARG1
|
|
|
|
pop ARG1
|
2007-09-26 00:34:37 -04:00
|
|
|
JUMP_QUOT /* Call the quotation */
|
2007-10-04 12:56:12 -04:00
|
|
|
|
2007-10-06 18:09:22 -04:00
|
|
|
#ifdef WINDOWS
|
|
|
|
.section .drectve
|
|
|
|
.ascii " -export:c_to_factor"
|
|
|
|
#endif
|