end if
previous_word = label#_TFA
;; PFA
+label#_pCFA:
dq label#_CFA ; link to CFA of word
dq flags + 0
label#_PFA:
db name
pname: db 0 ; extra NUL byte
;; align 8
+label#_pTFA:
dq label#_TFA ; link to TFA of word
label#_OFF:
dq offset + 0 ; The DOES offset. Defaults to 0.
dq doforth
else
if doer in <fasm>
- dq label#_DFA
+ dq dofasm ; label#_DFA
else
dq doer
end if
macro tfa2cfa reg {
mov reg,qword [reg+8]
}
+macro tfa2does reg {
+ tfa2cfa reg
+ sub reg,8
+}
macro tfa2dfa reg {
tfa2cfa reg
add reg,8
}
+macro tfa2flags reg {
+ add reg,16
+}
macro tfa2pfa reg {
add reg,24
}
dataend:
}
+;;; ========================================
+;;; The BRANCH macro lays out FORTH words BRANCH and 0BRANCH with offset
+macro BRANCH zero,label {
+ if zero in <0>
+ dq p_zero_branch
+ else
+ dq p_zero_branch
+ end if
+ dq label - $ - 8
+}