BSD 3 development
[unix-history] / usr / src / cmd / px / 02relset.s
CommitLineData
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
12l0211:
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)
22l0212:
23 tstl r0
24 beql l0213
25 addl2 $2,r10 #continue on true
26 jmp (r8)
27l0213:
28 cvtwl (r10),r0 #skip on false
29 addl2 r0,r10
30 jmp (r8)
31
32 .align 1
33settab: #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
47setlt:
48 moval 4(sp),r2 #skip over return address
49 ashl $-1,r1,r1
50l0214:
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
56false:
57 clrl r0
58 rsb
59setle:
60 moval 4(sp),r2
61 ashl $-1,r1,r1
62l0215:
63 bicw2 (r2)+,(r3)+
64 bneq false
65l0216:
66 sobgtr r1,l0215
67true:
68 movl $1,r0
69 rsb
70seteq:
71 cmpc3 r1,(r3),4(sp)
72 beql true
73 clrl r0
74 rsb
75setne:
76 cmpc3 r1,(r3),4(sp)
77 bneq true
78 clrl r0
79 rsb
80setgt:
81 moval 4(sp),r2
82 ashl $-1,r1,r1
83l0217:
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
91setge:
92 moval 4(sp),r2
93 ashl $-1,r1,r1
94l0218:
95 bicw2 (r3)+,(r2)+
96 bneq false
97l0219:
98 sobgtr r1,l0218
99 movl $1,r0
100 rsb