"Architecture support checks:"
{ $subsections
complex-addressing?
- float-on-stack?
float-right-align-on-stack?
fused-unboxing?
test-instruction?
! (r3, r5, etc) register.
HOOK: long-long-odd-register? cpu ( -- ? )
-! If t, floats are never passed in param regs
-HOOK: float-on-stack? cpu ( -- ? )
-
! If t, put floats in the second word of a double word on the stack
HOOK: float-right-align-on-stack? cpu ( -- ? )
M: ppc return-struct-in-registers? ( c-type -- ? )
lookup-c-type return-in-registers?>> ;
-! If t, floats are never passed in param regs
-M: ppc float-on-stack? ( -- ? ) f ;
-
! If t, the struct return pointer is never passed in a param reg
M: ppc struct-return-on-stack? ( -- ? ) f ;
M: x86.32 long-long-on-stack? t ;
-M: x86.32 float-on-stack? t ;
-
M: x86.32 flatten-struct-type
call-next-method [ first t f 3array ] map ;
M: x86.64 long-long-on-stack? f ;
-M: x86.64 float-on-stack? f ;
-
M: x86.64 struct-return-on-stack? f ;
M: x86.64 (cpuid) ( rax rcx regs -- )