Fix Joe Groff's x86-64 structs/callbacks bug
parent
0eb8b5609c
commit
6d050a61a7
|
@ -173,6 +173,9 @@ M: x86.32 %box-long-long ( n func -- )
|
||||||
[ (%box-long-long) ] [ f %alien-invoke ] bi*
|
[ (%box-long-long) ] [ f %alien-invoke ] bi*
|
||||||
] with-aligned-stack ;
|
] with-aligned-stack ;
|
||||||
|
|
||||||
|
: struct-return@ ( size n -- n )
|
||||||
|
[ stack-frame* cell + + ] [ \ stack-frame get swap - ] ?if ;
|
||||||
|
|
||||||
M: x86.32 %box-large-struct ( n size -- )
|
M: x86.32 %box-large-struct ( n size -- )
|
||||||
! Compute destination address
|
! Compute destination address
|
||||||
[ swap struct-return@ ] keep
|
[ swap struct-return@ ] keep
|
||||||
|
|
|
@ -116,6 +116,9 @@ M: x86.64 %box-small-struct ( size -- )
|
||||||
RDX swap MOV
|
RDX swap MOV
|
||||||
"box_small_struct" f %alien-invoke ;
|
"box_small_struct" f %alien-invoke ;
|
||||||
|
|
||||||
|
: struct-return@ ( size n -- n )
|
||||||
|
[ ] [ \ stack-frame get swap - ] ?if ;
|
||||||
|
|
||||||
M: x86.64 %box-large-struct ( n size -- )
|
M: x86.64 %box-large-struct ( n size -- )
|
||||||
! Struct size is parameter 2
|
! Struct size is parameter 2
|
||||||
RSI over MOV
|
RSI over MOV
|
||||||
|
|
|
@ -141,13 +141,6 @@ M: x86 small-enough? ( n -- ? )
|
||||||
|
|
||||||
: temp@ ( n -- op ) stack-reg \ stack-frame get rot - [+] ;
|
: temp@ ( n -- op ) stack-reg \ stack-frame get rot - [+] ;
|
||||||
|
|
||||||
: struct-return@ ( size n -- n )
|
|
||||||
[
|
|
||||||
stack-frame* cell + +
|
|
||||||
] [
|
|
||||||
\ stack-frame get swap -
|
|
||||||
] ?if ;
|
|
||||||
|
|
||||||
HOOK: %unbox-struct-1 cpu ( -- )
|
HOOK: %unbox-struct-1 cpu ( -- )
|
||||||
|
|
||||||
HOOK: %unbox-struct-2 cpu ( -- )
|
HOOK: %unbox-struct-2 cpu ( -- )
|
||||||
|
|
Loading…
Reference in New Issue