Simple push of empty list.

This commit is contained in:
Simon Forman 2019-11-11 07:45:22 -08:00
parent 3126dce307
commit c3e44e2bf8
3 changed files with 40 additions and 33 deletions

View File

@ -5,13 +5,13 @@ label(A),
mov_imm(0, 0), mov_imm(0, 0),
store_word(0, 0, 0), store_word(0, 0, 0),
mov_imm(0, 4096), mov_imm(0, 4096),
mov_imm(1, R), mov_imm(1, S),
mov_imm(2, 0), mov_imm(2, 0),
mov_imm(3, 0), mov_imm(3, 0),
store_word(2, 0, 0), store_word(2, 0, 0),
label(F), label(H),
sub_imm(1, 1, 0), sub_imm(1, 1, 0),
eq_offset(G), eq_offset(I),
load_word(4, 1, 0), load_word(4, 1, 0),
lsl_imm(5, 4, 2), lsl_imm(5, 4, 2),
asr_imm(5, 5, 17), asr_imm(5, 5, 17),
@ -24,8 +24,7 @@ eq_offset(C),
add(6, 6, 1), add(6, 6, 1),
label(C), label(C),
load_word(3, 5, 0), load_word(3, 5, 0),
mov(1, mov(1,6),
6),
asr_imm(6, 3, 30), asr_imm(6, 3, 30),
and_imm(6, 6, 2), and_imm(6, 6, 2),
sub_imm(6, 6, 2), sub_imm(6, 6, 2),
@ -36,68 +35,71 @@ and(6, 6, 3),
do(6), do(6),
label(D), label(D),
sub_imm(0, 0, 4), sub_imm(0, 0, 4),
sub_imm(5, 5, 0),
eq_offset(F),
sub(2, 5, 0), sub(2, 5, 0),
hi_offset(E), hi_offset(E),
and_imm(2, 2, 32767), and_imm(2, 2, 32767),
label(E), label(E),
lsl_imm(2, 2, 15), lsl_imm(2, 2, 15),
ior_imm(2, 2, 4), ior_imm(2, 2, 4),
label(P),
store_word(2, 0, 0),
do_offset(F),
label(G),
do_offset(G), do_offset(G),
label(H), label(F),
symbol(H), mov_imm(2, 4),
label(G),
store_word(2, 0, 0),
do_offset(H),
label(I),
do_offset(I),label(J),
symbol(J),
lsl_imm(6, 2, 2), lsl_imm(6, 2, 2),
asr_imm(6, 6, 17), asr_imm(6, 6, 17),
eq_offset(I), eq_offset(K),
add(6, 6, 0), add(6, 6, 0),
label(I), label(K),
lsl_imm(2, 2, 17), lsl_imm(2, 2, 17),
asr_imm(2, 2, 17), asr_imm(2, 2, 17),
eq_offset(J), eq_offset(L),
add(2, 2, 0), add(2, 2, 0),
label(J), label(L),
load_word(7, 2, 0), load_word(7, 2, 0),
lsl_imm(8, 7, 2), lsl_imm(8, 7, 2),
asr_imm(8, 8, 17), asr_imm(8, 8, 17),
eq_offset(K), eq_offset(M),
add(8, 8, 2), add(8, 8, 2),
label(K), label(M),
lsl_imm(9, 7, 17), lsl_imm(9, 7, 17),
asr_imm(9, 9, 17), asr_imm(9, 9, 17),
eq_offset(L), eq_offset(N),
add(9, 9, 2), add(9, 9, 2),
label(L), label(N),
sub_imm(0, 0, 4), sub_imm(0, 0, 4),
sub_imm(8, 8, 0), sub_imm(8, 8, 0),
eq_offset(M), eq_offset(O),
sub(8, 8, 0), sub(8, 8, 0),
and_imm(8, 8, 32767), and_imm(8, 8, 32767),
label(M), label(O),
sub_imm(6, 6, 0), sub_imm(6, 6, 0),
eq_offset(N), eq_offset(P),
sub(6, 6, 0), sub(6, 6, 0),
and_imm(6, 6, 32767), and_imm(6, 6, 32767),
label(N), label(P),
lsl_imm(8, 8, 15), lsl_imm(8, 8, 15),
ior(8, 8, 6), ior(8, 8, 6),
store_word(8, 0, 0), store_word(8, 0, 0),
sub_imm(0, 0, 4), sub_imm(0, 0, 4),
sub_imm(9, 9, 0), sub_imm(9, 9, 0),
eq_offset(O), eq_offset(Q),
sub(9, 9, 0), sub(9, 9, 0),
and_imm(9, 9, 32767), and_imm(9, 9, 32767),
label(O), label(Q),
mov_imm_with_shift(2, 2), mov_imm_with_shift(2, 2),
ior(2, 2, 9), ior(2, 2, 9),
do_offset(P), do_offset(G),
label(Q), label(R),
symbol(Q), symbol(R),
lsl_imm(5, 2, lsl_imm(5, 2, 2),
2),
asr_imm(5, 5, 17), asr_imm(5, 5, 17),
do_offset(D), do_offset(D),
label(R), label(S),
expr_cell(Q, 0)]. expr_cell(R, 0)].

View File

@ -62,7 +62,8 @@ Mark II
% going into push we have the term % going into push we have the term
label(PUSH), label(PUSH),
% push2(TOS, TEMP1, SP), % stack = TERM, stack % push2(TOS, TEMP1, SP), % stack = TERM, stack
incr(SP) incr(SP),
if_zero(TermAddr, JustPushEmptyList)
]),[ ]),[
% SP points to the future home of the new stack cell. % SP points to the future home of the new stack cell.
sub(TOS, TermAddr, SP), % TOS := &temp - sp sub(TOS, TermAddr, SP), % TOS := &temp - sp
@ -74,6 +75,10 @@ Mark II
% Combine with the offset to the previous stack cell. % Combine with the offset to the previous stack cell.
lsl_imm(TOS, TOS, 15), % TOS := TOS << 15 lsl_imm(TOS, TOS, 15), % TOS := TOS << 15
ior_imm(TOS, TOS, 4), % TOS := TOS | 4 ior_imm(TOS, TOS, 4), % TOS := TOS | 4
do_offset(Done),
label(JustPushEmptyList),
mov_imm(TOS, 4), % TOS is a pair record with 0 as the head addr
% and the previous word in RAM as tail addr.
label(Done), label(Done),
store_word(TOS, SP, 0), % RAM[SP] := TOS store_word(TOS, SP, 0), % RAM[SP] := TOS

Binary file not shown.