BSD 3 release
[unix-history] / usr / src / cmd / px / 25set.s
#\f
# 25set.s
#
# SET OPERATIONS
#
_ADDT:
cvtbl (r10)+,r0
bneq l2501
cvtwl (r10)+,r0
l2501:
blbc r0,l2502
incl r0 #r0 has number of bytes in set
l2502:
addl3 sp,r0,r1 #r1 has pointer to second set
ashl $-1,r0,r0 #r0 has number of words in set
l2503:
bisw2 (sp)+,(r1)+
sobgtr r0,l2503
jmp (r8)
_SUBT:
cvtbl (r10)+,r0
bneq l2504
cvtwl (r10)+,r0
l2504:
blbc r0,l2505
incl r0 #r0 has number of bytes in set
l2505:
addl3 sp,r0,r1 #r1 has pointer to second set
ashl $-1,r0,r0 #r0 has number of words in set
l2506:
bicw2 (sp)+,(r1)+
sobgtr r0,l2506
bicw2 (r10)+,-(r1)
jmp (r8)
_MULT:
cvtbl (r10)+,r0
bneq l2507
cvtwl (r10)+,r0
l2507:
blbc r0,l2508
incl r0 #r0 has number of bytes in set
l2508:
addl3 sp,r0,r1 #r1 has pointer to second set
ashl $-1,r0,r0 #r0 has number of words in set
l2509:
mcomw (sp)+,r3
bicw2 r3,(r1)+
sobgtr r0,l2509
jmp (r8)
_CARD:
cvtbl (r10)+,r0 #r0 has number of bytes in set
bneq l2510
cvtwl (r10)+,r0
l2510:
blbc r0,l2511
incl r0
l2511:
addl3 r0,sp,r4 #r4 has new stack addr
ashl $3,r0,r0 #r0 has number of bits in set
mnegl $1,r1 #will init r1 to zero
mnegl $1,r5 #will init r2 to zero
l2512:
incl r1 #count found element
incl r5 #advance to next field position
l2521:
ffs r5,$32,(sp),r5 #find next set bit
beql l2521 #nothing found, so continue
cmpl r5,r0 #check for end of field
blss l2512 #element found, so count and continue
movl r4,sp #clear stack
movw r1,-(sp) #put answer on stack
jmp (r8)
_CTTOT:
cvtbl (r10)+,-(sp)
bneq l2513
cvtwl (r10)+,(sp)
l2513:
cvtwl (r10)+,-(sp)
cvtwl (r10)+,-(sp)
calls $4,_pcttot
movw r0,sp
jmp (r8)
_IN:
cvtbl (r10)+,r0
bneq l2514
cvtwl (r10)+,r0 #r0 has size of set
l2514:
blbc r0,l2515
incl r0
l2515:
cvtwl (sp)+,r1 #r1 has set index
addl3 r0,sp,r4 #r4 points to new top of stack
subw2 (r10)+,r1 #check below lower
blssu l2516
cmpw r1,(r10)+ #check above upper
bgtru l2517
bbc r1,(sp),l2517 #check for bit set
movl r4,sp #bit found
movw $1,-(sp)
jmp (r8)
l2516:
addl2 $2,r10
l2517:
movl r4,sp #bit not found
clrw -(sp)
jmp (r8)
_INCT:
incl r10
cvtwl (sp)+,r0 #r0 has value to find
cvtwl (sp)+,r1 #r1 has pair count
l2518:
cmpw r0,(sp)+
blss l2519
cmpw r0,(sp)+
bgtr l2520
decl r1
moval (sp)[r1],sp #clear off remaining data on stack
movw $1,-(sp) #success
jmp (r8)
l2519:
addl2 $2,sp
l2520:
sobgtr r1,l2518
clrw -(sp) #failure
jmp (r8)