diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-07-31 10:21:10 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:29 -0400 |
commit | d8d17705c4f525314471f5526ef3328dd41625cd (patch) | |
tree | 9b0f9b2a90918f16647898e296f303407a95725e /lisc/rega.c | |
parent | 1a78659dfab54d808fbc568d6b7ff5e4012695c0 (diff) | |
download | roux-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/rega.c')
-rw-r--r-- | lisc/rega.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lisc/rega.c b/lisc/rega.c index a003563..27d61ee 100644 --- a/lisc/rega.c +++ b/lisc/rega.c @@ -350,11 +350,11 @@ rega(Fn *fn) * situation * eax = sub ebx, eax */ - if (!opdesc[i->op].commut && r) + if (opdesc[i->op].comm == F && r) BSET(cur.br, r); t = i->arg[1].val; i->arg[1] = ralloc(&cur, t); - if (!opdesc[i->op].commut && r) + if (opdesc[i->op].comm == F && r) BCLR(cur.br, r); } } |