summary refs log tree commit diff
path: root/lisc
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-02-26 11:38:57 -0500
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-02-26 11:38:57 -0500
commitad5dae18f438f444c0888027f1b11d3f0970c2d1 (patch)
tree0b8fb991645b9be7dafc43175abdd8de09c610ac /lisc
parent987b3def3394583321fee4543df9db76b9299bc6 (diff)
downloadroux-ad5dae18f438f444c0888027f1b11d3f0970c2d1.tar.gz
move dumpts() into util, add bsequal()
Diffstat (limited to 'lisc')
-rw-r--r--lisc/lisc.h6
-rw-r--r--lisc/main.c12
-rw-r--r--lisc/util.c25
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");
+}