* doc/sdccman.lyx, src/SDCCmain.c, src/SDCCglobal.h, src/ds390/gen.c,
[fw/sdcc] / src / mcs51 / peeph.def
index 97492818f227249f8f51df14372f145fa71ec8cb..0cb1d8dac07f49fd8792d4d3aad4dc9e0fc8a196 100644 (file)
@@ -1,20 +1,3 @@
-//replace restart {
-//       pop  %1
-//       push %1
-//} by {
-//       ;       Peephole 1     removed pop %1 push %1 (not push pop)
-//}
-
-//replace restart {
-//       pop  %1
-//       mov  %2,%3
-//       push %1
-//} by {
-//       ;       Peephole 2     removed pop %1 push %1 (not push pop)
-//       mov  %2,%3
-//}
-
-//
 // added by Jean Louis VERN for
 // his shift stuff
 replace {
@@ -193,6 +176,52 @@ replace {
        movx    @dptr,a
 } if notVolatile %1
 
+// applies to f.e. lib/src/time.c (--model-large)
+replace {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+} by {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       ;       Peephole 101.a  removed redundant moves
+       movx    @dptr,a
+       inc     dptr
+       movx    @dptr,a
+       inc     dptr
+       movx    @dptr,a
+} if notVolatile %1
+
+// applies to f.e. support/regression/tests/literalop.c (--model-large)
+replace {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+} by {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       ;       Peephole 101.b  removed redundant moves
+       movx    @dptr,a
+       inc     dptr
+       movx    @dptr,a
+} if notVolatile %1
+
+// applies to f.e. support/regression/tests/onebyte.c (--model-large)
 replace {
        mov     a,%1
        movx    @dptr,a
@@ -203,7 +232,7 @@ replace {
        mov     a,%1
        movx    @dptr,a
        inc     dptr
-       ;       Peephole 101    removed redundant mov
+       ;       Peephole 101.c  removed redundant mov
        movx    @dptr,a
 } if notVolatile %1
 
@@ -268,7 +297,7 @@ replace {
        mov     a,%1
 } by {
        mov     %1,a
-;      Peephole 105    removed redundant mov
+       ;       Peephole 105    removed redundant mov
 } if notVolatile %1
 
 replace {
@@ -793,7 +822,7 @@ replace {
        mov     %1,a
        mov     dpl,%2
        mov     dph,%3
-       ;       Peephole 136    removed redundant move
+       ;       Peephole 136    removed redundant mov
 } if notVolatile %1
 
 // WTF? Doesn't look sensible to me...
@@ -845,7 +874,8 @@ replace {
 } by {
        ;       Peephole 139.b  removed redundant mov
        orl     a,%2
-       mov     r%1,a }
+       mov     r%1,a
+}
 
 replace {
        mov     r%1,a
@@ -875,7 +905,7 @@ replace {
        mov     r%2,ar%1
        mov     ar%1,@r%2
 } by {
-       ;       Peephole 142    removed redundant moves
+       ;       Peephole 142    removed redundant mov
        mov     r%2,a
        mov     ar%1,@r%2
 }
@@ -1284,7 +1314,7 @@ replace {
        mov     %1,%2
        mov     %1,%3
 } by {
-       ;       Peephole 177.c  removed redundant move
+       ;       Peephole 177.c  removed redundant mov
        mov     %1,%3
 } if notVolatile %1 %2
 
@@ -1297,7 +1327,7 @@ replace restart {
 } by {
        mov     %1,%2
        mov     %3,%4
-       ;       Peephole 177.d  removed redundant move
+       ;       Peephole 177.d  removed redundant mov
 } if notVolatile(%1 %2),operandsNotRelated(%1 %2 %3)
 
 // applies to f.e. bug-607243.c
@@ -1306,7 +1336,7 @@ replace {
        mov     r%1,%2
        mov     ar%1,%3
 } by {
-       ;       peephole 177.e  removed redundant move
+       ;       peephole 177.e  removed redundant mov
        mov     ar%1,%3
 } if notVolatile %2 %3
 
@@ -1314,7 +1344,7 @@ replace {
        mov     ar%1,%2
        mov     r%1,%3
 } by {
-       ;       peephole 177.f  removed redundant move
+       ;       peephole 177.f  removed redundant mov
        mov     r%1,%3
 } if notVolatile %2
 
@@ -1453,15 +1483,15 @@ replace {
        mov     %1,a
 } if notVolatile %1
 
-replace {
-// acc being incremented might cause problems
-       mov     %1,a
-       inc     %1
-} by {
-       ;       Peephole 185    changed order of increment (acc incremented also!)
-       inc     a
-       mov     %1,a
-} if notVolatile %1
+//replace {
+// acc being incremented might cause problems with register tracking
+//     mov     %1,a
+//     inc     %1
+//} by {
+//     ;       Peephole 185    changed order of increment (acc incremented also!)
+//     inc     a
+//     mov     %1,a
+//} if notVolatile %1
 
 // char indexed access to: long code table[] = {4,3,2,1};
 replace restart {
@@ -1660,15 +1690,26 @@ replace {
        ;       Peephole 191    removed redundant mov
 } if notVolatile %1
 
+// applies to f.e. regression/ports/mcs51/support.c
 replace {
        mov     r%1,a
        mov     @r%2,ar%1
 } by {
        mov     r%1,a
-       ;       Peephole 192    used a instead of ar%1 as source
+       ;       Peephole 192.a  used a instead of ar%1 as source
        mov     @r%2,a
 }
 
+// applies to f.e. printf_large.c
+replace {
+       mov     ar%1,@r%2
+       mov     a,r%1
+} by {
+       ;       Peephole 192.b  used a instead of ar%1 as destination
+       mov     a,@r%2
+       mov     r%1,a
+}
+
 replace {
        jnz     %3
        mov     a,%4
@@ -1972,7 +2013,7 @@ replace {
        mov     %1,%1
 } by {
        ;       Peephole 206    removed redundant mov %1,%1
-} if notVolatile
+} if notVolatile %1
 
 // Does not seem to be triggered anymore
 //replace {
@@ -2054,7 +2095,7 @@ replace    {
        add     a,%1
 } by {
        mov     %1,a
-       ;       Peephole 214    reduced some extra moves
+       ;       Peephole 214.a  removed redundant mov
        add     a,%2
 } if operandsNotSame
 
@@ -2063,7 +2104,7 @@ replace {
        add     a,%2
        mov     %1,a
 } by {
-       ;       Peephole 215    removed some moves
+       ;       Peephole 214.b  removed redundant mov
        add     a,%2
        mov     %1,a
 } if operandsNotSame
@@ -2182,13 +2223,13 @@ replace {
 replace {
        mov     %1 + %2,(%2 + %1)
 } by {
-       ;       Peephole 221.a  remove redundant move
+       ;       Peephole 221.a  remove redundant mov
 } if notVolatile
 
 replace {
        mov     (%1 + %2 + %3),((%2 + %1) + %3)
 } by {
-       ;       Peephole 221.b  remove redundant move
+       ;       Peephole 221.b  remove redundant mov
 } if notVolatile
 
 replace {
@@ -3682,39 +3723,6 @@ replace {
        mov     r%3,a
 }
 
-// applies to: void test( char c ) { if( c ) func1(); else func2(); }
-replace {
-       lcall   %1
-       ret
-} by {
-       ;       Peephole 253.a  replaced lcall/ret with ljmp
-       ljmp    %1
-}
-
-// applies to: void test( char c ) { if( c ) func1(); else func2(); }
-replace {
-       lcall   %1
-%2:
-       ret
-} by {
-       ;       Peephole 253.b  replaced lcall/ret with ljmp
-       ljmp    %1
-       ;
-} if labelRefCount %2 0
-
-// applies to f.e. scott-bool1.c
-replace {
-       lcall   %1
-%2:
-       ret
-} by {
-       ;       Peephole 253.c  replaced lcall with ljmp
-       ljmp    %1
-%2:
-       ret
-}
-
-
 // applies to f.e. funptrs.c
 // saves one byte if %1 is a register or @register
 replace {
@@ -4529,7 +4537,7 @@ replace {
 } by {
        ;       Peephole 263.a  optimized loading const
        mov     %1,#(%2 + 3)
-}
+} if notVolatile(%1)
 
 replace {
        mov     %1,#%2
@@ -4538,7 +4546,7 @@ replace {
 } by {
        ;       Peephole 263.b  optimized loading const
        mov     %1,#(%2 + 2)
-}
+} if notVolatile(%1)
 
 replace {
        mov     %1,#%2
@@ -4546,7 +4554,7 @@ replace {
 } by {
        ;       Peephole 263.c  optimized loading const
        mov     %1,#(%2 + 1)
-}
+} if notVolatile(%1)
 
 
 replace {
@@ -4561,9 +4569,56 @@ replace {
 %3:
 } if labelRefCount(%3 1), labelRefCountChange(%3 -1)
 
+
+replace restart {
+       pop     ar%1
+} by {
+       ;       Peephole 300    pop ar%1 removed
+} if deadMove %1
+
+replace {
+       mov     r%1,%2
+} by {
+       ;       Peephole 301    mov r%1,%2 removed
+} if notVolatile(%2), deadMove(%1)
+
+
+// applies to: void test( char c ) { if( c ) func1(); else func2(); }
+replace {
+       lcall   %1
+       ret
+} by {
+       ;       Peephole 400.a  replaced lcall/ret with ljmp
+       ljmp    %1
+}
+
+// applies to: void test( char c ) { if( c ) func1(); else func2(); }
+replace {
+       lcall   %1
+%2:
+       ret
+} by {
+       ;       Peephole 400.b  replaced lcall/ret with ljmp
+       ljmp    %1
+       ;
+} if labelRefCount %2 0
+
+// applies to f.e. scott-bool1.c
+replace {
+       lcall   %1
+%2:
+       ret
+} by {
+       ;       Peephole 400.c  replaced lcall with ljmp
+       ljmp    %1
+%2:
+       ret
+}
+
+
 // should be one of the last peepholes
 replace{
 %1:
 } by {
-       ;       Peephole 300    removed redundant label %1
+       ;       Peephole 500    removed redundant label %1
 } if labelRefCount(%1 0)