+ WORD p_execute,'EXECUTE',fasm
+ ;; ( tfa -- )
+ ;; Execute the word
+ pop rax
+ tfa2cfa rax
+ jmp qword [rax] ; goto code of that FORTH word (64 bit jump)
+
+ WORD p_exit, 'EXIT',fasm
+ ;; ( -- ) ( R: addr -- )
+ ;; Returns execution to the calling definition as per the
+ ;; return stack.
+exit:
+ popr rsi
+ next
+
+ ;; TERMINATE0 terminates the program with code 0
+ ;; ( -- )
+ WORD terminate, 'TERMINATE0',fasm
+ pop rdx
+terminate_special:
+ mov eax,60
+ syscall
+
+ WORD p_branch,'BRANCH',fasm
+ ;; ( -- )
+ ;; Using subsequent inline cell as branch offset, branch
+ ;; accordingly
+ add rsi,qword [rsi]
+ add rsi,8
+ next
+
+ WORD p_zero_branch,'0BRANCH',fasm
+ ;; ( v -- )
+ ;; Using subsequent inline cell as branch offset, branch
+ ;; accordingly if the stacked value is zero, otherwise just
+ ;; skip over the branch offset
+ pop rax
+ cmp rax,0
+ jne p_zero_branch_SKIP
+ add rsi,qword [rsi]
+p_zero_branch_SKIP:
+ add rsi,8
+ next
+
+;;; Execution semantics for a "fasm" WORD
+dofasm:
+ add rax,8
+ jmp rax