stack-frame get extra-stack-space +
reserved-stack-space + ;
-: special@ ( n -- op ) special-offset stack@ ;
-
-: spill@ ( n -- op ) spill-offset special@ ;
-
-: param@ ( n -- op ) reserved-stack-space + stack@ ;
+: spill@ ( n -- op ) spill-offset special-offset stack@ ;
: gc-root-offsets ( seq -- seq' )
[ n>> spill-offset special-offset cell + ] map f like ;
3 cells +
align-stack ;
-! Must be a volatile register not used for parameter passing or
-! integer return
-HOOK: temp-reg cpu ( -- reg )
-
HOOK: pic-tail-reg cpu ( -- reg )
M: x86 complex-addressing? t ;
[ \ f type-number MOV ]
if* ;
+M: x86 %load-float ( dst val -- )
+ <float> float-rep %load-vector ;
+
+M: x86 %load-double ( dst val -- )
+ <double> double-rep %load-vector ;
+
HOOK: ds-reg cpu ( -- reg )
HOOK: rs-reg cpu ( -- reg )
M:: x86 %reload ( dst rep src -- )
dst src rep %copy ;
-M:: x86 %store-reg-param ( src reg rep -- )
- reg src rep %copy ;
-
M:: x86 %store-stack-param ( src n rep -- )
- n param@ src rep %copy ;
+ n reserved-stack-space + stack@ src rep %copy ;
+
+: %load-return ( dst rep -- )
+ [ reg-class-of return-regs at first ] keep %load-reg-param ;
+
+: %store-return ( dst rep -- )
+ [ reg-class-of return-regs at first ] keep %store-reg-param ;
+
+: next-stack@ ( n -- operand )
+ #! nth parameter from the next stack frame. Used to box
+ #! input values to callbacks; the callback has its own
+ #! stack frame set up, and we want to read the frame
+ #! set up by the caller.
+ frame-reg swap 2 cells + [+] ;
-HOOK: struct-return@ cpu ( n -- operand )
+M:: x86 %load-stack-param ( dst n rep -- )
+ dst n next-stack@ rep %copy ;
-M: x86 %prepare-struct-area ( dst -- )
- f struct-return@ LEA ;
+M: x86 %prepare-struct-caller ( dst -- )
+ return-offset special-offset stack@ LEA ;
M: x86 %alien-indirect ( src -- )
?spill-slot CALL ;
M: x86 immediate-bitwise? ( n -- ? )
HEX: -80000000 HEX: 7fffffff between? ;
-: next-stack@ ( n -- operand )
- #! nth parameter from the next stack frame. Used to box
- #! input values to callbacks; the callback has its own
- #! stack frame set up, and we want to read the frame
- #! set up by the caller.
- frame-reg swap 2 cells + [+] ;
-
enable-min/max
enable-log2