| 1 | #\f |
| 2 | # 25set.s |
| 3 | # |
| 4 | # SET OPERATIONS |
| 5 | # |
| 6 | _ADDT: |
| 7 | cvtbl (r10)+,r0 |
| 8 | bneq l2501 |
| 9 | cvtwl (r10)+,r0 |
| 10 | l2501: |
| 11 | blbc r0,l2502 |
| 12 | incl r0 #r0 has number of bytes in set |
| 13 | l2502: |
| 14 | addl3 sp,r0,r1 #r1 has pointer to second set |
| 15 | ashl $-1,r0,r0 #r0 has number of words in set |
| 16 | l2503: |
| 17 | bisw2 (sp)+,(r1)+ |
| 18 | sobgtr r0,l2503 |
| 19 | jmp (r8) |
| 20 | _SUBT: |
| 21 | cvtbl (r10)+,r0 |
| 22 | bneq l2504 |
| 23 | cvtwl (r10)+,r0 |
| 24 | l2504: |
| 25 | blbc r0,l2505 |
| 26 | incl r0 #r0 has number of bytes in set |
| 27 | l2505: |
| 28 | addl3 sp,r0,r1 #r1 has pointer to second set |
| 29 | ashl $-1,r0,r0 #r0 has number of words in set |
| 30 | l2506: |
| 31 | bicw2 (sp)+,(r1)+ |
| 32 | sobgtr r0,l2506 |
| 33 | bicw2 (r10)+,-(r1) |
| 34 | jmp (r8) |
| 35 | _MULT: |
| 36 | cvtbl (r10)+,r0 |
| 37 | bneq l2507 |
| 38 | cvtwl (r10)+,r0 |
| 39 | l2507: |
| 40 | blbc r0,l2508 |
| 41 | incl r0 #r0 has number of bytes in set |
| 42 | l2508: |
| 43 | addl3 sp,r0,r1 #r1 has pointer to second set |
| 44 | ashl $-1,r0,r0 #r0 has number of words in set |
| 45 | l2509: |
| 46 | mcomw (sp)+,r3 |
| 47 | bicw2 r3,(r1)+ |
| 48 | sobgtr r0,l2509 |
| 49 | jmp (r8) |
| 50 | _CARD: |
| 51 | cvtbl (r10)+,r0 #r0 has number of bytes in set |
| 52 | bneq l2510 |
| 53 | cvtwl (r10)+,r0 |
| 54 | l2510: |
| 55 | blbc r0,l2511 |
| 56 | incl r0 |
| 57 | l2511: |
| 58 | addl3 r0,sp,r4 #r4 has new stack addr |
| 59 | ashl $3,r0,r0 #r0 has number of bits in set |
| 60 | mnegl $1,r1 #will init r1 to zero |
| 61 | mnegl $1,r5 #will init r2 to zero |
| 62 | l2512: |
| 63 | incl r1 #count found element |
| 64 | incl r5 #advance to next field position |
| 65 | l2521: |
| 66 | ffs r5,$32,(sp),r5 #find next set bit |
| 67 | beql l2521 #nothing found, so continue |
| 68 | cmpl r5,r0 #check for end of field |
| 69 | blss l2512 #element found, so count and continue |
| 70 | movl r4,sp #clear stack |
| 71 | movw r1,-(sp) #put answer on stack |
| 72 | jmp (r8) |
| 73 | _CTTOT: |
| 74 | cvtbl (r10)+,-(sp) |
| 75 | bneq l2513 |
| 76 | cvtwl (r10)+,(sp) |
| 77 | l2513: |
| 78 | cvtwl (r10)+,-(sp) |
| 79 | cvtwl (r10)+,-(sp) |
| 80 | calls $4,_pcttot |
| 81 | movw r0,sp |
| 82 | jmp (r8) |
| 83 | _IN: |
| 84 | cvtbl (r10)+,r0 |
| 85 | bneq l2514 |
| 86 | cvtwl (r10)+,r0 #r0 has size of set |
| 87 | l2514: |
| 88 | blbc r0,l2515 |
| 89 | incl r0 |
| 90 | l2515: |
| 91 | cvtwl (sp)+,r1 #r1 has set index |
| 92 | addl3 r0,sp,r4 #r4 points to new top of stack |
| 93 | subw2 (r10)+,r1 #check below lower |
| 94 | blssu l2516 |
| 95 | cmpw r1,(r10)+ #check above upper |
| 96 | bgtru l2517 |
| 97 | bbc r1,(sp),l2517 #check for bit set |
| 98 | movl r4,sp #bit found |
| 99 | movw $1,-(sp) |
| 100 | jmp (r8) |
| 101 | l2516: |
| 102 | addl2 $2,r10 |
| 103 | l2517: |
| 104 | movl r4,sp #bit not found |
| 105 | clrw -(sp) |
| 106 | jmp (r8) |
| 107 | _INCT: |
| 108 | incl r10 |
| 109 | cvtwl (sp)+,r0 #r0 has value to find |
| 110 | cvtwl (sp)+,r1 #r1 has pair count |
| 111 | l2518: |
| 112 | cmpw r0,(sp)+ |
| 113 | blss l2519 |
| 114 | cmpw r0,(sp)+ |
| 115 | bgtr l2520 |
| 116 | decl r1 |
| 117 | moval (sp)[r1],sp #clear off remaining data on stack |
| 118 | movw $1,-(sp) #success |
| 119 | jmp (r8) |
| 120 | l2519: |
| 121 | addl2 $2,sp |
| 122 | l2520: |
| 123 | sobgtr r1,l2518 |
| 124 | clrw -(sp) #failure |
| 125 | jmp (r8) |