cpu.x86.64: fix calling varargs functions
parent
cc0d69416f
commit
0fbe78be00
|
@ -209,6 +209,8 @@ M:: x86.32 %binary-float-function ( dst src1 src2 func -- )
|
||||||
#! MINGW ABI incompatibility disaster
|
#! MINGW ABI incompatibility disaster
|
||||||
[ large-struct? ] [ mingw eq? os windows? not or ] bi* and ;
|
[ large-struct? ] [ mingw eq? os windows? not or ] bi* and ;
|
||||||
|
|
||||||
|
M: x86.32 %prepare-var-args ( -- ) ;
|
||||||
|
|
||||||
M:: x86.32 stack-cleanup ( stack-size return abi -- n )
|
M:: x86.32 stack-cleanup ( stack-size return abi -- n )
|
||||||
#! a) Functions which are stdcall/fastcall/thiscall have to
|
#! a) Functions which are stdcall/fastcall/thiscall have to
|
||||||
#! clean up the caller's stack frame.
|
#! clean up the caller's stack frame.
|
||||||
|
|
|
@ -140,6 +140,8 @@ M:: x86.64 %binary-float-function ( dst src1 src2 func -- )
|
||||||
func "libm" load-library f %c-invoke
|
func "libm" load-library f %c-invoke
|
||||||
dst double-rep %load-return ;
|
dst double-rep %load-return ;
|
||||||
|
|
||||||
|
M: x86.64 %prepare-var-args ( -- ) RAX RAX XOR ;
|
||||||
|
|
||||||
M: x86.64 stack-cleanup 3drop 0 ;
|
M: x86.64 stack-cleanup 3drop 0 ;
|
||||||
|
|
||||||
M: x86.64 %cleanup 0 assert= ;
|
M: x86.64 %cleanup 0 assert= ;
|
||||||
|
|
|
@ -347,8 +347,8 @@ M: x86.64 has-small-reg? 2drop t ;
|
||||||
|
|
||||||
:: (%convert-integer) ( dst src bits quot -- )
|
:: (%convert-integer) ( dst src bits quot -- )
|
||||||
dst { src } bits [| new-dst |
|
dst { src } bits [| new-dst |
|
||||||
new-dst dup bits n-bit-version-of dup src MOV
|
new-dst src int-rep %copy
|
||||||
quot call
|
new-dst dup bits n-bit-version-of quot call
|
||||||
dst new-dst int-rep %copy
|
dst new-dst int-rep %copy
|
||||||
] with-small-register ; inline
|
] with-small-register ; inline
|
||||||
|
|
||||||
|
@ -644,6 +644,7 @@ HOOK: %cleanup cpu ( n -- )
|
||||||
:: emit-alien-insn ( reg-inputs stack-inputs reg-outputs cleanup stack-size quot -- )
|
:: emit-alien-insn ( reg-inputs stack-inputs reg-outputs cleanup stack-size quot -- )
|
||||||
stack-inputs [ first3 %store-stack-param ] each
|
stack-inputs [ first3 %store-stack-param ] each
|
||||||
reg-inputs [ first3 %store-reg-param ] each
|
reg-inputs [ first3 %store-reg-param ] each
|
||||||
|
%prepare-var-args
|
||||||
quot call
|
quot call
|
||||||
cleanup %cleanup
|
cleanup %cleanup
|
||||||
reg-outputs [ first3 %load-reg-param ] each ; inline
|
reg-outputs [ first3 %load-reg-param ] each ; inline
|
||||||
|
|
Loading…
Reference in New Issue