Quentin Carbonneaux 1 год назад
Родитель
Сommit
96f18be71d
1 измененных файлов с 10 добавлено и 6 удалено
  1. 10 6
      simpl.c

+ 10 - 6
simpl.c

@@ -65,7 +65,7 @@ ins(Ins **pi, int *new, Blk *b, Fn *fn)
 
 	i = *pi;
 	/* simplify more instructions here;
-	 * copy 0 into xor bit rotations,
+	 * copy 0 into xor, bit rotations,
 	 * etc. */
 	switch (i->op) {
 	case Oblit1:
@@ -80,8 +80,14 @@ ins(Ins **pi, int *new, Blk *b, Fn *fn)
 		}
 		blit((i-1)->arg, rsval(i->arg[0]), fn);
 		*pi = i-1;
-		break;
+		return;
 	case Omul:
+		if (rtype(i->arg[0]) == RCon) {
+			r = i->arg[0];
+			i->arg[0] = i->arg[1];
+			i->arg[1] = r;
+		}
+		/* fall through */
 	case Oudiv:
 	case Ourem:
 		r = i->arg[1];
@@ -103,12 +109,10 @@ ins(Ins **pi, int *new, Blk *b, Fn *fn)
 				}
 			}
 		}
-		/* fall through */
-	default:
-		if (*new)
-			emiti(*i);
 		break;
 	}
+	if (*new)
+		emiti(*i);
 }
 
 void