BSD 3 development
[unix-history] / usr / src / cmd / px / 25set.s
CommitLineData
b202b2da
CH
1#\f
2# 25set.s
3#
4# SET OPERATIONS
5#
6_ADDT:
7 cvtbl (r10)+,r0
8 bneq l2501
9 cvtwl (r10)+,r0
10l2501:
11 blbc r0,l2502
12 incl r0 #r0 has number of bytes in set
13l2502:
14 addl3 sp,r0,r1 #r1 has pointer to second set
15 ashl $-1,r0,r0 #r0 has number of words in set
16l2503:
17 bisw2 (sp)+,(r1)+
18 sobgtr r0,l2503
19 jmp (r8)
20_SUBT:
21 cvtbl (r10)+,r0
22 bneq l2504
23 cvtwl (r10)+,r0
24l2504:
25 blbc r0,l2505
26 incl r0 #r0 has number of bytes in set
27l2505:
28 addl3 sp,r0,r1 #r1 has pointer to second set
29 ashl $-1,r0,r0 #r0 has number of words in set
30l2506:
31 bicw2 (sp)+,(r1)+
32 sobgtr r0,l2506
33 bicw2 (r10)+,-(r1)
34 jmp (r8)
35_MULT:
36 cvtbl (r10)+,r0
37 bneq l2507
38 cvtwl (r10)+,r0
39l2507:
40 blbc r0,l2508
41 incl r0 #r0 has number of bytes in set
42l2508:
43 addl3 sp,r0,r1 #r1 has pointer to second set
44 ashl $-1,r0,r0 #r0 has number of words in set
45l2509:
46 mcomw (sp)+,r3
47 bicw2 r3,(r1)+
48 sobgtr r0,l2509
49 jmp (r8)
50_CARD:
51 cvtbl (r10)+,r0 #r0 has number of bytes in set
52 bneq l2510
53 cvtwl (r10)+,r0
54l2510:
55 blbc r0,l2511
56 incl r0
57l2511:
58 addl3 r0,sp,r4 #r4 has new stack addr
59 ashl $3,r0,r0 #r0 has number of bits in set
60 mnegl $1,r1 #will init r1 to zero
61 mnegl $1,r5 #will init r2 to zero
62l2512:
63 incl r1 #count found element
64 incl r5 #advance to next field position
65l2521:
66 ffs r5,$32,(sp),r5 #find next set bit
67 beql l2521 #nothing found, so continue
68 cmpl r5,r0 #check for end of field
69 blss l2512 #element found, so count and continue
70 movl r4,sp #clear stack
71 movw r1,-(sp) #put answer on stack
72 jmp (r8)
73_CTTOT:
74 cvtbl (r10)+,-(sp)
75 bneq l2513
76 cvtwl (r10)+,(sp)
77l2513:
78 cvtwl (r10)+,-(sp)
79 cvtwl (r10)+,-(sp)
80 calls $4,_pcttot
81 movw r0,sp
82 jmp (r8)
83_IN:
84 cvtbl (r10)+,r0
85 bneq l2514
86 cvtwl (r10)+,r0 #r0 has size of set
87l2514:
88 blbc r0,l2515
89 incl r0
90l2515:
91 cvtwl (sp)+,r1 #r1 has set index
92 addl3 r0,sp,r4 #r4 points to new top of stack
93 subw2 (r10)+,r1 #check below lower
94 blssu l2516
95 cmpw r1,(r10)+ #check above upper
96 bgtru l2517
97 bbc r1,(sp),l2517 #check for bit set
98 movl r4,sp #bit found
99 movw $1,-(sp)
100 jmp (r8)
101l2516:
102 addl2 $2,r10
103l2517:
104 movl r4,sp #bit not found
105 clrw -(sp)
106 jmp (r8)
107_INCT:
108 incl r10
109 cvtwl (sp)+,r0 #r0 has value to find
110 cvtwl (sp)+,r1 #r1 has pair count
111l2518:
112 cmpw r0,(sp)+
113 blss l2519
114 cmpw r0,(sp)+
115 bgtr l2520
116 decl r1
117 moval (sp)[r1],sp #clear off remaining data on stack
118 movw $1,-(sp) #success
119 jmp (r8)
120l2519:
121 addl2 $2,sp
122l2520:
123 sobgtr r1,l2518
124 clrw -(sp) #failure
125 jmp (r8)