BSD 4 release
[unix-history] / usr / src / cmd / px / 02relset.s
#\f
# Copyright (c) 1979 Regents of the University of California
#
# char sccsid[] = "@(#)02relset.s 4.1 10/10/80";
#
# RELATIONALS ON SETS
#
_RELT:
cvtbl (r10)+,r5 #r5 has jump opcode
movzwl (r10)+,r1 #r1 has comparison length (bytes)
movl r1,r4 #r4 has stack length
blbc r4,l0211
incl r4
l0211:
addl3 sp,r4,r3 #r3 has addr of lower operand
addl2 r3,r4 #r4 points to cleared stack
jsb *settab(r5) #calc condition, return boolean in r0
movl r4,sp #reset stack
cmpl r5,$20 #check for branch
bgtr l0212
movw r0,-(sp) #put boolean on stack
jmp (r8)
l0212:
tstl r0
beql l0213
addl2 $2,r10 #continue on true
jmp (r8)
l0213:
cvtwl (r10),r0 #skip on false
addl2 r0,r10
jmp (r8)
.align 1
settab: #condition code branch table
.long seteq #generate boolean answer
.long setne
.long setlt
.long setgt
.long setle
.long setge
.long seteq #branch on condition false
.long setne
.long setlt
.long setgt
.long setle
.long setge
setlt:
moval 4(sp),r2 #skip over return address
ashl $-1,r1,r1
l0214:
bicw3 (r2),(r3),r0
bneq false
bicw2 (r3)+,(r2)+
bneq l0216 #need only check <= for remainder of set
sobgtr r1,l0214
false:
clrl r0
rsb
setle:
moval 4(sp),r2
ashl $-1,r1,r1
l0215:
bicw2 (r2)+,(r3)+
bneq false
l0216:
sobgtr r1,l0215
true:
movl $1,r0
rsb
seteq:
cmpc3 r1,(r3),4(sp)
beql true
clrl r0
rsb
setne:
cmpc3 r1,(r3),4(sp)
bneq true
clrl r0
rsb
setgt:
moval 4(sp),r2
ashl $-1,r1,r1
l0217:
bicw3 (r3),(r2),r0
bneq false
bicw2 (r2)+,(r3)+
bneq l0219 #need only check >= for remainder of set
sobgtr r1,l0217
clrl r0
rsb
setge:
moval 4(sp),r2
ashl $-1,r1,r1
l0218:
bicw2 (r3)+,(r2)+
bneq false
l0219:
sobgtr r1,l0218
movl $1,r0
rsb