+ WORD p_dodoes,'doDOES',dovariable
+ ;; Execution semantics for DOES>
+ ;; [cfa-8] holds the adjustment offset ("does offset")
+dodoes:
+ pushr rsi
+ lea rsi, [rax+8] ; rsi = the DFA of the rax word
+ add rsi,qword [rax-8] ; adjust rsi by the "does offset'
+ next
+
+ WORD p_dovariable,'doVARIABLE',dovariable
+ ;; Execution semantics for a variable ( -- addr )
+ ;; rax points to CFA field
+dovariable:
+ lea rax, [rax+8] ; rsi = the DFA of the rax word
+ push rax
+ next
+
+ WORD p_dovalue,'doVALUE',dovariable
+ ;; Execution semantics for a value constant ( -- v )
+ ;; rax points to CFA field
+dovalue:
+ lea rax, [rax+8] ; rsi = the DFA of the rax word
+ push qword [rax]
+ next
+
+ WORD p_dostring,'doSTRING',dovariable
+ ;; Execution semantics for a string constant ( -- addr n )
+ ;; rax points to CFA field
+dostring:
+ lea rax, [rax+8] ; rsi = the DFA of the rax word
+ pushpname rax
+ next
+
+ WORD p_dowordlist,'doWORDLIST',dovariable
+ ;; Execution semantics for DOES>
+ ;; [cfa-8] holds the adjustment offset ("does offset")
+dowordlist:
+ pushr rsi
+ lea rsi, [rax+8] ; rsi = the DFA of the rax word
+ add rsi,qword [rax-8] ; adjust rsi by the "does offset'
+ next
+
+
+include 'syscalls.asm'
+
+;;; ========================================
+;;; The stacks are placed here.
+
+ segment readable writable
+
+ WORD return_stack,'RETURN-STACK',dovariable