summary refs log tree commit diff
path: root/lisc/isel.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-08-05 12:47:10 -0400
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-09-15 23:01:30 -0400
commit9c7b06d68f6a71ff43d1de60953658ca47bbde36 (patch)
tree822d93ac78d23aa3c8bedfd0d45ef54bed317b08 /lisc/isel.c
parent246a48ba94b92e6c1e02964d46269e0903b7a723 (diff)
downloadroux-9c7b06d68f6a71ff43d1de60953658ca47bbde36.tar.gz
quick fix for comparisons with constants
Diffstat (limited to 'lisc/isel.c')
-rw-r--r--lisc/isel.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/lisc/isel.c b/lisc/isel.c
index 6fdf5ff..faea3b5 100644
--- a/lisc/isel.c
+++ b/lisc/isel.c
@@ -87,8 +87,14 @@ sel(Ins i, Fn *fn)
 	default:
 		if (OCmp <= i.op && i.op <= OCmp1) {
 			c = i.op - OCmp;
+			if (rtype(i.arg[0]) == RCon) {
+				r0 = i.arg[0];
+				i.arg[0] = i.arg[1];
+				i.arg[1] = r0;
+				c = CNEG(c);
+			}
 			emit(OXSet+c, i.to, R, R);
-			emit(OXCmp, R, i.arg[0], i.arg[1]);
+			emit(OXCmp, R, i.arg[1], i.arg[0]);
 			break;
 		}
 		diag("isel: non-exhaustive implementation");