BSD 4 release
[unix-history] / usr / src / cmd / px / 05index.s
CommitLineData
b202b2da 1#\f
31cef89c
BJ
2# Copyright (c) 1979 Regents of the University of California
3#
4# char sccsid[] = "@(#)05index.s 4.1 10/10/80";
b202b2da
CH
5#
6# OFF, INDEX and NIL
7#
8_OFF:
9 cvtbl (r10)+,r0
10 bneq l0501
31cef89c 11 movzwl (r10)+,r0
b202b2da
CH
12l0501:
13 addl2 r0,(sp)
14 jmp (r8)
15_INX2:
16 cvtbl (r10)+,r0
17 bneq l0502
18 cvtwl (r10)+,r0 #r0 has size
19l0502:
31cef89c
BJ
20 clrl r3 #r3 has base subscript
21 subw3 (r10)+,(sp)+,r3
22 blss esubscr #check lower bound
23 cmpw r3,(r10)+ #check upper bound
24 bgtru esubscr
25 mull2 r0,r3 #calc byte offset
26 addl2 r3,(sp) #calculate actual address
b202b2da
CH
27 jmp (r8)
28_INX4:
29 cvtbl (r10)+,r0
30 bneq l0503
31 cvtwl (r10)+,r0 #r0 has size
32l0503:
33 cvtwl (r10)+,r1 #r1 has lower bound
31cef89c
BJ
34 movzwl (r10)+,r2 #r2 has upper-lower bound
35 subl3 r1,(sp)+,r3 #r3 has base subscript
36 cmpl r3,r2 #check for out of bounds
37 bgtru esubscr
38 mull2 r0,r3 #calc byte offset
39 addl2 r3,(sp) #calculate actual address
b202b2da 40 jmp (r8)
31cef89c
BJ
41esubscr:
42 movl $ESUBSCR,_perrno
43 jbr error
b202b2da
CH
44_NIL:
45 incl r10
46 tstl (sp)
47 jeql l0504
48 jmp (r8)
49l0504:
50 movw $ENILPTR,_perrno
51 jbr error
52_INX4P2:
53 cvtbl (r10)+,r0 #r0 has shift amount
54 cvtwl (r10)+,r2 #r2 has lower bound
55 subl3 r2,(sp)+,r1 #r1 has base subscript
56 ashl r0,r1,r1
57 addl2 r1,(sp)
58 jmp (r8)
59_INX2P2:
60 cvtbl (r10)+,r0 #r0 has shift amount
31cef89c
BJ
61 cvtwl (r10)+,r1 #r1 has base array value
62 cvtwl (sp)+,r2 #r2 has subscript value
63 subl2 r1,r2 #r2 has element offset
64 ashl r0,r2,r2 #r2 has byte offset
65 addl2 r2,(sp)
b202b2da 66 jmp (r8)