Fixed bug #483124
[fw/sdcc] / src / ds390 / peeph.def
index b089c32a901a31fa4cf78a21f8f94b44c3fb2170..c9175e3984de372f6668120e5afd599f504d7ec7 100644 (file)
@@ -1004,13 +1004,14 @@ replace {
         mov  %1,@r%2
 }
 
-replace {
-        mov  %1,%2
-        mov  %2,%1
-} by {
-        ; Peephole 177   removed redundant mov
-        mov  %1,%2
-}
+// this one will screw assignes to volatile/sfr's
+//replace {
+//        mov  %1,%2
+//        mov  %2,%1
+//} by {
+//        ; Peephole 177   removed redundant mov
+//        mov  %1,%2
+//}
 
 replace {
         mov  a,%1
@@ -1059,14 +1060,23 @@ replace {
         mov  dptr,#0x0000
 }
 
+replace {
+       mov dpl,#%1
+       mov dph,#(%1 >> 8)
+       mov dpx,#(%1 >> 16)
+} by {
+       ; Peephole 182b used 24 bit load of DPTR
+       mov dptr,#%1
+}
+
 // saves 2 bytes, ?? cycles.
 replace {
         mov  dpl,#%1
-        mov  dph,#(%1 >> 8)
-       mov  dpx,#(%1 >> 16)
+        mov  dph,#%2
+       mov  dpx,#%3
 } by {
         ; Peephole 182a   used 24 bit load of dptr
-        mov  dptr,#%1
+        mov  dptr,#((%3 << 16) + (%2 << 8) + %1)
 } if 24bitMode
 
 // saving 3 byte, 2 cycles, return(float_constant) profits here
@@ -1805,10 +1815,136 @@ replace {
 
 replace {
        mov     dps, #0x00
-       mov     dp%1,a
+       mov     %1,a
        mov     dps, #0x01
 } by {
        ; Peephole 222 removed DPS abuse.
-       mov     dp%1,a
+       mov     %1,a
         mov     dps, #0x01
 }
+
+replace {
+       mov     dps, #0x00
+       xch     a, ap
+       mov     %1, ap
+       mov     dps, #0x01
+} by {
+       ; Peephole 222a removed DPS abuse.
+       xch     a, ap
+        mov     %1, ap
+        mov     dps, #0x01
+}
+
+replace {
+       mov     dps, #0x%1
+       inc     dptr
+       movx    a,@dptr
+       mov     %2,a
+       mov     dps, #0x%1
+} by {
+       mov     dps, #0x%1
+        inc     dptr
+        movx    a,@dptr
+        mov     %2,a
+; Peephole 223: yet more DPS abuse removed.
+}
+
+replace {
+       mov     dps, #0x00
+       inc     dps
+} by {
+       mov     dps, #0x01
+}
+
+replace {
+       mov     dps, #0x0%1
+       mov     dptr, %2
+       mov     dps, #0x0%1
+} by {
+       mov     dps, #0x0%1
+        mov     dptr, %2
+}
+
+replace {
+       mov     dps, #0x01
+       mov     dptr, %1
+       mov     dps, #0x00
+       mov     dptr, %2
+       inc     dps
+} by {
+       mov     dps, #0x00
+       mov     dptr, %2
+       inc     dps
+       mov     dptr, %1
+; Peephole 224a: DPS usage re-arranged.
+}
+
+replace {
+       mov     dps, #0x0%1
+       mov     dptr, %2
+       mov     dps, #0x0%3
+       mov     dptr, %4
+       mov     dps, #0x0%1
+} by {
+       mov     dps, #0x0%3
+       mov     dptr, %4
+       mov     dps, #0x0%1
+       mov     dptr, %2
+; Peephole 224: DPS usage re-arranged.
+}
+
+replace {
+       mov     dps, #0x01
+       mov     dptr, %1
+       mov     dps, #0x00
+} by {
+       mov     dps, #0x01
+       mov     dptr, %1
+       dec     dps
+}
+
+replace {
+       xch     a, ap
+       add     a, ap
+} by {
+       add     a, ap
+}
+
+replace {
+       xch     a, ap
+       addc    a, ap
+} by {
+       addc    a, ap
+}
+
+replace {
+       inc     dps
+       mov     dps, #0x%1
+} by {
+       mov     dps, #0x%1
+}
+
+replace {
+       dec     dps
+       mov     dps, #0x%1
+} by {
+       mov     dps, #0x%1
+}
+
+
+replace {
+       add     a,#%2
+       mov     dpl,a
+       clr  a
+       addc    a,#(%2 >> 8)
+       mov     dph,a
+       clr  a
+       addc    a,#(%2 >> 16)
+       mov     dpx,a
+       clr     a
+       movc    a,@a+dptr
+} by {
+       ; Peephole 227.a movc optimize
+       mov     dptr,#%2
+       movc    a,@a+dptr
+}