separated vm-1st-arg and vm-3rd-arg asm invoke words (needed for ppc & x86.64)
parent
939426dcf5
commit
f5e6d43e1e
|
@ -437,7 +437,7 @@ M: ##alien-indirect generate-insn
|
||||||
! Generate code for boxing input parameters in a callback.
|
! Generate code for boxing input parameters in a callback.
|
||||||
[
|
[
|
||||||
dup \ %save-param-reg move-parameters
|
dup \ %save-param-reg move-parameters
|
||||||
"nest_stacks" %vm-invoke
|
"nest_stacks" %vm-invoke-1st-arg
|
||||||
box-parameters
|
box-parameters
|
||||||
] with-param-regs ;
|
] with-param-regs ;
|
||||||
|
|
||||||
|
@ -475,7 +475,7 @@ TUPLE: callback-context ;
|
||||||
[ callback-context new do-callback ] %
|
[ callback-context new do-callback ] %
|
||||||
] [ ] make ;
|
] [ ] make ;
|
||||||
|
|
||||||
: %unnest-stacks ( -- ) "unnest_stacks" %vm-invoke ;
|
: %unnest-stacks ( -- ) "unnest_stacks" %vm-invoke-1st-arg ;
|
||||||
|
|
||||||
M: ##callback-return generate-insn
|
M: ##callback-return generate-insn
|
||||||
#! All the extra book-keeping for %unwind is only for x86.
|
#! All the extra book-keeping for %unwind is only for x86.
|
||||||
|
|
|
@ -298,7 +298,8 @@ M: object %prepare-var-args ;
|
||||||
|
|
||||||
HOOK: %alien-invoke cpu ( function library -- )
|
HOOK: %alien-invoke cpu ( function library -- )
|
||||||
|
|
||||||
HOOK: %vm-invoke cpu ( function -- )
|
HOOK: %vm-invoke-1st-arg cpu ( function -- )
|
||||||
|
HOOK: %vm-invoke-3rd-arg cpu ( function -- )
|
||||||
|
|
||||||
HOOK: %cleanup cpu ( params -- )
|
HOOK: %cleanup cpu ( params -- )
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,9 @@ enable-float-intrinsics
|
||||||
|
|
||||||
M: ppc %vm-field-ptr ( dst field -- ) %load-vm-field-addr ;
|
M: ppc %vm-field-ptr ( dst field -- ) %load-vm-field-addr ;
|
||||||
|
|
||||||
|
M: ppc %vm-invoke-1st-arg ( function -- ) f %alien-invoke ;
|
||||||
|
M: ppc %vm-invoke-3rd-arg ( function -- ) f %alien-invoke ;
|
||||||
|
|
||||||
M: ppc machine-registers
|
M: ppc machine-registers
|
||||||
{
|
{
|
||||||
{ int-regs $[ 2 12 [a,b] 15 29 [a,b] append ] }
|
{ int-regs $[ 2 12 [a,b] 15 29 [a,b] append ] }
|
||||||
|
|
|
@ -51,11 +51,14 @@ M: x86.32 %alien-invoke 0 CALL rc-relative rel-dlsym ;
|
||||||
temp-reg 0 MOV rc-absolute-cell rt-vm rel-fixup ! push the vm ptr as an argument
|
temp-reg 0 MOV rc-absolute-cell rt-vm rel-fixup ! push the vm ptr as an argument
|
||||||
temp-reg PUSH ;
|
temp-reg PUSH ;
|
||||||
|
|
||||||
M: x86.32 %vm-invoke ( function -- )
|
M: x86.32 %vm-invoke-1st-arg ( function -- )
|
||||||
push-vm-ptr
|
push-vm-ptr
|
||||||
f %alien-invoke
|
f %alien-invoke
|
||||||
temp-reg POP ;
|
temp-reg POP ;
|
||||||
|
|
||||||
|
M: x86.32 %vm-invoke-3rd-arg ( function -- )
|
||||||
|
%vm-invoke-1st-arg ; ! first 2 args are regs, 3rd is stack so vm-invoke-1st-arg works here
|
||||||
|
|
||||||
M: x86.32 return-struct-in-registers? ( c-type -- ? )
|
M: x86.32 return-struct-in-registers? ( c-type -- ? )
|
||||||
c-type
|
c-type
|
||||||
[ return-in-registers?>> ]
|
[ return-in-registers?>> ]
|
||||||
|
|
|
@ -172,7 +172,9 @@ M: x86.64 %alien-invoke
|
||||||
rc-absolute-cell rel-dlsym
|
rc-absolute-cell rel-dlsym
|
||||||
R11 CALL ;
|
R11 CALL ;
|
||||||
|
|
||||||
M: x86.64 %vm-invoke ( function -- ) f %alien-invoke ;
|
M: x86.64 %vm-invoke-1st-arg ( function -- ) f %alien-invoke ;
|
||||||
|
|
||||||
|
M: x86.64 %vm-invoke-3rd-arg ( function -- ) f %alien-invoke ;
|
||||||
|
|
||||||
M: x86.64 %prepare-alien-indirect ( -- )
|
M: x86.64 %prepare-alien-indirect ( -- )
|
||||||
"unbox_alien" f %alien-invoke
|
"unbox_alien" f %alien-invoke
|
||||||
|
|
|
@ -615,7 +615,7 @@ M:: x86 %call-gc ( gc-root-count -- )
|
||||||
! Pass number of roots as second parameter
|
! Pass number of roots as second parameter
|
||||||
param-reg-2 gc-root-count MOV
|
param-reg-2 gc-root-count MOV
|
||||||
! Call GC
|
! Call GC
|
||||||
"inline_gc" %vm-invoke ; ! (PHIL) TODO: vm-invoke won't work with ppc or x86.64. need %vm-invoke-3rd
|
"inline_gc" %vm-invoke-3rd-arg ;
|
||||||
|
|
||||||
M: x86 %alien-global ( dst symbol library -- )
|
M: x86 %alien-global ( dst symbol library -- )
|
||||||
[ 0 MOV ] 2dip rc-absolute-cell rel-dlsym ;
|
[ 0 MOV ] 2dip rc-absolute-cell rel-dlsym ;
|
||||||
|
|
Loading…
Reference in New Issue