cpu.x86: fix %load/store-stack-param for 32-bit
parent
37bddfba54
commit
867530223c
|
@ -96,6 +96,20 @@ M: x86.32 %prologue ( n -- )
|
|||
M: x86.32 %prepare-jump
|
||||
pic-tail-reg 0 MOV xt-tail-pic-offset rc-absolute-cell rel-here ;
|
||||
|
||||
M: x86.32 %load-stack-param ( dst rep n -- )
|
||||
next-stack@ swap {
|
||||
{ int-rep [ [ EAX ] dip MOV ?spill-slot EAX MOV ] }
|
||||
{ float-rep [ FLDS ?spill-slot FSTPS ] }
|
||||
{ double-rep [ FLDL ?spill-slot FSTPL ] }
|
||||
} case ;
|
||||
|
||||
M: x86.32 %store-stack-param ( src rep n -- )
|
||||
reserved-stack-space + stack@ swap {
|
||||
{ int-rep [ [ [ EAX ] dip ?spill-slot MOV ] [ EAX MOV ] bi* ] }
|
||||
{ float-rep [ [ ?spill-slot FLDS ] [ FSTPS ] bi* ] }
|
||||
{ double-rep [ [ ?spill-slot FLDL ] [ FSTPL ] bi* ] }
|
||||
} case ;
|
||||
|
||||
:: load-float-return ( dst x87-insn rep -- )
|
||||
dst register? [
|
||||
ESP 4 SUB
|
||||
|
@ -192,10 +206,10 @@ M:: spill-slot float-function-param ( n dst src -- )
|
|||
! We can clobber dst here since its going to contain the
|
||||
! final result
|
||||
dst src double-rep %copy
|
||||
dst n double-rep %store-stack-param ;
|
||||
dst double-rep n %store-stack-param ;
|
||||
|
||||
M:: register float-function-param ( n dst src -- )
|
||||
src n double-rep %store-stack-param ;
|
||||
src double-rep n %store-stack-param ;
|
||||
|
||||
M:: x86.32 %unary-float-function ( dst src func -- )
|
||||
0 dst src float-function-param
|
||||
|
|
|
@ -81,6 +81,14 @@ M: x86.64 %mark-deck
|
|||
dup load-decks-offset
|
||||
[+] card-mark <byte> MOV ;
|
||||
|
||||
M:: x86.64 %load-stack-param ( vreg rep n -- )
|
||||
rep return-reg n next-stack@ rep %copy
|
||||
dst rep return-reg rep %copy ;
|
||||
|
||||
M:: x86.64 %store-stack-param ( vreg rep n -- )
|
||||
rep return-reg src rep %copy
|
||||
n reserved-stack-space + stack@ rep return-reg rep %copy ;
|
||||
|
||||
M:: x86.64 %load-reg-param ( vreg rep reg -- )
|
||||
vreg reg rep %copy ;
|
||||
|
||||
|
|
|
@ -600,13 +600,9 @@ M:: x86 %local-allot ( dst size align offset -- )
|
|||
: return-reg ( rep -- reg )
|
||||
reg-class-of return-regs at first ;
|
||||
|
||||
:: %load-stack-param ( dst rep n -- )
|
||||
rep return-reg n next-stack@ rep %copy
|
||||
dst rep return-reg rep %copy ;
|
||||
HOOK: %load-stack-param cpu ( vreg rep n -- )
|
||||
|
||||
:: %store-stack-param ( src rep n -- )
|
||||
rep return-reg src rep %copy
|
||||
n reserved-stack-space + stack@ rep return-reg rep %copy ;
|
||||
HOOK: %store-stack-param cpu ( vreg rep n -- )
|
||||
|
||||
HOOK: %load-reg-param cpu ( vreg rep reg -- )
|
||||
|
||||
|
|
Loading…
Reference in New Issue