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

View File

@ -24,7 +24,7 @@ eq_offset(C),
add(6, 6, 1),
label(C),
load_word(3, 5, 0),
mov(1,6),
mov(1, 6),
asr_imm(6, 3, 30),
and_imm(6, 6, 2),
sub_imm(6, 6, 2),
@ -50,7 +50,8 @@ label(G),
store_word(2, 0, 0),
do_offset(H),
label(I),
do_offset(I),label(J),
do_offset(I),
label(J),
symbol(J),
lsl_imm(6, 2, 2),
asr_imm(6, 6, 17),
@ -102,4 +103,4 @@ lsl_imm(5, 2, 2),
asr_imm(5, 5, 17),
do_offset(D),
label(S),
expr_cell(R, 0)].
expr_cell(R, 0)].

View File

@ -109,12 +109,8 @@ Mark II
chain_link(TOS, TEMP3),
jump(Done), % Rely on mainloop::Done to write TOS to RAM.
definition(Dup)
]),[
% TermAddr := TOS << 2 >> 17
lsl_imm(TermAddr, TOS, 2),
asr_imm(TermAddr, TermAddr, 17)
],([
definition(Dup),
head_addr(TOS, TermAddr),
jump(PUSH)
]),[
label(Expression),
@ -187,6 +183,8 @@ language.
(definition(Name)) --> [label(Name), symbol(Name)].
(head_addr(Pair, HeadAddr)) --> [lsl_imm(HeadAddr, Pair, 2), asr_imm(HeadAddr, HeadAddr, 17)].
do :-
compile_program(Binary),