cpu.x86: get rid of this extra-stack-space nonsense
parent
3f8e13bf66
commit
7ff309d50e
|
@ -21,7 +21,7 @@ M: ##stack-frame compute-stack-frame*
|
|||
|
||||
: vm-frame-required ( -- )
|
||||
frame-required
|
||||
stack-frame new t >>calls-vm? request-stack-frame ;
|
||||
stack-frame new vm-stack-space >>params request-stack-frame ;
|
||||
|
||||
M: ##call-gc compute-stack-frame* drop vm-frame-required ;
|
||||
M: ##box compute-stack-frame* drop vm-frame-required ;
|
||||
|
|
|
@ -96,8 +96,7 @@ M: array dlsym-valid? '[ _ dlsym ] any? ;
|
|||
: <alien-stack-frame> ( stack-size return -- stack-frame )
|
||||
stack-frame new
|
||||
swap return-size >>return
|
||||
swap >>params
|
||||
t >>calls-vm? ;
|
||||
swap >>params ;
|
||||
|
||||
: emit-stack-frame ( stack-size params -- )
|
||||
[ return>> ] [ abi>> ] bi
|
||||
|
|
|
@ -9,8 +9,7 @@ TUPLE: stack-frame
|
|||
{ params integer }
|
||||
{ return integer }
|
||||
{ spill-area-size integer }
|
||||
{ total-size integer }
|
||||
{ calls-vm? boolean } ;
|
||||
{ total-size integer } ;
|
||||
|
||||
! Stack frame utilities
|
||||
: return-offset ( -- offset )
|
||||
|
@ -28,5 +27,4 @@ TUPLE: stack-frame
|
|||
[ [ params>> ] bi@ max >>params ]
|
||||
[ [ return>> ] bi@ max >>return ]
|
||||
[ [ spill-area-size>> ] bi@ max >>spill-area-size ]
|
||||
[ [ calls-vm?>> ] bi@ or >>calls-vm? ]
|
||||
} 2cleave ;
|
||||
|
|
|
@ -215,6 +215,11 @@ HOOK: machine-registers cpu ( -- assoc )
|
|||
! Callbacks are not allowed to clobber this
|
||||
HOOK: frame-reg cpu ( -- reg )
|
||||
|
||||
! Parameter space to reserve in anything making VM calls
|
||||
HOOK: vm-stack-space cpu ( -- n )
|
||||
|
||||
M: object vm-stack-space 0 ;
|
||||
|
||||
! Specifies if %slot, %set-slot and %write-barrier accept the
|
||||
! 'scale' and 'tag' parameters, and if %load-memory and
|
||||
! %store-memory work
|
||||
|
|
|
@ -39,8 +39,6 @@ M: x86.32 %set-vm-field ( dst field -- )
|
|||
M: x86.32 %vm-field-ptr ( dst field -- )
|
||||
[ 0 MOV ] dip rc-absolute-cell rel-vm ;
|
||||
|
||||
M: x86.32 extra-stack-space calls-vm?>> 16 0 ? ;
|
||||
|
||||
M: x86.32 %mark-card
|
||||
drop HEX: ffffffff [+] card-mark <byte> MOV
|
||||
building get pop
|
||||
|
@ -71,6 +69,8 @@ M: x86.32 pic-tail-reg EDX ;
|
|||
|
||||
M: x86.32 reserved-stack-space 0 ;
|
||||
|
||||
M: x86.32 vm-stack-space 16 ;
|
||||
|
||||
: save-vm-ptr ( n -- )
|
||||
stack@ 0 MOV 0 rc-absolute-cell rel-vm ;
|
||||
|
||||
|
|
|
@ -31,8 +31,6 @@ M: x86.64 rs-reg R15 ;
|
|||
M: x86.64 stack-reg RSP ;
|
||||
M: x86.64 frame-reg RBP ;
|
||||
|
||||
M: x86.64 extra-stack-space drop 0 ;
|
||||
|
||||
M: x86.64 machine-registers
|
||||
{
|
||||
{ int-regs { RAX RCX RDX RBX RBP RSI RDI R8 R9 R10 R11 R12 } }
|
||||
|
|
|
@ -28,12 +28,9 @@ HOOK: stack-reg cpu ( -- reg )
|
|||
|
||||
HOOK: reserved-stack-space cpu ( -- n )
|
||||
|
||||
HOOK: extra-stack-space cpu ( stack-frame -- n )
|
||||
|
||||
: stack@ ( n -- op ) stack-reg swap [+] ;
|
||||
|
||||
: special-offset ( m -- n )
|
||||
stack-frame get extra-stack-space +
|
||||
reserved-stack-space + ;
|
||||
|
||||
: spill@ ( n -- op ) spill-offset special-offset stack@ ;
|
||||
|
@ -50,8 +47,7 @@ HOOK: extra-stack-space cpu ( stack-frame -- n )
|
|||
: align-stack ( n -- n' ) 16 align ;
|
||||
|
||||
M: x86 stack-frame-size ( stack-frame -- i )
|
||||
[ (stack-frame-size) ]
|
||||
[ extra-stack-space ] bi +
|
||||
(stack-frame-size)
|
||||
reserved-stack-space +
|
||||
3 cells +
|
||||
align-stack ;
|
||||
|
|
Loading…
Reference in New Issue