added max and min
[rrq/rrqforth.git] / stack.asm
index 91be19d71963d217ee453051f14abdc80cc9d2b2..637d8aca69da1a778e004f4cee3d4694d089ddaa 100644 (file)
--- a/stack.asm
+++ b/stack.asm
@@ -1,5 +1,23 @@
 ;;; Words for stack manipulations
        
+       WORD p_dsp,'D[n]',fasm
+       ;; ( n -- a )
+       ;; Push the address of the n:th cell below n onto the stack
+       pop rax
+       shl rax,3
+       add rax,rsp
+       push rax
+       next
+
+       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.
@@ -110,9 +128,9 @@ p_roll_eq:
        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
@@ -123,7 +141,7 @@ p_roll_eq:
 ;;; ========================================
 ;;; Return stack operations
 
-       WORD p_ltR, '>R',fasm
+       WORD p_gtR, '>R',fasm
        ;; ( x -- ) ( R: -- x )
        ;; Move x to the return stack.
        pop rax
@@ -142,3 +160,17 @@ p_roll_eq:
        ;; Copy x from the return stack to the data stack.
        push qword [rbp]
        next
+
+       WORD p_rbp,'RSP',fasm
+       ;; Push the return stack pointer to the data stack
+       push rbp
+       next
+       
+       WORD p_rbpn,'R[n]',fasm
+       ;; ( n -- a )
+       ;; push the address of the n:th cell on the return stack
+       mov rax,qword [rsp]
+       shl rax,3
+       add rax,rbp
+       mov qword [rsp],rax
+       next