diff --git a/thun/asm-dump.txt b/thun/asm-dump.txt index 3b4437a..7a60572 100644 --- a/thun/asm-dump.txt +++ b/thun/asm-dump.txt @@ -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)]. \ No newline at end of file +expr_cell(R, 0)]. diff --git a/thun/compiler.markII.pl b/thun/compiler.markII.pl index 95a742c..77fffd0 100644 --- a/thun/compiler.markII.pl +++ b/thun/compiler.markII.pl @@ -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),