| 1 | #\f |
| 2 | # 05index.s |
| 3 | # |
| 4 | # OFF, INDEX and NIL |
| 5 | # |
| 6 | _OFF: |
| 7 | cvtbl (r10)+,r0 |
| 8 | bneq l0501 |
| 9 | cvtwl (r10)+,r0 |
| 10 | l0501: |
| 11 | addl2 r0,(sp) |
| 12 | jmp (r8) |
| 13 | _INX2: |
| 14 | cvtbl (r10)+,r0 |
| 15 | bneq l0502 |
| 16 | cvtwl (r10)+,r0 #r0 has size |
| 17 | l0502: |
| 18 | cvtwl (r10)+,r1 #r1 has lower bound |
| 19 | cvtwl (r10)+,r2 #r2 has upper bound |
| 20 | cvtwl (sp)+,r3 #r3 contains subscript |
| 21 | subl2 r1,r3 #r3 has base subscript |
| 22 | index r3,$0,r2,r0,$0,r1 #r1 has calculated offset |
| 23 | addl2 r1,(sp) #calculate actual address |
| 24 | jmp (r8) |
| 25 | _INX4: |
| 26 | cvtbl (r10)+,r0 |
| 27 | bneq l0503 |
| 28 | cvtwl (r10)+,r0 #r0 has size |
| 29 | l0503: |
| 30 | cvtwl (r10)+,r1 #r1 has lower bound |
| 31 | cvtwl (r10)+,r2 #r2 has upper bound |
| 32 | movl (sp)+,r3 #r3 contains subscript |
| 33 | subl2 r1,r3 #r3 has base subscript |
| 34 | index r3,$0,r2,r0,$0,r1 #r1 has calculated offset |
| 35 | addl2 r1,(sp) #calculate actual address |
| 36 | jmp (r8) |
| 37 | _NIL: |
| 38 | incl r10 |
| 39 | tstl (sp) |
| 40 | jeql l0504 |
| 41 | jmp (r8) |
| 42 | l0504: |
| 43 | movw $ENILPTR,_perrno |
| 44 | jbr error |
| 45 | _INX4P2: |
| 46 | cvtbl (r10)+,r0 #r0 has shift amount |
| 47 | cvtwl (r10)+,r2 #r2 has lower bound |
| 48 | subl3 r2,(sp)+,r1 #r1 has base subscript |
| 49 | ashl r0,r1,r1 |
| 50 | addl2 r1,(sp) |
| 51 | jmp (r8) |
| 52 | _INX2P2: |
| 53 | cvtbl (r10)+,r0 #r0 has shift amount |
| 54 | clrl r1 #clear upper half of r1 |
| 55 | subw3 (r10)+,(sp)+,r1 #r1 has base subscript |
| 56 | ashl r0,r1,r1 |
| 57 | addl2 r1,(sp) |
| 58 | jmp (r8) |