]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/8c/peep.c
8c, 6c: native ROL (cyclic shift) instruction support, improve peephole optimizers
[plan9front.git] / sys / src / cmd / 8c / peep.c
index 8f0fae88af844d2e47e12c3ae5a0cd57375f59fb..482f17a65c835adce7c1b8e027d5313d5e1a4017 100644 (file)
@@ -264,9 +264,6 @@ subprop(Reg *r0)
                        break;
                p = r->prog;
                switch(p->as) {
-               case ACALL:
-                       return 0;
-
                case AIMULL:
                case AIMULW:
                        if(p->to.type != D_NONE)
@@ -283,6 +280,23 @@ subprop(Reg *r0)
                case AMULL:
                case AMULW:
 
+               case AREP:
+               case AREPN:
+               case ALOOP:
+               case ALOOPNE:
+
+               case ACWD:
+               case ACDQ:
+
+               case ASTOSB:
+               case ASTOSL:
+               case AMOVSB:
+               case AMOVSL:
+               case AFSTSW:
+
+               case ACALL:
+                       return 0;
+
                case AROLB:
                case AROLL:
                case AROLW:
@@ -301,19 +315,9 @@ subprop(Reg *r0)
                case ASHRB:
                case ASHRL:
                case ASHRW:
-
-               case AREP:
-               case AREPN:
-
-               case ACWD:
-               case ACDQ:
-
-               case ASTOSB:
-               case ASTOSL:
-               case AMOVSB:
-               case AMOVSL:
-               case AFSTSW:
-                       return 0;
+                       if(p->from.type == D_CX && v1->type == D_CX)
+                               return 0;
+                       break;
 
                case AORL:
                case AANDL: