;;; Words for stack manipulations
+ WORD p_depth,'DEPTH',fasm
+ ;; ( -- v )
+ ;; Push stack depth (before push)
+ lea rax,[DS_TOP]
+ sub rax,rsp
+ shr rax,3
+ push rax
+ next
+
WORD p_dup, 'DUP',fasm
;; ( v -- v v )
;; Duplicate top ov stack value.
push qword [rsp+rax]
next
- WORD w6.2.2300, 'TUCK',fasm
+ WORD p_tuck, 'TUCK',fasm
;; ( x1 x2 -- x2 x1 x2 )
- ;; insert the top stack value into below second stack value.
+ ;; copy the top stack value into below second stack value.
pop rax
pop rbx
push rax
push rbx
push rax
next
+
+;;; ========================================
+;;; Return stack operations
+
+ WORD p_gtR, '>R',fasm
+ ;; ( x -- ) ( R: -- x )
+ ;; Move x to the return stack.
+ pop rax
+ pushr rax
+ next
+
+ WORD p_Rgt, 'R>',fasm
+ ;; ( -- x ) ( R: x -- )
+ ;; Move x from the return stack to the data stack.
+ popr rax
+ push rax
+ next
+
+ WORD p_Rget, 'R@',fasm
+ ;; ( -- x ) ( R: x -- x )
+ ;; Copy x from the return stack to the data stack.
+ push qword [rbp]
+ next