Stack alignment fixes
parent
ca7acc29df
commit
200dbc4edd
|
@ -76,15 +76,19 @@ USING: assembler kernel kernel-internals math namespaces ;
|
||||||
"run_callback" f %alien-invoke
|
"run_callback" f %alien-invoke
|
||||||
] with-aligned-stack ;
|
] with-aligned-stack ;
|
||||||
|
|
||||||
|
: align-callback-value ( reg-class -- reg n )
|
||||||
|
ESP 16 rot reg-size - ;
|
||||||
|
|
||||||
: %callback-value ( reg-class func -- )
|
: %callback-value ( reg-class func -- )
|
||||||
f %alien-invoke ! Call the unboxer
|
! Call the unboxer
|
||||||
ESP 12 ADD
|
f %alien-invoke
|
||||||
|
dup align-callback-value SUB
|
||||||
! Save return register
|
! Save return register
|
||||||
dup push-return-reg
|
dup push-return-reg
|
||||||
! Restore data/call/retain stacks
|
! Restore data/call/retain stacks
|
||||||
"unnest_stacks" f %alien-invoke
|
"unnest_stacks" f %alien-invoke
|
||||||
! Restore return register
|
! Restore return register
|
||||||
pop-return-reg
|
dup pop-return-reg
|
||||||
ESP 12 SUB ;
|
align-callback-value ADD ;
|
||||||
|
|
||||||
: %cleanup ( n -- ) drop ;
|
: %cleanup ( n -- ) drop ;
|
||||||
|
|
|
@ -222,10 +222,14 @@ IN: compiler
|
||||||
! There was an overflow, so make ECX into a bignum. we must
|
! There was an overflow, so make ECX into a bignum. we must
|
||||||
! save EDX since its volatile.
|
! save EDX since its volatile.
|
||||||
remainder-reg PUSH
|
remainder-reg PUSH
|
||||||
|
! Align the stack -- only needed on Mac OS X
|
||||||
|
ESP 12 SUB
|
||||||
"s48_long_to_bignum" f
|
"s48_long_to_bignum" f
|
||||||
"y" operand 1array compile-c-call*
|
"y" operand 1array compile-c-call*
|
||||||
! An untagged pointer to the bignum is now in EAX; tag it
|
! An untagged pointer to the bignum is now in EAX; tag it
|
||||||
T{ int-regs } return-reg bignum-tag OR
|
T{ int-regs } return-reg bignum-tag OR
|
||||||
|
! Align the stack -- only needed on Mac OS X
|
||||||
|
ESP 12 ADD
|
||||||
! the remainder is now in EDX
|
! the remainder is now in EDX
|
||||||
remainder-reg POP
|
remainder-reg POP
|
||||||
"end" get save-xt ;
|
"end" get save-xt ;
|
||||||
|
|
Loading…
Reference in New Issue