summary refs log tree commit diff
path: root/lisc/isel.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/isel.c')
-rw-r--r--lisc/isel.c11
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: