145 lines
1.6 KiB
ArmAsm
145 lines
1.6 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ f45 -- constant pool
|
|
|
|
.globl constn
|
|
.globl evalcon
|
|
|
|
.globl error
|
|
.globl perror
|
|
.globl code
|
|
.globl getcon
|
|
.globl setln
|
|
.globl getln
|
|
.globl xbuf
|
|
.globl symbuf
|
|
.globl negflg
|
|
|
|
constn:
|
|
jsr r5,setln
|
|
mov $xbuf+518.,r3 / pool max pointer
|
|
mov $ibuf+518.,r4 / pool pointer pointer
|
|
1:
|
|
jsr r5,getln
|
|
br 1f
|
|
cmp r0,$'c
|
|
bne 1b
|
|
jsr r5,packcon
|
|
mov r2,-(r4) / put p ptr in p p ptr
|
|
cmp r3,r4
|
|
blo 1b
|
|
jsr r5,error; 99.
|
|
jsr r5,perror
|
|
1:
|
|
mov $xbuf+518.,r2
|
|
1:
|
|
cmp r2,r3
|
|
bhis 1f
|
|
mov $ibuf+518.,r1
|
|
2:
|
|
cmp r1,r4
|
|
blo 2f
|
|
cmp -(r1),r2
|
|
bne 2b
|
|
mov r1,r0
|
|
sub $ibuf+516.,r0
|
|
asr r0
|
|
neg r0
|
|
jsr r5,code
|
|
<c%d:\n\0>; .even
|
|
r0
|
|
br 2b
|
|
2:
|
|
mov (r2)+,r0
|
|
jsr r5,code
|
|
< %o\n\0>; .even
|
|
r0
|
|
br 1b
|
|
1:
|
|
rts r5
|
|
|
|
packcon:
|
|
mov $line,r1
|
|
jsr r5,evalcon
|
|
mov r1,-(sp)
|
|
mov r3,-(sp)
|
|
sub r2,(sp)
|
|
asr (sp)
|
|
mov r2,-(sp)
|
|
mov $xbuf+518.,r2
|
|
1:
|
|
mov (sp),r3
|
|
mov r2,r1
|
|
tst (r2)+
|
|
mov 2(sp),r0
|
|
2:
|
|
cmp (r1)+,(r3)+
|
|
bne 1b
|
|
dec r0
|
|
bgt 2b
|
|
tst -(r2)
|
|
mov (sp)+,r3
|
|
asl (sp)
|
|
add r2,(sp)
|
|
cmp (sp),r3
|
|
blos 1f
|
|
mov (sp),r3 / eureka
|
|
1:
|
|
tst (sp)+
|
|
mov (sp)+,r1
|
|
rts r5
|
|
|
|
evalcon:
|
|
cmpb efno,$5
|
|
bne 2f
|
|
movb efno+1,r0
|
|
mov r3,r2
|
|
br 1f
|
|
2:
|
|
jsr r5,getcon
|
|
tst negflg
|
|
beq 2f
|
|
negf fr0
|
|
negf fr1
|
|
2:
|
|
mov r3,r2
|
|
mov efno,r0
|
|
mov r0,r1
|
|
clrb r0
|
|
swab r0
|
|
bic $!7,r1
|
|
cmpb r1,$realcon
|
|
beq 3f
|
|
cmpb r1,$cplxcon
|
|
beq 2f
|
|
setl
|
|
movfi r0,symbuf+1
|
|
seti
|
|
mov $symbuf+5,r1
|
|
sub r0,r1
|
|
br 1f
|
|
2:
|
|
mov $symbuf+1,r1
|
|
movf fr1,symbuf+1
|
|
cmp r0,$8
|
|
beq 2f
|
|
movf fr0,symbuf+9.
|
|
br 1f
|
|
2:
|
|
movf fr0,symbuf+5
|
|
br 1f
|
|
3:
|
|
movf fr0,symbuf+1
|
|
mov $symbuf+1,r1
|
|
1:
|
|
movb (r1)+,(r3)+
|
|
dec r0
|
|
bgt 1b
|
|
bit $1,r3
|
|
beq 1f
|
|
clrb (r3)+
|
|
1:
|
|
rts r5
|
|
|