added CFA>FLAGS@ helper
[rrq/rrqforth.git] / memory.asm
index 6e945ff3331fbe6fd5639f33806dbb795545dde3..171ac487c8a19b40a533c51a1e62e2b5dd73c740 100644 (file)
@@ -1,5 +1,36 @@
 ;;; This file defines "memory access words"
 
+       WORD p_cfa2flags_get,'CFA>FLAGS@',fasm
+       ;; ( cfa -- flags )
+       pop rax
+       cfa2tfa rax
+       push qword[rax+16]
+       next
+
+       WORD p_tfa2cfa,'TFA>CFA',fasm
+       ;; ( tfa -- cfa )
+       ;; Advance a word tfa pointer to the cfa field
+       mov rax,qword[rsp]
+       tfa2cfa rax
+       mov qword [rsp],rax
+       next
+       
+       WORD p_tfa2dfa,'TFA>DFA',fasm
+       ;; ( tfa -- dfa )
+       ;; Advance a word tfa pointer to the dfa field
+       mov rax,qword[rsp]
+       tfa2dfa rax
+       mov qword [rsp],rax
+       next
+
+       WORD p_dfa2tfa,'DFA>TFA',fasm
+       ;; ( dfa -- tfa )
+       ;; Advance a word tfa pointer to the dfa field
+       mov rax,qword[rsp]
+       mov rax,qword [rax-24]  ; tfa
+       mov qword [rsp],rax
+       next
+
        WORD p_get, '@',fasm
        ;; ( addr -- v )
        ;; Load value v from address addr