diff options
Diffstat (limited to 'lisc/isel.c')
-rw-r--r-- | lisc/isel.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lisc/isel.c b/lisc/isel.c index 6dfc06f..da7e946 100644 --- a/lisc/isel.c +++ b/lisc/isel.c @@ -240,6 +240,17 @@ sel(Ins i, ANum *an, Fn *fn) if (rtype(i.arg[1]) == RCon) emit(OCopy, k, r0, i.arg[1], R); break; + case OSar: + case OShr: + case OShl: + if (rtype(i.arg[1]) == RCon) + goto Emit; + r0 = i.arg[1]; + i.arg[1] = TMP(RCX); + emit(OCopy, Kw, R, TMP(RCX), R); + emiti(i); + emit(OCopy, Kw, TMP(RCX), r0, R); + break; case ONop: break; case OStored: |