1*7dd7cddfSDavid du Colombier #define EXTERN
23e12c5d1SDavid du Colombier #include "gc.h"
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier /*
53e12c5d1SDavid du Colombier Bits
63e12c5d1SDavid du Colombier bor(Bits a, Bits b)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier Bits c;
93e12c5d1SDavid du Colombier int i;
103e12c5d1SDavid du Colombier
113e12c5d1SDavid du Colombier for(i=0; i<BITS; i++)
123e12c5d1SDavid du Colombier c.b[i] = a.b[i] | b.b[i];
133e12c5d1SDavid du Colombier return c;
143e12c5d1SDavid du Colombier }
153e12c5d1SDavid du Colombier */
163e12c5d1SDavid du Colombier
173e12c5d1SDavid du Colombier /*
183e12c5d1SDavid du Colombier Bits
193e12c5d1SDavid du Colombier band(Bits a, Bits b)
203e12c5d1SDavid du Colombier {
213e12c5d1SDavid du Colombier Bits c;
223e12c5d1SDavid du Colombier int i;
233e12c5d1SDavid du Colombier
243e12c5d1SDavid du Colombier for(i=0; i<BITS; i++)
253e12c5d1SDavid du Colombier c.b[i] = a.b[i] & b.b[i];
263e12c5d1SDavid du Colombier return c;
273e12c5d1SDavid du Colombier }
283e12c5d1SDavid du Colombier */
293e12c5d1SDavid du Colombier
303e12c5d1SDavid du Colombier /*
313e12c5d1SDavid du Colombier Bits
323e12c5d1SDavid du Colombier bnot(Bits a)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier Bits c;
353e12c5d1SDavid du Colombier int i;
363e12c5d1SDavid du Colombier
373e12c5d1SDavid du Colombier for(i=0; i<BITS; i++)
383e12c5d1SDavid du Colombier c.b[i] = ~a.b[i];
393e12c5d1SDavid du Colombier return c;
403e12c5d1SDavid du Colombier }
413e12c5d1SDavid du Colombier */
423e12c5d1SDavid du Colombier
433e12c5d1SDavid du Colombier int
bany(Bits * a)443e12c5d1SDavid du Colombier bany(Bits *a)
453e12c5d1SDavid du Colombier {
463e12c5d1SDavid du Colombier int i;
473e12c5d1SDavid du Colombier
483e12c5d1SDavid du Colombier for(i=0; i<BITS; i++)
493e12c5d1SDavid du Colombier if(a->b[i])
503e12c5d1SDavid du Colombier return 1;
513e12c5d1SDavid du Colombier return 0;
523e12c5d1SDavid du Colombier }
533e12c5d1SDavid du Colombier
543e12c5d1SDavid du Colombier /*
553e12c5d1SDavid du Colombier int
563e12c5d1SDavid du Colombier beq(Bits a, Bits b)
573e12c5d1SDavid du Colombier {
583e12c5d1SDavid du Colombier int i;
593e12c5d1SDavid du Colombier
603e12c5d1SDavid du Colombier for(i=0; i<BITS; i++)
613e12c5d1SDavid du Colombier if(a.b[i] != b.b[i])
623e12c5d1SDavid du Colombier return 0;
633e12c5d1SDavid du Colombier return 1;
643e12c5d1SDavid du Colombier }
653e12c5d1SDavid du Colombier */
663e12c5d1SDavid du Colombier
673e12c5d1SDavid du Colombier int
bnum(Bits a)683e12c5d1SDavid du Colombier bnum(Bits a)
693e12c5d1SDavid du Colombier {
703e12c5d1SDavid du Colombier int i;
713e12c5d1SDavid du Colombier long b;
723e12c5d1SDavid du Colombier
733e12c5d1SDavid du Colombier for(i=0; i<BITS; i++)
743e12c5d1SDavid du Colombier if(b = a.b[i])
753e12c5d1SDavid du Colombier return 32*i + bitno(b);
763e12c5d1SDavid du Colombier diag(Z, "bad in bnum");
773e12c5d1SDavid du Colombier return 0;
783e12c5d1SDavid du Colombier }
793e12c5d1SDavid du Colombier
803e12c5d1SDavid du Colombier Bits
blsh(unsigned n)813e12c5d1SDavid du Colombier blsh(unsigned n)
823e12c5d1SDavid du Colombier {
833e12c5d1SDavid du Colombier Bits c;
843e12c5d1SDavid du Colombier
853e12c5d1SDavid du Colombier c = zbits;
863e12c5d1SDavid du Colombier c.b[n/32] = 1L << (n%32);
873e12c5d1SDavid du Colombier return c;
883e12c5d1SDavid du Colombier }
893e12c5d1SDavid du Colombier
903e12c5d1SDavid du Colombier /*
913e12c5d1SDavid du Colombier int
923e12c5d1SDavid du Colombier bset(Bits a, unsigned n)
933e12c5d1SDavid du Colombier {
943e12c5d1SDavid du Colombier int i;
953e12c5d1SDavid du Colombier
963e12c5d1SDavid du Colombier if(a.b[n/32] & (1L << (n%32)))
973e12c5d1SDavid du Colombier return 1;
983e12c5d1SDavid du Colombier return 0;
993e12c5d1SDavid du Colombier }
1003e12c5d1SDavid du Colombier */
1013e12c5d1SDavid du Colombier
1023e12c5d1SDavid du Colombier int
Bconv(va_list * arg,Fconv * fp)103*7dd7cddfSDavid du Colombier Bconv(va_list *arg, Fconv *fp)
1043e12c5d1SDavid du Colombier {
1053e12c5d1SDavid du Colombier char str[STRINGSZ], ss[STRINGSZ], *s;
1063e12c5d1SDavid du Colombier Bits bits;
1073e12c5d1SDavid du Colombier int i;
1083e12c5d1SDavid du Colombier
1093e12c5d1SDavid du Colombier str[0] = 0;
110*7dd7cddfSDavid du Colombier bits = va_arg(*arg, Bits);
1113e12c5d1SDavid du Colombier while(bany(&bits)) {
1123e12c5d1SDavid du Colombier i = bnum(bits);
1133e12c5d1SDavid du Colombier if(str[0])
1143e12c5d1SDavid du Colombier strcat(str, " ");
1153e12c5d1SDavid du Colombier if(var[i].sym == S) {
1163e12c5d1SDavid du Colombier sprint(ss, "$%ld", var[i].offset);
1173e12c5d1SDavid du Colombier s = ss;
1183e12c5d1SDavid du Colombier } else
1193e12c5d1SDavid du Colombier s = var[i].sym->name;
1203e12c5d1SDavid du Colombier if(strlen(str) + strlen(s) + 1 >= STRINGSZ)
1213e12c5d1SDavid du Colombier break;
1223e12c5d1SDavid du Colombier strcat(str, s);
1233e12c5d1SDavid du Colombier bits.b[i/32] &= ~(1L << (i%32));
1243e12c5d1SDavid du Colombier }
125bd389b36SDavid du Colombier strconv(str, fp);
126*7dd7cddfSDavid du Colombier return 0;
1273e12c5d1SDavid du Colombier }
128