head_addr

This commit is contained in:
Simon Forman
2019-11-11 07:51:58 -08:00
parent c3e44e2bf8
commit 80d127788e
2 changed files with 8 additions and 9 deletions
+2 -1
View File
@@ -50,7 +50,8 @@ label(G),
store_word(2, 0, 0), store_word(2, 0, 0),
do_offset(H), do_offset(H),
label(I), label(I),
do_offset(I),label(J), do_offset(I),
label(J),
symbol(J), symbol(J),
lsl_imm(6, 2, 2), lsl_imm(6, 2, 2),
asr_imm(6, 6, 17), asr_imm(6, 6, 17),
+4 -6
View File
@@ -109,12 +109,8 @@ Mark II
chain_link(TOS, TEMP3), chain_link(TOS, TEMP3),
jump(Done), % Rely on mainloop::Done to write TOS to RAM. jump(Done), % Rely on mainloop::Done to write TOS to RAM.
definition(Dup) definition(Dup),
]),[ head_addr(TOS, TermAddr),
% TermAddr := TOS << 2 >> 17
lsl_imm(TermAddr, TOS, 2),
asr_imm(TermAddr, TermAddr, 17)
],⟐([
jump(PUSH) jump(PUSH)
]),[ ]),[
label(Expression), label(Expression),
@@ -187,6 +183,8 @@ language.
⟐(definition(Name)) --> [label(Name), symbol(Name)]. ⟐(definition(Name)) --> [label(Name), symbol(Name)].
⟐(head_addr(Pair, HeadAddr)) --> [lsl_imm(HeadAddr, Pair, 2), asr_imm(HeadAddr, HeadAddr, 17)].
do :- do :-
compile_program(Binary), compile_program(Binary),