 
 : stack-frame-size ( -- n ) 4 bootstrap-cells ;
 : volatile-regs ( -- seq ) { X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 } ;
+! windows arm - X18 is non-volatile https://docs.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-160
 : nv-regs ( -- seq ) { X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 } ;
 
 ! callee-save = non-volatile aka call-preserved



! https://en.wikichip.org/wiki/arm/aarch64
! Generally, X0 through X18 can corrupt while X19-X29 must be preserved
! Register   Role    Requirement
! X0 -  X7   Parameter/result registers   Can Corrupt
! X8         Indirect result location register
! X9 -  X15  Temporary registers
! X16 - X17  Intra-procedure call temporary
! X18        Platform register, otherwise temporary, DONT USE

! X19 - X29    Callee-saved register    Must preserve
! X29 - frame pointer register, must always be valid
! X30    Link Register    Can Corrupt
! 16-byte stack alignment

: arg1 ( -- reg ) X0 ;
: arg2 ( -- reg ) X1 ;
: arg3 ( -- reg ) X2 ;
: arg4 ( -- reg ) X3 ;
: red-zone-size ( -- n ) 128 ;

: shift-arg ( -- reg ) X1 ;
: div-arg ( -- reg ) X0 ;

: temp1 ( -- reg ) X10 ;
: temp2 ( -- reg ) X11 ;
: temp3 ( -- reg ) X12 ;


! : pic-tail-reg ( -- reg ) RBX ;
