summary refs log tree commit diff
path: root/lisc/lisc.h
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-07-31 10:21:10 -0400
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-09-15 23:01:29 -0400
commitd8d17705c4f525314471f5526ef3328dd41625cd (patch)
tree9b0f9b2a90918f16647898e296f303407a95725e /lisc/lisc.h
parent1a78659dfab54d808fbc568d6b7ff5e4012695c0 (diff)
downloadroux-d8d17705c4f525314471f5526ef3328dd41625cd.tar.gz
clean the commutativity + fix bug in emit
The commutativity information only makes sense for
arithmetic expressions.  To account for that, I introduced
a new tri-valued boolean type B3.  Memory operations, for
example, will receive an undefined commutativity trit.

The code emitter was buggy when rega emitted instructions
like 'rax = add 1, rax', this is now fixed using the
commutativity information (we rewrite it in 'rax = add
rax, 1').
Diffstat (limited to 'lisc/lisc.h')
-rw-r--r--lisc/lisc.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/lisc/lisc.h b/lisc/lisc.h
index 7f558b0..2f00e09 100644
--- a/lisc/lisc.h
+++ b/lisc/lisc.h
@@ -16,6 +16,8 @@ typedef struct Sym Sym;
 typedef struct Const Const;
 typedef struct Fn Fn;
 
+typedef enum { U, F, T } B3;
+
 enum {
 	RAX = 1,
 	RCX,
@@ -105,9 +107,9 @@ enum {
 };
 
 struct OpDesc {
-	int arity;
-	uint commut:1;
 	char *name;
+	int arity;
+	B3 comm;
 };
 
 struct Ins {