125 lines
1.3 KiB
ArmAsm
125 lines
1.3 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ r7 -- fortran runtime
|
|
|
|
achk = 1 / 1 to check array bounds
|
|
.globl lvalp
|
|
.globl rval1p
|
|
.globl rval2p
|
|
.globl rval4p
|
|
.globl rval8p
|
|
.globl alval
|
|
.globl alvalp
|
|
.globl arval
|
|
.globl arvalp
|
|
|
|
.globl rerr
|
|
|
|
lvalp:
|
|
mov r3,r0
|
|
add (r4)+,r0
|
|
mov (r0)+,-(sp)
|
|
jmp *(r4)+
|
|
|
|
rval1p:
|
|
mov r3,r0
|
|
add (r4)+,r0
|
|
movb *(r0)+,-(sp)
|
|
jmp *(r4)+
|
|
|
|
rval2p:
|
|
mov r3,r0
|
|
add (r4)+,r0
|
|
mov *(r0)+,-(sp)
|
|
jmp *(r4)+
|
|
|
|
rval4p:
|
|
mov r3,r0
|
|
add (r4)+,r0
|
|
mov (r0),r0
|
|
cmp (r0)+,(r0)+
|
|
mov -(r0),-(sp)
|
|
mov -(r0),-(sp)
|
|
jmp *(r4)+
|
|
|
|
rval8p:
|
|
setd
|
|
mov r3,r0
|
|
add (r4)+,r0
|
|
movf *(r0)+,fr0
|
|
movf fr0,-(sp)
|
|
jmp *(r4)+
|
|
|
|
alval:
|
|
jsr r5,getsub; 1
|
|
mov (r4)+,-(sp)
|
|
add r1,(sp)
|
|
jmp *(r4)+
|
|
|
|
arvalp:
|
|
jsr r5,getsub; 0
|
|
mov r3,r2
|
|
add (r4)+,r2
|
|
mov (r2),r2
|
|
br 1f
|
|
|
|
arval:
|
|
jsr r5,getsub; 1
|
|
mov (r4)+,r2
|
|
1:
|
|
add r2,r1
|
|
mov -(r0),r2
|
|
asr r2
|
|
bcc 1f
|
|
movb (r1),-(sp)
|
|
jmp *(r4)+
|
|
1:
|
|
add (r0),r1
|
|
1:
|
|
mov -(r1),-(sp)
|
|
sob r2,1b
|
|
jmp *(r4)+
|
|
|
|
getsub:
|
|
tst (sp)+
|
|
mov (r4)+,r0
|
|
mov (r0)+,r2
|
|
clr r1
|
|
tst (r0)+
|
|
1:
|
|
tst (sp)+
|
|
dec (sp)
|
|
add (sp)+,r1
|
|
mpy (r0)+,r1
|
|
sob r2,1b
|
|
|
|
tst (r5)+
|
|
beq 2f
|
|
mov r1,-(sp)
|
|
mov -2(r4),r0
|
|
mov (r0)+,r2
|
|
inc r2
|
|
mov $1,r1
|
|
1:
|
|
mpy (r0)+,r1
|
|
sob r2,1b
|
|
.if achk
|
|
cmp r1,(sp)
|
|
bhi 1f
|
|
jsr r5,rerr; 15.
|
|
.endif
|
|
1:
|
|
mov (sp)+,r1
|
|
|
|
2:
|
|
jmp (r5)
|
|
|
|
alvalp:
|
|
jsr r5,getsub; 0
|
|
mov r3,r0
|
|
add (r4)+,r0
|
|
mov (r0),-(sp)
|
|
add r1,(sp)
|
|
jmp *(r4)+
|