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