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.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/lisc/isel.c b/lisc/isel.c
index b59fe55..c2d92d1 100644
--- a/lisc/isel.c
+++ b/lisc/isel.c
@@ -117,15 +117,12 @@ argcls(Ins *i, int n)
 	case OStorel:
 		return Kl;
 	default:
-		if ((OCmpw <= i->op && i->op <= OCmpw1)
-		|| (OCmpl <= i->op && i->op <= OCmpl1)
-		|| (OCmps <= i->op && i->op <= OCmps1)
-		|| (OCmpd <= i->op && i->op <= OCmpd1))
+		if (OCmpw <= i->op && i->op <= OCmpd1)
 			goto Invalid;
-		if (OLoad <= i->op && i->op <= OLoad1)
+		if (isload(i->op))
 			return Kl;
-		if (OExt <= i->op && i->op <= OExt1)
-			return i->op == OExtl ? Kl : Kw;
+		if (isext(i->op))
+			return Kw;
 		return i->cls;
 	}
 }
@@ -313,9 +310,9 @@ Emit:
 		}
 		break;
 	default:
-		if (OExt <= i.op && i.op <= OExt1)
+		if (isext(i.op))
 			goto case_OExt;
-		if (OLoad <= i.op && i.op <= OLoad1)
+		if (isload(i.op))
 			goto case_OLoad;
 		if (iscmp(i.op, &kc, &x)) {
 			if (rtype(i.arg[0]) == RCon)
@@ -344,9 +341,7 @@ flagi(Ins *i0, Ins *i)
 			||  (OCmps <= i->op && i->op <= OCmps1)
 			||  (OCmpd <= i->op && i->op <= OCmpd1))
 				return i;
-			if (OExt <= i->op && i->op <= OExt1)
-				continue;
-			if (OLoad <= i->op && i->op <= OLoad1)
+			if (isext(i->op) || isload(i->op))
 				continue;
 			return 0;
 		case OAdd:  /* flag-setting */
@@ -626,16 +621,10 @@ selcall(Fn *fn, Ins *i0, Ins *i1)
 			if (a->size > 8) {
 				r2 = rarg(a->cls[1], &ni, &ns);
 				r = newtmp("isel", fn);
-				if (a->cls[1] == Kl)              /* fixme, add OLoad? */
-					emit(OLoadl, Kl, r2, r, R);
-				else
-					emit(OLoadd, Kd, r2, r, R);
+				emit(OLoad, a->cls[1], r2, r, R);
 				emit(OAdd, Kl, r, i->arg[1], getcon(8, fn));
 			}
-			if (a->cls[0] == Kl)                      /* fixme! */
-				emit(OLoadl, Kl, r1, i->arg[1], R);
-			else
-				emit(OLoadd, Kd, r1, i->arg[1], R);
+			emit(OLoad, a->cls[0], r1, i->arg[1], R);
 		} else
 			emit(OCopy, i->cls, r1, i->arg[0], R);
 	}