diff --git a/basis/bootstrap/image/image.factor b/basis/bootstrap/image/image.factor index 504afae018..3a0cc77f61 100644 --- a/basis/bootstrap/image/image.factor +++ b/basis/bootstrap/image/image.factor @@ -137,6 +137,9 @@ SYMBOL: jit-2dip-word SYMBOL: jit-2dip SYMBOL: jit-3dip-word SYMBOL: jit-3dip +SYMBOL: jit-execute-word +SYMBOL: jit-execute-jump +SYMBOL: jit-execute-call SYMBOL: jit-epilog SYMBOL: jit-return SYMBOL: jit-profiling @@ -173,6 +176,9 @@ SYMBOL: undefined-quot { jit-2dip 47 } { jit-3dip-word 48 } { jit-3dip 49 } + { jit-execute-word 50 } + { jit-execute-jump 51 } + { jit-execute-call 52 } { undefined-quot 60 } } ; inline @@ -486,6 +492,7 @@ M: quotation ' \ dip jit-dip-word set \ 2dip jit-2dip-word set \ 3dip jit-3dip-word set + \ (execute) jit-execute-word set [ undefined ] undefined-quot set { jit-code-format @@ -506,6 +513,9 @@ M: quotation ' jit-2dip jit-3dip-word jit-3dip + jit-execute-word + jit-execute-jump + jit-execute-call jit-epilog jit-return jit-profiling diff --git a/basis/cpu/x86/bootstrap.factor b/basis/cpu/x86/bootstrap.factor index b63d31364b..e1cbcc5d97 100644 --- a/basis/cpu/x86/bootstrap.factor +++ b/basis/cpu/x86/bootstrap.factor @@ -151,6 +151,18 @@ big-endian off jit-3r> ] rc-relative rt-xt 23 rex-length 8 * + jit-3dip jit-define +: prepare-(execute) ( -- operand ) + ! load from stack + temp0 ds-reg [] MOV + ! pop stack + ds-reg bootstrap-cell SUB + ! execute word + temp0 word-xt-offset [+] ; + +[ prepare-(execute) JMP ] f f f jit-execute-jump jit-define + +[ prepare-(execute) CALL ] f f f jit-execute-call jit-define + [ ! unwind stack frame stack-reg stack-frame-size bootstrap-cell - ADD @@ -170,15 +182,6 @@ big-endian off arg quot-xt-offset [+] JMP ] f f f \ (call) define-sub-primitive -[ - ! load from stack - temp0 ds-reg [] MOV - ! pop stack - ds-reg bootstrap-cell SUB - ! execute word - temp0 word-xt-offset [+] JMP -] f f f \ (execute) define-sub-primitive - ! Objects [ ! load from stack