OSDN Git Service

head_addr
authorSimon Forman <sforman@hushmail.com>
Mon, 11 Nov 2019 15:51:58 +0000 (07:51 -0800)
committerSimon Forman <sforman@hushmail.com>
Mon, 11 Nov 2019 15:51:58 +0000 (07:51 -0800)
thun/asm-dump.txt
thun/compiler.markII.pl

index 3b4437a..7a60572 100644 (file)
@@ -24,7 +24,7 @@ eq_offset(C),
 add(6, 6, 1),\r
 label(C),\r
 load_word(3, 5, 0),\r
-mov(1,6),\r
+mov(1, 6),\r
 asr_imm(6, 3, 30),\r
 and_imm(6, 6, 2),\r
 sub_imm(6, 6, 2),\r
@@ -50,7 +50,8 @@ label(G),
 store_word(2, 0, 0),\r
 do_offset(H),\r
 label(I),\r
-do_offset(I),label(J),\r
+do_offset(I),\r
+label(J),\r
 symbol(J),\r
 lsl_imm(6, 2, 2),\r
 asr_imm(6, 6, 17),\r
@@ -102,4 +103,4 @@ lsl_imm(5, 2, 2),
 asr_imm(5, 5, 17),\r
 do_offset(D),\r
 label(S),\r
-expr_cell(R, 0)].
\ No newline at end of file
+expr_cell(R, 0)].\r
index 95a742c..77fffd0 100644 (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),