git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4387 4a8a32a2...
[fw/sdcc] / src / z80 / peeph-z80.def
index 2bba126095efb9e69a256d089f82ed425b4adece..ee3f701b0a17e209fa91af39f4a35dce52c22186 100644 (file)
@@ -7,21 +7,19 @@ replace restart {
        jp      %4,%5
 }
 replace {
-       ld      %1,%2)
-       ld      a,%2)
+       ld      %1,%2
+       ld      a,%2
 } by {
-        ld      %1,%2)
-        ld      a,%1
+       ld      %1,%2
+       ld      a,%1
 }
 replace {
-       ld      %1),a
+       ld      %1,a
        xor     a,a
-       or      a,%1)
-       jp      z,%2
+       or      a,%1
 } by {
-        ld      %1),a
-        or      a,a
-       jp      z,%2
+       ld      %1,a
+       or      a,a
 }
 replace {
        rlca
@@ -29,5 +27,100 @@ replace {
        rla
 } by {
        rlca
-        and     a,#0x01
+       and     a,#0x01
+}
+replace {
+       ld      %3,a
+       ld      l,%1
+       ld      h,%2
+       ld      l,(hl)
+       ld      a,%3
+} by {
+       ld      %3,a
+       ld      l,%1
+       ld      h,%2
+       ld      l,(hl)
+} if notVolatile %3
+
+;
+;--------------------------
+;
+replace restart {
+       pop     %1
+       push    %1
+       ld      %1,%2
+} by {
+       ;       z80 removed redundant pop/push
+       ld      %1,%2
+}
+
+replace restart {
+       ld      l,a
+       ld      c,%1
+       ld      a,l
+} by {
+       ld      l,a
+       ld      c,%1
+}
+
+replace restart {
+       ld      c,l
+       ld      a,c
+       and     a,#%1
+       ld      c,a
+       or      a,a
+} by {
+       ;       z80 stream lining 'and' logic
+       ld      a,#%1
+       and     a,l
+       ld      c,a
+}
+
+replace restart {
+       ld      a,c
+       and     a,#%1
+       ld      c,a
+       or      a,a
+} by {
+       ;       z80 stream lining 'and' logic
+       ld      a,#%1
+       and     a,c
+       ld      c,a
+}
+
+replace restart {
+       ld      a,c
+       or      a,#%1
+       ld      c,a
+} by {
+       ;       z80 stream lining 'or' logic
+       ld      a,#%1
+       or      a,c
+       ld      c,a
+}
+
+
+replace {
+%1:
+       in0     a,(%2)
+       and     a,#%3
+       jp      Z,%4
+%5:
+       jp      %6
+%4:
+       call    %7
+       jp      %1
+%6:
+       ret
+} by {
+%1:
+       in0     a,(%2)
+       and     a,#%3
+       jp      NZ,%5
+%4:
+       call    %7
+       jp      %1
+%5:
+%6:
+       ret
 }