BSD 3 development
[unix-history] / usr / src / cmd / px / 05index.s
CommitLineData
b202b2da
CH
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
10l0501:
11 addl2 r0,(sp)
12 jmp (r8)
13_INX2:
14 cvtbl (r10)+,r0
15 bneq l0502
16 cvtwl (r10)+,r0 #r0 has size
17l0502:
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
29l0503:
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)
42l0504:
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)