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

View File

@ -62,7 +62,8 @@ Mark II
% going into push we have the term
label(PUSH),
% 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.
sub(TOS, TermAddr, SP), % TOS := &temp - sp
@ -74,6 +75,10 @@ Mark II
% Combine with the offset to the previous stack cell.
lsl_imm(TOS, TOS, 15), % TOS := TOS << 15
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),
store_word(TOS, SP, 0), % RAM[SP] := TOS

Binary file not shown.