You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

504 lines
7.2 KiB

.align 2
.section .data
tape:
.zero 262144
program:
.zero 131072
ptr:
.word 0
.section .text
.global __aeabi_memclr4
__aeabi_memclr4:
.L1:
MV t5, a0
MV t6, a1
ADD t6, a0, t6
LI a0, 0
.L2:
SW zero, (t5)
ADDI t5, t5, 4
BLT t5, t6, .L2
RET
.global read_program
read_program:
.L3:
ADDI sp, sp, -160
SD fp, 32(sp)
ADDI fp, sp, 160
SD ra, -136(fp)
SD s2, -144(fp)
SD s3, -152(fp)
SD s4, -160(fp)
.L4:
LI t0, 0
SW t0, -120(fp)
ADDI sp, sp, -8
CALL getint
ADDI sp, sp, 8
SW a0, -16(fp)
LW s2, -16(fp)
SW s2, -112(fp)
SW s2, -16(fp)
J .L5
.L6:
LD s4, -160(fp)
LD s3, -152(fp)
LD s2, -144(fp)
LD ra, -136(fp)
LD fp, -128(fp)
ADDI sp, sp, 160
RET
.L5:
LW s2, -120(fp)
LW s3, -112(fp)
SLT s4, s2, s3
SW s2, -32(fp)
SW s3, -40(fp)
SW s4, -48(fp)
LW s2, -48(fp)
BGTZ s2, .L7
J .L8
.L7:
LW s3, -120(fp)
LA t2, program
LI t3, 4
MUL t3, s3, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -64(fp)
ADDI sp, sp, -8
CALL getch
ADDI sp, sp, 8
SW a0, -72(fp)
LW s4, -72(fp)
LD t4, -64(fp)
SW s4, (t4)
SW s2, -48(fp)
LW s2, -120(fp)
SW s3, -56(fp)
LI s3, 1
SW s4, -72(fp)
ADDW s4, s2, s3
SW s4, -120(fp)
SW s2, -80(fp)
SW s4, -88(fp)
J .L5
.L8:
LW s2, -120(fp)
LA t2, program
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -104(fp)
LD t4, -104(fp)
LI t0, 0
SW t0, (t4)
SW s2, -96(fp)
J .L6
.global interpret
interpret:
.L9:
ADDI sp, sp, -640
SD fp, 32(sp)
ADDI fp, sp, 640
SD ra, -616(fp)
SD s2, -624(fp)
SD s3, -632(fp)
SD s4, -640(fp)
.L10:
SD a0, -600(fp)
LI t0, 0
SW t0, -576(fp)
SD a0, (fp)
J .L11
.L12:
LD s4, -640(fp)
LD s3, -632(fp)
LD s2, -624(fp)
LD ra, -616(fp)
LD fp, -608(fp)
ADDI sp, sp, 640
RET
.L11:
LW s2, -576(fp)
LD s3, -600(fp)
MV t2, s3
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -40(fp)
LD t4, -40(fp)
LW s4, (t4)
SD s3, -32(fp)
LI s3, 0
SW s2, -24(fp)
SUB t6, s4, s3
SNEZ s2, t6
SW s2, -56(fp)
SW s4, -48(fp)
LW s2, -56(fp)
BGTZ s2, .L13
J .L14
.L13:
LW s3, -576(fp)
LD s4, -600(fp)
MV t2, s4
LI t3, 4
MUL t3, s3, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -80(fp)
SW s2, -56(fp)
LD t4, -80(fp)
LW s2, (t4)
SW s2, -592(fp)
SD s4, -72(fp)
LW s4, -592(fp)
SW s3, -64(fp)
LI s3, 62
SW s2, -88(fp)
SUB t6, s4, s3
SEQZ s2, t6
SW s2, -112(fp)
SW s4, -104(fp)
LW s2, -112(fp)
BGTZ s2, .L15
J .L16
.L14:
SW s2, -112(fp)
J .L12
.L15:
LA t5, ptr
LW s2, (t5)
LI s3, 1
ADDW s4, s2, s3
LA t5, ptr
SW s4, (t5)
SW s2, -120(fp)
SW s4, -128(fp)
J .L17
.L16:
LW s2, -592(fp)
LI s3, 60
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -136(fp)
SW s4, -144(fp)
LW s2, -144(fp)
BGTZ s2, .L18
J .L19
.L17:
LW s3, -576(fp)
LI s4, 1
SW s2, -144(fp)
ADDW s2, s3, s4
SW s2, -576(fp)
SW s2, -160(fp)
SW s3, -152(fp)
J .L11
.L18:
LA t5, ptr
LW s2, (t5)
LI s3, 1
SUB s4, s2, s3
LA t5, ptr
SW s4, (t5)
SW s2, -168(fp)
SW s4, -176(fp)
J .L20
.L19:
LW s2, -592(fp)
LI s3, 43
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -184(fp)
SW s4, -192(fp)
LW s2, -192(fp)
BGTZ s2, .L21
J .L22
.L20:
SW s2, -192(fp)
J .L17
.L21:
LA t5, ptr
LW s2, (t5)
LA t2, tape
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -208(fp)
LA t5, ptr
LW s3, (t5)
LA t2, tape
LI t3, 4
MUL t3, s3, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -224(fp)
LD t4, -224(fp)
LW s4, (t4)
SW s2, -200(fp)
LI s2, 1
SW s3, -216(fp)
ADDW s3, s4, s2
LD t4, -208(fp)
SW s3, (t4)
SW s3, -240(fp)
SW s4, -232(fp)
J .L23
.L22:
LW s2, -592(fp)
LI s3, 45
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -248(fp)
SW s4, -256(fp)
LW s2, -256(fp)
BGTZ s2, .L24
J .L25
.L23:
SW s2, -256(fp)
J .L20
.L24:
LA t5, ptr
LW s2, (t5)
LA t2, tape
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -272(fp)
LA t5, ptr
LW s3, (t5)
LA t2, tape
LI t3, 4
MUL t3, s3, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -288(fp)
LD t4, -288(fp)
LW s4, (t4)
SW s2, -264(fp)
LI s2, 1
SW s3, -280(fp)
SUB s3, s4, s2
LD t4, -272(fp)
SW s3, (t4)
SW s3, -304(fp)
SW s4, -296(fp)
J .L26
.L25:
LW s2, -592(fp)
LI s3, 46
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -312(fp)
SW s4, -320(fp)
LW s2, -320(fp)
BGTZ s2, .L27
J .L28
.L26:
SW s2, -320(fp)
J .L23
.L27:
LA t5, ptr
LW s2, (t5)
LA t2, tape
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -336(fp)
LD t4, -336(fp)
LW s3, (t4)
ADDI sp, sp, -24
SW s3, -344(fp)
LW a0, -344(fp)
CALL putch
ADDI sp, sp, 24
SW a0, -344(fp)
SW s2, -328(fp)
J .L29
.L28:
LW s2, -592(fp)
LI s3, 44
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -352(fp)
SW s4, -360(fp)
LW s2, -360(fp)
BGTZ s2, .L30
J .L31
.L29:
SW s2, -360(fp)
J .L26
.L30:
LA t5, ptr
LW s2, (t5)
LA t2, tape
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -376(fp)
ADDI sp, sp, -8
CALL getch
ADDI sp, sp, 8
SW a0, -384(fp)
LW s3, -384(fp)
LD t4, -376(fp)
SW s3, (t4)
SW s2, -368(fp)
SW s3, -384(fp)
J .L32
.L31:
LW s2, -592(fp)
LI s3, 93
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -392(fp)
SW s4, -400(fp)
LW s2, -400(fp)
BGTZ s2, .L33
J .L34
.L32:
SW s2, -400(fp)
J .L29
.L35:
LI t0, 1
SW t0, -584(fp)
J .L36
.L34:
J .L32
.L33:
LA t5, ptr
LW s2, (t5)
LA t2, tape
LI t3, 4
MUL t3, s2, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -424(fp)
LD t4, -424(fp)
LW s3, (t4)
LI s4, 0
SW s2, -416(fp)
SUB t6, s3, s4
SNEZ s2, t6
SW s2, -440(fp)
SW s3, -432(fp)
LW s2, -440(fp)
BGTZ s2, .L35
J .L34
.L36:
LW s3, -584(fp)
LI s4, 0
SW s2, -440(fp)
SLT s2, s4, s3
SW s2, -456(fp)
SW s3, -448(fp)
LW s2, -456(fp)
BGTZ s2, .L37
J .L38
.L37:
LW s3, -576(fp)
LI s4, 1
SW s2, -456(fp)
SUB s2, s3, s4
SW s2, -576(fp)
SW s3, -464(fp)
LW s3, -576(fp)
LD s4, -600(fp)
MV t2, s4
LI t3, 4
MUL t3, s3, t3
ADD t2, t3, t2
ADD t2, t2, zero
SD t2, -496(fp)
SW s2, -472(fp)
LD t4, -496(fp)
LW s2, (t4)
SW s2, -592(fp)
SD s4, -488(fp)
LW s4, -592(fp)
SW s3, -480(fp)
LI s3, 91
SW s2, -504(fp)
SUB t6, s4, s3
SEQZ s2, t6
SW s2, -520(fp)
SW s4, -512(fp)
LW s2, -520(fp)
BGTZ s2, .L39
J .L40
.L38:
SW s2, -520(fp)
J .L34
.L39:
LW s2, -584(fp)
LI s3, 1
SUB s4, s2, s3
SW s4, -584(fp)
SW s2, -528(fp)
SW s4, -536(fp)
J .L41
.L40:
LW s2, -592(fp)
LI s3, 93
SUB t6, s2, s3
SEQZ s4, t6
SW s2, -544(fp)
SW s4, -552(fp)
LW s2, -552(fp)
BGTZ s2, .L42
J .L43
.L41:
SW s2, -552(fp)
J .L36
.L42:
LW s2, -584(fp)
LI s3, 1
ADDW s4, s2, s3
SW s4, -584(fp)
SW s2, -560(fp)
SW s4, -568(fp)
J .L43
.L43:
J .L41
.global main
main:
.L44:
ADDI sp, sp, -56
SD fp, 16(sp)
ADDI fp, sp, 56
SD ra, -48(fp)
SD s2, -56(fp)
.L45:
ADDI sp, sp, -16
CALL read_program
ADDI sp, sp, 16
LA t2, program
ADD t2, t2, zero
SD t2, -8(fp)
ADDI sp, sp, -16
LD a0, -8(fp)
CALL interpret
ADDI sp, sp, 16
LI t0, 0
SW t0, -32(fp)
SD a0, -8(fp)
J .L46
.L46:
LW s2, -32(fp)
SW s2, -24(fp)
LW a0, -24(fp)
LD s2, -56(fp)
LD ra, -48(fp)
LD fp, -40(fp)
ADDI sp, sp, 56
RET