* src/configure.in, src/configure, src/Makefile.in, as/z80/Makefile.in,
[fw/sdcc] / src / mcs51 / peeph.def
index 30ddc1307f64e5d0e03b686f8e9f9a79b1de8538..96db036d26177b4da9572f2964faf8db7d7dee3e 100644 (file)
@@ -684,7 +684,7 @@ replace {
        mov     a,%2
        add     a,#0xff - %1
        mov     %3,c
-}
+} if operandsLiteral(%1)
 
 replace {
        clr     c
@@ -696,7 +696,7 @@ replace {
        mov     a,%2
        add     a,#0xff - %1
        jnc     %5
-}
+} if operandsLiteral(%1)
 
 replace {
        clr     c
@@ -708,7 +708,7 @@ replace {
        mov     a,%2
        add     a,#0xff - %1
        jc      %5
-}
+} if operandsLiteral(%1)
 
 replace {
        clr     c
@@ -720,7 +720,7 @@ replace {
        mov     a,#0x100 - %2
        add     a,%1
        mov     %3,c
-} if operandsNotRelated('0x00' %2)
+} if operandsNotRelated('0x00' %2), operandsLiteral(%2)
 
 replace {
        clr     c
@@ -732,7 +732,7 @@ replace {
        mov     a,#0x100 - %2
        add     a,%1
        jc      %5
-} if operandsNotRelated('0x00' %2)
+} if operandsNotRelated('0x00' %2), operandsLiteral(%2)
 
 replace {
        clr     c
@@ -744,7 +744,7 @@ replace {
        mov     a,#0x100 - %2
        add     a,%1
        jnc     %5
-} if operandsNotRelated('0x00' %2)
+} if operandsNotRelated('0x00' %2), operandsLiteral(%2)
 
 
 replace {
@@ -856,6 +856,19 @@ replace {
        mov     r%1,a
 }
 
+// applies to genlshOne
+replace {
+       mov     ar%1,@%2
+       mov     a,r%1
+       add     a,acc
+       mov     r%1,a
+} by {
+       ;       Peephole 140    removed redundant mov
+       mov     a,@%2
+       add     a,@%2
+       mov     r%1,a
+}
+
 replace {
        mov     r%1,a
        mov     r%2,ar%1
@@ -1449,7 +1462,8 @@ replace {
        mov     %1,a
 } if notVolatile %1
 
-replace {
+// char indexed access to: long code table[] = {4,3,2,1};
+replace restart {
        add     a,#%1
        mov     dpl,a
        clr     a
@@ -1468,25 +1482,28 @@ replace {
        mov     %4,a
        inc     dptr
        clr     a
+       movc    a,@a+dptr
 } by {
        ;       Peephole 186.a  optimized movc sequence
+       mov     b,a
        mov     dptr,#%1
-       mov     b,acc
        movc    a,@a+dptr
        mov     %2,a
-       mov     acc,b
        inc     dptr
+       mov     a,b
        movc    a,@a+dptr
        mov     %3,a
-       mov     acc,b
        inc     dptr
+       mov     a,b
        movc    a,@a+dptr
        mov     %4,a
-       mov     acc,b
        inc     dptr
+       mov     a,b
+       movc    a,@a+dptr
 }
 
-replace {
+// char indexed access to: void* code table[] = {4,3,2,1};
+replace restart {
        add     a,#%1
        mov     dpl,a
        clr     a
@@ -1501,21 +1518,24 @@ replace {
        mov     %3,a
        inc     dptr
        clr     a
+       movc    a,@a+dptr
 } by {
        ;       Peephole 186.b  optimized movc sequence
+       mov     b,a
        mov     dptr,#%1
-       mov     b,acc
        movc    a,@a+dptr
        mov     %2,a
-       mov     acc,b
        inc     dptr
+       mov     a,b
        movc    a,@a+dptr
        mov     %3,a
-       mov     acc,b
        inc     dptr
+       mov     a,b
+       movc    a,@a+dptr
 }
 
-replace {
+// char indexed access to: int code table[] = {4,3,2,1};
+replace restart {
        add     a,#%1
        mov     dpl,a
        clr     a
@@ -1526,31 +1546,31 @@ replace {
        mov     %2,a
        inc     dptr
        clr     a
+       movc    a,@a+dptr
 } by {
        ;       Peephole 186.c  optimized movc sequence
+       mov     %2,a
        mov     dptr,#%1
-       mov     b,acc
        movc    a,@a+dptr
-       mov     %2,a
-       mov     acc,b
+       xch     a,%2
        inc     dptr
+       movc    a,@a+dptr
 }
 
-// disabled due to bug #1434401
-//// char indexed access to: char code table[] = {4,3,2,1};
-//replace {
-//     add     a,#%1
-//     mov     dpl,a
-//     clr     a
-//     addc    a,#(%1 >> 8)
-//     mov     dph,a
-//     clr     a
-//     movc    a,@a+dptr
-//} by {
-//     ;       Peephole 186.d  optimized movc sequence
-//     mov     dptr,#%1
-//     movc    a,@a+dptr
-//}
+// char indexed access to: char code table[] = {4,3,2,1};
+replace {
+       add     a,#%1
+       mov     dpl,a
+       clr     a
+       addc    a,#(%1 >> 8)
+       mov     dph,a
+       clr     a
+       movc    a,@a+dptr
+} by {
+       ;       Peephole 186.d  optimized movc sequence
+       mov     dptr,#%1
+       movc    a,@a+dptr
+}
 
 // char indexed access to: int code table[] = {4,3,2,1};
 replace {
@@ -3102,8 +3122,6 @@ replace {
 } if notVolatile %1
 
 
-
-
 // rules 247.x apply to f.e. bitfields.c
 replace {
        mov     r%5,#%1
@@ -4515,6 +4533,19 @@ replace {
        mov     %1,#(%2 + 1)
 }
 
+
+replace {
+       clr     a
+       cjne    %1,%2,%3
+       inc     a
+%3:
+       jz      %4
+} by {
+       ;       Peephole 264    jump optimization (acc not set)
+       cjne    %1,%2,%4
+%3:
+} if labelRefCount(%3 1), labelRefCountChange(%3 -1)
+
 // should be one of the last peepholes
 replace{
 %1: