Commit | Line | Data |
---|---|---|
d843b78e | 1 | #\f |
31cef89c BJ |
2 | # Copyright (c) 1979 Regents of the University of California |
3 | # | |
4 | # char sccsid[] = "@(#)02relset.s 4.1 10/10/80"; | |
d843b78e CH |
5 | # |
6 | # RELATIONALS ON SETS | |
7 | # | |
8 | _RELT: | |
9 | cvtbl (r10)+,r5 #r5 has jump opcode | |
31cef89c | 10 | movzwl (r10)+,r1 #r1 has comparison length (bytes) |
d843b78e CH |
11 | movl r1,r4 #r4 has stack length |
12 | blbc r4,l0211 | |
13 | incl r4 | |
14 | l0211: | |
15 | addl3 sp,r4,r3 #r3 has addr of lower operand | |
16 | addl2 r3,r4 #r4 points to cleared stack | |
d843b78e CH |
17 | jsb *settab(r5) #calc condition, return boolean in r0 |
18 | movl r4,sp #reset stack | |
19 | cmpl r5,$20 #check for branch | |
20 | bgtr l0212 | |
21 | movw r0,-(sp) #put boolean on stack | |
22 | jmp (r8) | |
23 | l0212: | |
24 | tstl r0 | |
25 | beql l0213 | |
26 | addl2 $2,r10 #continue on true | |
27 | jmp (r8) | |
28 | l0213: | |
29 | cvtwl (r10),r0 #skip on false | |
30 | addl2 r0,r10 | |
31 | jmp (r8) | |
32 | ||
33 | .align 1 | |
31cef89c BJ |
34 | settab: #condition code branch table |
35 | .long seteq #generate boolean answer | |
d843b78e CH |
36 | .long setne |
37 | .long setlt | |
38 | .long setgt | |
39 | .long setle | |
40 | .long setge | |
31cef89c | 41 | .long seteq #branch on condition false |
d843b78e CH |
42 | .long setne |
43 | .long setlt | |
44 | .long setgt | |
45 | .long setle | |
46 | .long setge | |
47 | ||
48 | setlt: | |
49 | moval 4(sp),r2 #skip over return address | |
50 | ashl $-1,r1,r1 | |
51 | l0214: | |
52 | bicw3 (r2),(r3),r0 | |
53 | bneq false | |
54 | bicw2 (r3)+,(r2)+ | |
55 | bneq l0216 #need only check <= for remainder of set | |
56 | sobgtr r1,l0214 | |
57 | false: | |
58 | clrl r0 | |
59 | rsb | |
60 | setle: | |
61 | moval 4(sp),r2 | |
62 | ashl $-1,r1,r1 | |
63 | l0215: | |
64 | bicw2 (r2)+,(r3)+ | |
65 | bneq false | |
66 | l0216: | |
67 | sobgtr r1,l0215 | |
68 | true: | |
69 | movl $1,r0 | |
70 | rsb | |
71 | seteq: | |
72 | cmpc3 r1,(r3),4(sp) | |
73 | beql true | |
74 | clrl r0 | |
75 | rsb | |
76 | setne: | |
77 | cmpc3 r1,(r3),4(sp) | |
78 | bneq true | |
79 | clrl r0 | |
80 | rsb | |
81 | setgt: | |
82 | moval 4(sp),r2 | |
83 | ashl $-1,r1,r1 | |
84 | l0217: | |
85 | bicw3 (r3),(r2),r0 | |
86 | bneq false | |
87 | bicw2 (r2)+,(r3)+ | |
88 | bneq l0219 #need only check >= for remainder of set | |
89 | sobgtr r1,l0217 | |
90 | clrl r0 | |
91 | rsb | |
92 | setge: | |
93 | moval 4(sp),r2 | |
94 | ashl $-1,r1,r1 | |
95 | l0218: | |
96 | bicw2 (r3)+,(r2)+ | |
97 | bneq false | |
98 | l0219: | |
99 | sobgtr r1,l0218 | |
100 | movl $1,r0 | |
101 | rsb |