diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-02-26 11:38:57 -0500 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-02-26 11:38:57 -0500 |
commit | ad5dae18f438f444c0888027f1b11d3f0970c2d1 (patch) | |
tree | 0b8fb991645b9be7dafc43175abdd8de09c610ac | |
parent | 987b3def3394583321fee4543df9db76b9299bc6 (diff) | |
download | roux-ad5dae18f438f444c0888027f1b11d3f0970c2d1.tar.gz |
move dumpts() into util, add bsequal()
-rw-r--r-- | lisc/lisc.h | 6 | ||||
-rw-r--r-- | lisc/main.c | 12 | ||||
-rw-r--r-- | lisc/util.c | 25 |
3 files changed, 28 insertions, 15 deletions
diff --git a/lisc/lisc.h b/lisc/lisc.h index 441f2cb..0e69967 100644 --- a/lisc/lisc.h +++ b/lisc/lisc.h @@ -1,5 +1,6 @@ #include <assert.h> #include <inttypes.h> +#include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -82,7 +83,7 @@ enum { NTyp = 128, BITS = 4, - NBit = 64, + NBit = CHAR_BIT * sizeof(ulong), }; struct BSet { @@ -451,7 +452,6 @@ struct Dat { /* main.c */ extern char debug['Z'+1]; -void dumpts(Bits *, Tmp *, FILE *); /* util.c */ extern Typ typ[NTyp]; @@ -472,6 +472,7 @@ int phicls(int, Tmp *); Ref newtmp(char *, Fn *); Ref getcon(int64_t, Fn *); void addcon(Con *, Con *); +void dumpts(BSet *, Tmp *, FILE *); void bsinit(BSet *, uint); void bszero(BSet *); @@ -483,6 +484,7 @@ void bscopy(BSet *, BSet *); void bsunion(BSet *, BSet *); void bsinter(BSet *, BSet *); void bsdiff(BSet *, BSet *); +int bsequal(BSet *, BSet *); int bsiter(BSet *, uint *); /* parse.c */ diff --git a/lisc/main.c b/lisc/main.c index af02d2e..9595fe1 100644 --- a/lisc/main.c +++ b/lisc/main.c @@ -15,18 +15,6 @@ char debug['Z'+1] = { static int dbg; -void -dumpts(Bits *b, Tmp *tmp, FILE *f) -{ - int t; - - fprintf(f, "["); - for (t=Tmp0; t<BITS*NBit; t++) - if (BGET(*b, t)) - fprintf(f, " %s", tmp[t].name); - fprintf(f, " ]\n"); -} - static void data(Dat *d) { diff --git a/lisc/util.c b/lisc/util.c index 4f0298c..63c73bd 100644 --- a/lisc/util.c +++ b/lisc/util.c @@ -299,13 +299,25 @@ BSOP(bsunion, |=) BSOP(bsinter, &=) BSOP(bsdiff, &= ~) +int +bsequal(BSet *a, BSet *b) +{ + uint i; + + assert(a->nt == b->nt); + for (i=0; i<a->nt; i++) + if (a->t[i] != b->t[i]) + return 0; + return 1; +} + void bszero(BSet *bs) { bsdiff(bs, bs); } -/* Iterates on a bitset, use as follows. +/* iterates on a bitset, use as follows * * for (i=0; bsiter(set, &i); i++) * use(i); @@ -326,3 +338,14 @@ bsiter(BSet *bs, uint *elt) } return 0; } + +void +dumpts(BSet *bs, Tmp *tmp, FILE *f) +{ + uint t; + + fprintf(f, "["); + for (t=Tmp0; bsiter(bs, &t); t++) + fprintf(f, " %s", tmp[t].name); + fprintf(f, " ]\n"); +} |