diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-08-05 12:47:10 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:30 -0400 |
commit | 9c7b06d68f6a71ff43d1de60953658ca47bbde36 (patch) | |
tree | 822d93ac78d23aa3c8bedfd0d45ef54bed317b08 /lisc/isel.c | |
parent | 246a48ba94b92e6c1e02964d46269e0903b7a723 (diff) | |
download | roux-9c7b06d68f6a71ff43d1de60953658ca47bbde36.tar.gz |
quick fix for comparisons with constants
Diffstat (limited to 'lisc/isel.c')
-rw-r--r-- | lisc/isel.c | 8 |
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"); |