Forth の direct threaded code
こんなぐあいに r15 に _doLIST のアドレスをいれておいて call してる。これだと無駄にレジスタ使っちゃうのが問題(Forth の実装でそんなにレジスタ使ったりしないけどね)。call _doLIST としたいところなんだけど、そのやり方が分からない。
;; nop x 5 call r15
DOCOL_CODE EQU 0xd7ff419090909090
%macro NEXT 0
lodsq
jmp rax
%endmacro
defcode "EXIT", 0, exit
POPRSP rsi
NEXT
defword ":", 0, colon
dq _WORD
dq header
;; あらかじめ mov r15, _doLIST してある。
dq lit
dq DOCOL_CODE
dq comma
dq latest, fetch, hidden
dq rbrac
dq exit
_doLIST:
PUSHRSP rsi
pop rsi
NEXT
_start:
mov r15, _doLIST
0 件のコメント:
コメントを投稿