Simple push of empty list.
This commit is contained in:
parent
3126dce307
commit
c3e44e2bf8
|
|
@ -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)].
|
||||||
|
|
@ -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.
Loading…
Reference in New Issue