set-context and start-context primitives can now pass parameters around
parent
b5f7e91bdc
commit
b6dfdcb909
|
@ -269,12 +269,11 @@ IN: bootstrap.x86
|
|||
ESP [] vm-reg MOV
|
||||
"new_context" jit-call
|
||||
|
||||
! Save pointer to quotation and parameter, pop them off the
|
||||
! datastack
|
||||
! Save pointer to quotation and parameter
|
||||
EBX ds-reg MOV
|
||||
ds-reg 8 SUB
|
||||
|
||||
! Make the new context the active context
|
||||
! Make the new context active
|
||||
EAX jit-set-context
|
||||
|
||||
! Push parameter
|
||||
|
@ -288,16 +287,21 @@ IN: bootstrap.x86
|
|||
] \ (start-context) define-sub-primitive
|
||||
|
||||
[
|
||||
! Load context from datastack
|
||||
! Load context and parameter from datastack
|
||||
EAX ds-reg [] MOV
|
||||
EAX EAX alien-offset [+] MOV
|
||||
ds-reg 4 SUB
|
||||
EBX ds-reg -4 [+] MOV
|
||||
ds-reg 8 SUB
|
||||
|
||||
! Make it the active context
|
||||
! Make the new context active
|
||||
EAX jit-set-context
|
||||
|
||||
! Twiddle stack for return
|
||||
ESP 4 ADD
|
||||
|
||||
! Store parameter to datastack
|
||||
ds-reg 4 ADD
|
||||
ds-reg [] EBX MOV
|
||||
] \ (set-context) define-sub-primitive
|
||||
|
||||
<< "vocab:cpu/x86/bootstrap.factor" parse-file suffix! >>
|
||||
|
|
|
@ -242,15 +242,12 @@ IN: bootstrap.x86
|
|||
arg1 vm-reg MOV
|
||||
"new_context" jit-call
|
||||
|
||||
! Load quotation from datastack
|
||||
! Load quotation and parameter from datastack
|
||||
arg1 ds-reg [] MOV
|
||||
|
||||
! Load parameter from datastack
|
||||
arg2 ds-reg -8 [+] MOV
|
||||
|
||||
ds-reg 16 SUB
|
||||
|
||||
! Make the new context the active context
|
||||
! Make the new context active
|
||||
return-reg jit-set-context
|
||||
|
||||
! Push parameter
|
||||
|
@ -262,16 +259,21 @@ IN: bootstrap.x86
|
|||
] \ (start-context) define-sub-primitive
|
||||
|
||||
[
|
||||
! Load context from datastack
|
||||
! Load context and parameter from datastack
|
||||
temp0 ds-reg [] MOV
|
||||
temp0 temp0 alien-offset [+] MOV
|
||||
ds-reg 8 SUB
|
||||
temp1 ds-reg -8 [+] MOV
|
||||
ds-reg 16 SUB
|
||||
|
||||
! Make it the active context
|
||||
! Make the new context active
|
||||
temp0 jit-set-context
|
||||
|
||||
! Twiddle stack for return
|
||||
RSP 8 ADD
|
||||
|
||||
! Store parameter to datastack
|
||||
ds-reg 8 ADD
|
||||
ds-reg [] temp1 MOV
|
||||
] \ (set-context) define-sub-primitive
|
||||
|
||||
<< "vocab:cpu/x86/bootstrap.factor" parse-file suffix! >>
|
||||
|
|
|
@ -513,9 +513,9 @@ M: bad-executable summary
|
|||
|
||||
\ delete-context { c-ptr } { } define-primitive
|
||||
|
||||
\ (start-context) { object quotation } { } define-primitive
|
||||
\ (start-context) { object quotation } { object } define-primitive
|
||||
|
||||
\ (set-context) { alien } { } define-primitive
|
||||
\ (set-context) { object alien } { object } define-primitive
|
||||
|
||||
\ special-object { fixnum } { object } define-primitive
|
||||
\ special-object make-flushable
|
||||
|
|
|
@ -369,8 +369,8 @@ tuple
|
|||
{ "fixnum<=" "math.private" (( x y -- z )) }
|
||||
{ "fixnum>" "math.private" (( x y -- ? )) }
|
||||
{ "fixnum>=" "math.private" (( x y -- ? )) }
|
||||
{ "(set-context)" "threads.private" (( context -- )) }
|
||||
{ "(start-context)" "threads.private" (( obj quot -- )) }
|
||||
{ "(set-context)" "threads.private" (( obj context -- obj' )) }
|
||||
{ "(start-context)" "threads.private" (( obj quot -- obj' )) }
|
||||
} [ first3 make-sub-primitive ] each
|
||||
|
||||
! Primitive words
|
||||
|
|
Loading…
Reference in New Issue