* src/ds390/gen.c (opIsGptr, adjustArithmeticResult, genAddrOf, genAssign),
[fw/sdcc] / src / z80 / peeph.def
index c88c3a781d1995af81fb4a6e5d7e402e5a22756e..1dc435b89a5e2ce209b25770e910aa53efa4f122 100644 (file)
@@ -23,14 +23,6 @@ replace restart {
        ; peephole 1 removed redundant load.
 } if notVolatile(%1)
 
-replace restart {
-       ld      %1,%3
-       ld      %1,%2
-} by {
-       ; peephole 2 removed dead load into %1
-       ld      %1,%2
-} if notVolatile(%1 %3), operandsNotSame
-
 replace restart {
        jp      NC,%1
        jp      %2
@@ -456,6 +448,22 @@ replace restart {
        ld      %1,a
 } if notVolatile(%1)
 
+// sdcc does not use the H flag. sla resets it, while add sets it.
+// To ensure that the state of the H flag is not changed by this
+// peephole uncomment the add %3, %4 at the end (since it overwrite the H flag).
+replace restart {
+       ld      %1, a
+       sla     %1
+       ld      a, %2
+       //add   %3, %4
+} by {
+       add     a, a
+       ; peephole 42a shifts in accumulator insted of %1
+       ld      %1, a
+       ld      a, %2
+       //add   %3, %4
+}
+
 replace restart {
        ld      %1,a
        ld      a,%2
@@ -702,4 +710,21 @@ replace restart {
        ; peephole 64 moved addition of constant 0x%3%2 to bc to constant.
 }
 
+replace restart {
+       call    %1
+       ret
+} by {
+       jp      %1
+       ; peephole 65 replaced call at end of function by jump.
+}
 
+// Callee saves ix.
+replace restart {
+       call    %1
+       pop     ix
+       ret
+} by {
+       pop     ix
+       jp      %1
+       ; peephole 66 replaced call at end of function by jump moving call beyond pop ix.
+}