home *** CD-ROM | disk | FTP | other *** search
- /
- /
-
- / fxh -- array constant offset
-
- .globl consub
-
- .globl getsym
- .globl geti
- .globl error
- .globl geticon
-
- / turn constant subscripts into offset.
- / in: r3 -> symtab
- / r1 -> just beyond (
- / out:r0 has offset
-
- consub:
- mov symtab(r3),r0
- bic $!70,r0
- cmp r0,$20 / test class == array
- beq 1f
- jsr r5,error; 17.
- clr r0
- rts r5
- 1:
- mov r5,-(sp)
- mov r4,-(sp)
- mov r3,-(sp)
- mov r2,-(sp)
- clr r4 / accumulated offset
- mov symtab+2(r3),r2 / ptr to declarator
- mov (r2)+,-(sp) / dimensionality
- mov $1,r5 / prod of declarators
- 1:
- jsr r5,geticon
- br 9f
- cmp r0,(r2)
- bgt 3f
- dec r0
- bge 2f
- 3:
- jsr r5,error; 19. / out of range
- clr r0
- 2:
- mov r5,-(sp)
- mpy r0,r5
- add r5,r4
- mov (sp)+,r5
- mpy (r2)+,r5
- jsr r5,getsym
- cmp r0,$36. / comma
- bne 1f
- dec (sp)
- bgt 1b
- jsr r5,error; 18. / wrong subscript count
- br 1b
- 1:
- cmp r0,$34. / )
- beq 1f
- 9:
- jsr r5,error; 20.
- clr r0
- 1:
- cmp (sp)+,$1
- beq 1f
- jsr r5,error; 18. / subscript count
- 1:
- mov (sp)+,r2
- mov (sp)+,r3
- movb symtab+1(r3),r5
- mpy r4,r5
- mov r5,r0
- mov (sp)+,r4
- mov (sp)+,r5
- rts r5
-
-