--- /dev/null
+/** Dumb stdio.h
+ Z80 temp hack.
+*/
+
+void printf(const char *szFormat, ...);
+
--- /dev/null
+/* Silly string.h
+ * Z80 specific hack
+*/
+
+#include <types.h>
+
+char *strcpy(char *dest, const char *src);
+
+int strcmp(const char *s1, const char *s2);
+
+void *memcpy(void *dest, const void *src, WORD wLen);
+
--- /dev/null
+/** Silly types.h
+ Z80 specific hack
+*/
+
+#ifndef TYPES_INCLUDE
+#define TYPES_INCLUDE
+
+typedef unsigned char BYTE;
+typedef unsigned WORD;
+
+#endif
ld hl,#0
add hl,sp
ret
-
+
+__printTStates::
+ ld a,#3
+ out (0xff),a
+ ret
+
_exit::
;; Exit - special code to the emulator
ld a,#1
SDCClex.c: SDCC.lex SDCCy.h
$(LEX) -t $< >$@
-SDCCpeeph.rul: SDCCpeeph.def
- $(AWK) -f SDCCpeeph.awk SDCCpeeph.def > SDCCpeeph.rul
-
.y.c:
rm -f $*.cc $*.h
$(YACC) -d $<
peepRule *rootRules = NULL;
peepRule *currRule = NULL;
-char *defaultRules =
-{
-#include "SDCCpeeph.rul"
-};
-
static bool matchLine (char *, char *, hTab **);
#define FBYNAME(x) int x (hTab *vars, lineNode *currPl, lineNode *head)
char *s;
/* read in the default rules */
- readRules(defaultRules);
+ readRules(port->peep.default_rules);
/* if we have any additional file read it too */
if (options.peep_file) {
+++ /dev/null
-//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 restart {
- xch a,%1
- xch a,%1
-} by {
- ; Peephole 2.a removed redundant xch xch
-}
-
-replace restart {
-// saving 2 byte
- mov %1,#0x00
- mov a,#0x00
-} by {
- ; Peephole 3.a changed mov to clr
- clr a
- mov %1,a
-}
-
-replace restart {
-// saving 1 byte
- mov %1,#0x00
- clr a
-} by {
- ; Peephole 3.b changed mov to clr
- clr a
- mov %1,a
-}
-
-replace restart {
-// saving 1 byte, loosing 1 cycle but maybe allowing peephole 3.b to start
- mov %1,#0x00
- mov %2,#0x00
- mov a,%3
-} by {
- ; Peephole 3.c changed mov to clr
- clr a
- mov %1,a
- mov %2,a
- mov a,%3
-}
-
-
-
-replace {
- mov %1,a
- mov dptr,#%2
- mov a,%1
- movx @dptr,a
-} by {
- ; Peephole 100 removed redundant mov
- mov %1,a
- mov dptr,#%2
- movx @dptr,a
-}
-
-replace {
- mov a,acc
-} by {
- ; Peephole 100.a removed redundant mov
-}
-
-replace {
- mov a,%1
- movx @dptr,a
- inc dptr
- mov a,%1
- movx @dptr,a
-} by {
- ; Peephole 101 removed redundant mov
- mov a,%1
- movx @dptr,a
- inc dptr
- movx @dptr,a
-}
-
-replace {
- mov %1,%2
- ljmp %3
-%4:
- mov %1,%5
-%3:
- mov dpl,%1
-%7:
- mov sp,bp
- pop bp
-} by {
- ; Peephole 102 removed redundant mov
- mov dpl,%2
- ljmp %3
-%4:
- mov dpl,%5
-%3:
-%7:
- mov sp,bp
- pop bp
-}
-
-replace {
- mov %1,%2
- ljmp %3
-%4:
- mov a%1,%5
-%3:
- mov dpl,%1
-%7:
- mov sp,bp
- pop bp
-} by {
- ; Peephole 103 removed redundant mov
- mov dpl,%2
- ljmp %3
-%4:
- mov dpl,%5
-%3:
-%7:
- mov sp,bp
- pop bp
-}
-
-replace {
- mov a,bp
- clr c
- add a,#0x01
- mov r%1,a
-} by {
- ; Peephole 104 optimized increment (acc not set to r%1, flags undefined)
- mov r%1,bp
- inc r%1
-}
-
-replace {
- mov %1,a
- mov a,%1
-} by {
- ; Peephole 105 removed redundant mov
- mov %1,a
-}
-
-replace {
- mov %1,a
- clr c
- mov a,%1
-} by {
- ; Peephole 106 removed redundant mov
- mov %1,a
- clr c
-}
-
-replace {
- ljmp %1
-%1:
-} by {
- ; Peephole 107 removed redundant ljmp
-%1:
-}
-
-replace {
- jc %1
- ljmp %5
-%1:
-} by {
- ; Peephole 108 removed ljmp by inverse jump logic
- jnc %5
-%1:
-} if labelInRange
-
-replace {
- jz %1
- ljmp %5
-%1:
-} by {
- ; Peephole 109 removed ljmp by inverse jump logic
- jnz %5
-%1:
-} if labelInRange
-
-replace {
- jnz %1
- ljmp %5
-%1:
-} by {
- ; Peephole 110 removed ljmp by inverse jump logic
- jz %5
-%1:
-} if labelInRange
-
-replace {
- jb %1,%2
- ljmp %5
-%2:
-} by {
- ; Peephole 111 removed ljmp by inverse jump logic
- jnb %1,%5
-%2:
-} if labelInRange
-
-replace {
- jnb %1,%2
- ljmp %5
-%2:
-} by {
- ; Peephole 112 removed ljmp by inverse jump logic
- jb %1,%5
-%2:
-} if labelInRange
-
-replace {
- ljmp %5
-%1:
-} by {
- ; Peephole 132 changed ljmp to sjmp
- sjmp %5
-%1:
-} if labelInRange
-
-
-replace {
- clr a
- cjne %1,%2,%3
- cpl a
-%3:
- rrc a
- mov %4,c
-} by {
- ; Peephole 113 optimized misc sequence
- clr %4
- cjne %1,%2,%3
- setb %4
-%3:
-}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %10,%11,%3
- cpl a
-%3:
- rrc a
- mov %4,c
-} by {
- ; Peephole 114 optimized misc sequence
- clr %4
- cjne %1,%2,%3
- cjne %10,%11,%3
- setb %4
-%3:
-}
-
-replace {
- clr a
- cjne %1,%2,%3
- cpl a
-%3:
- jnz %4
-} by {
- ; Peephole 115 jump optimization
- cjne %1,%2,%3
- sjmp %4
-%3:
-}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %9,%10,%3
- cpl a
-%3:
- jnz %4
-} by {
- ; Peephole 116 jump optimization
- cjne %1,%2,%3
- cjne %9,%10,%3
- sjmp %4
-%3:
-}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %9,%10,%3
- cjne %11,%12,%3
- cpl a
-%3:
- jnz %4
-} by {
- ; Peephole 117 jump optimization
- cjne %1,%2,%3
- cjne %9,%10,%3
- cjne %11,%12,%3
- sjmp %4
-%3:
-}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %9,%10,%3
- cjne %11,%12,%3
- cjne %13,%14,%3
- cpl a
-%3:
- jnz %4
-} by {
- ; Peephole 118 jump optimization
- cjne %1,%2,%3
- cjne %9,%10,%3
- cjne %11,%12,%3
- cjne %13,%14,%3
- sjmp %4
-%3:
-}
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- clr a
-%3:
- jnz %4
-} by {
- ; Peephole 119 jump optimization
- cjne %1,%2,%4
-%3:
-}
-
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- cjne %10,%11,%3
- clr a
-%3:
- jnz %4
-} by {
- ; Peephole 120 jump optimization
- cjne %1,%2,%4
- cjne %10,%11,%4
-%3:
-}
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- cjne %10,%11,%3
- cjne %12,%13,%3
- clr a
-%3:
- jnz %4
-} by {
- ; Peephole 121 jump optimization
- cjne %1,%2,%4
- cjne %10,%11,%4
- cjne %12,%13,%4
-%3:
-}
-
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- cjne %10,%11,%3
- cjne %12,%13,%3
- cjne %14,%15,%3
- clr a
-%3:
- jnz %4
-} by {
- ; Peephole 122 jump optimization
- cjne %1,%2,%4
- cjne %10,%11,%4
- cjne %12,%13,%4
- cjne %14,%15,%4
-%3:
-}
-
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- clr a
-%3:
- jz %4
-} by {
- ; Peephole 123 jump optimization
- cjne %1,%2,%3
- smp %4
-%3:
-}
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- cjne %10,%11,%3
- clr a
-%3:
- jz %4
-} by {
- ; Peephole 124 jump optimization
- cjne %1,%2,%3
- cjne %10,%11,%3
- smp %4
-%3:
-}
-
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- cjne %10,%11,%3
- cjne %12,%13,%3
- clr a
-%3:
- jz %4
-} by {
- ; Peephole 125 jump optimization
- cjne %1,%2,%3
- cjne %10,%11,%3
- cjne %12,%13,%3
- sjmp %4
-%3:
-}
-
-replace {
- mov a,#0x01
- cjne %1,%2,%3
- cjne %10,%11,%3
- cjne %12,%13,%3
- cjne %14,%15,%3
- clr a
-%3:
- jz %4
-} by {
- ; Peephole 126 jump optimization
- cjne %1,%2,%3
- cjne %10,%11,%3
- cjne %12,%13,%3
- cjne %14,%15,%3
- sjmp %4
-%3:
-}
-
-replace {
- push psw
- mov psw,%1
- push bp
- mov bp,%2
-%3:
- mov %2,bp
- pop bp
- pop psw
- ret
-} by {
- ; Peephole 127 removed misc sequence
- ret
-}
-
-replace {
- clr a
- rlc a
- jz %1
-} by {
- ; Peephole 128 jump optimization
- jnc %1
-}
-
-replace {
- clr a
- rlc a
- jnz %1
-} by {
- ; Peephole 129 jump optimization
- jc %1
-}
-
-replace {
- mov r%1,@r%2
-} by {
- ; Peephole 130 changed target address mode r%1 to ar%1
- mov ar%1,@r%2
-}
-
-replace {
- mov a,%1
- subb a,#0x01
- mov %2,a
- mov %1,%2
-} by {
- ; Peephole 131 optimized decrement (not caring for c)
- dec %1
- mov %2,%1
-}
-
-replace {
- mov r%1,%2
- mov ar%3,@r%1
- inc r%3
- mov r%4,%2
- mov @r%4,ar%3
-} by {
- ; Peephole 133 removed redundant moves
- mov r%1,%2
- inc @r%1
- mov ar%3,@r%1
-}
-
-replace {
- mov r%1,%2
- mov ar%3,@r%1
- dec r%3
- mov r%4,%2
- mov @r%4,ar%3
-} by {
- ; Peephole 134 removed redundant moves
- mov r%1,%2
- dec @r%1
- mov ar%3,@r%1
-}
-
-replace {
- mov r%1,a
- mov a,r%2
- orl a,r%1
-} by {
- ; Peephole 135 removed redundant mov
- mov r%1,a
- orl a,r%2
-}
-
-replace {
- mov %1,a
- mov dpl,%2
- mov dph,%3
- mov a,%1
-} by {
- ; Peephole 136 removed redundant moves
- mov %1,a
- mov dpl,%2
- mov dph,%3
-}
-
-replace {
- mov b,#0x00
- mov a,%1
- cjne %2,%3,%4
- mov b,#0x01
-%4:
- mov a,b
- jz %5
-} by {
- ; Peephole 137 optimized misc jump sequence
- mov a,%1
- cjne %2,%3,%5
-%4:
-}
-
-replace {
- mov b,#0x00
- mov a,%1
- cjne %2,%3,%4
- mov b,#0x01
-%4:
- mov a,b
- jnz %5
-} by {
- ; Peephole 138 optimized misc jump sequence
- mov a,%1
- cjne %2,%3,%4
- sjmp %5
-%4:
-}
-
-replace {
- mov r%1,a
- anl ar%1,%2
- mov a,r%1
-} by {
- ; Peephole 139 removed redundant mov
- anl a,%2
- mov r%1,a
-}
-
-replace {
- mov r%1,a
- orl ar%1,%2
- mov a,r%1
-} by {
- ; Peephole 140 removed redundant mov
- orl a,%2
- mov r%1,a }
-
-replace {
- mov r%1,a
- xrl ar%1,%2
- mov a,r%1
-} by {
- ; Peephole 141 removed redundant mov
- xrl a,%2
- mov r%1,a
-}
-
-replace {
- mov r%1,a
- mov r%2,ar%1
- mov ar%1,@r%2
-} by {
- ; Peephole 142 removed redundant moves
- mov r%2,a
- mov ar%1,@r%2
-}
-
-replace {
- rlc a
- mov acc.0,c
-} by {
- ; Peephole 143 converted rlc to rl
- rl a
-}
-
-replace {
- rrc a
- mov acc.7,c
-} by {
- ; Peephole 144 converted rrc to rc
- rr a
-}
-
-replace {
- clr c
- addc a,%1
-} by {
- ; Peephole 145 changed to add without carry
- add a,%1
-}
-
-replace {
- clr c
- mov a,%1
- addc a,%2
-} by {
- ; Peephole 146 changed to add without carry
- mov a,%1
- add a,%2
-}
-
-replace {
- orl r%1,a
-} by {
- ; Peephole 147 changed target address mode r%1 to ar%1
- orl ar%1,a
-}
-
-replace {
- anl r%1,a
-} by {
- ; Peephole 148 changed target address mode r%1 to ar%1
- anl ar%1,a
-}
-
-replace {
- xrl r%1,a
-} by {
- ; Peephole 149 changed target address mode r%1 to ar%1
- xrl ar%1,a
-}
-
-replace {
- mov %1,dpl
- mov dpl,%1
-%9:
- ret
-} by {
- ; Peephole 150 removed misc moves via dpl before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov dpl,%1
- mov dph,%2
-%9:
- ret
-} by {
- ; Peephole 151 removed misc moves via dph, dpl before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov dpl,%1
-%9:
- ret
-} by {
- ; Peephole 152 removed misc moves via dph, dpl before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov %3,b
- mov dpl,%1
- mov dph,%2
- mov b,%3
-%9:
- ret
-} by {
- ; Peephole 153 removed misc moves via dph, dpl, b before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov %3,b
- mov dpl,%1
-%9:
- ret
-} by {
- ; Peephole 154 removed misc moves via dph, dpl, b before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov %3,b
- mov dpl,%1
- mov dph,%2
-%9:
- ret
-} by {
- ; Peephole 155 removed misc moves via dph, dpl, b before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov %3,b
- mov %4,a
- mov dpl,%1
- mov dph,%2
- mov b,%3
- mov a,%4
-%9:
- ret
-} by {
- ; Peephole 156 removed misc moves via dph, dpl, b, a before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov %3,b
- mov %4,a
- mov dpl,%1
- mov dph,%2
-%9:
- ret
-} by {
- ; Peephole 157 removed misc moves via dph, dpl, b, a before return
-%9:
- ret
-}
-
-replace {
- mov %1,dpl
- mov %2,dph
- mov %3,b
- mov %4,a
- mov dpl,%1
-%9:
- ret } by {
- ; Peephole 158 removed misc moves via dph, dpl, b, a before return
-%9:
- ret }
-
-replace {
- mov %1,#%2
- xrl %1,#0x80
-} by {
- ; Peephole 159 avoided xrl during execution
- mov %1,#(%2 ^ 0x80)
-}
-
-replace {
- jnc %1
- sjmp %2
-%1:
-} by {
- ; Peephole 160 removed sjmp by inverse jump logic
- jc %2
-%1:}
-
-replace {
- jc %1
- sjmp %2
-%1:
-} by {
- ; Peephole 161 removed sjmp by inverse jump logic
- jnc %2
-%1:}
-
-replace {
- jnz %1
- sjmp %2
-%1:
-} by {
- ; Peephole 162 removed sjmp by inverse jump logic
- jz %2
-%1:}
-
-replace {
- jz %1
- sjmp %2
-%1:
-} by {
- ; Peephole 163 removed sjmp by inverse jump logic
- jnz %2
-%1:}
-
-replace {
- jnb %3,%1
- sjmp %2
-%1:
-} by {
- ; Peephole 164 removed sjmp by inverse jump logic
- jb %3,%2
-%1:
-}
-
-replace {
- jb %3,%1
- sjmp %2
-%1:
-} by {
- ; Peephole 165 removed sjmp by inverse jump logic
- jnb %3,%2
-%1:
-}
-
-replace {
- mov %1,%2
- mov %3,%1
- mov %2,%1
-} by {
- ; Peephole 166 removed redundant mov
- mov %1,%2
- mov %3,%1 }
-
-replace {
- mov c,%1
- cpl c
- mov %1,c
-} by {
- ; Peephole 167 removed redundant bit moves (c not set to %1)
- cpl %1 }
-
-replace {
- jnb %1,%2
- sjmp %3
-%2:} by {
- ; Peephole 168 jump optimization
- jb %1,%3
-%2:}
-
-replace {
- jb %1,%2
- sjmp %3
-%2:} by {
- ; Peephole 169 jump optimization
- jnb %1,%3
-%2:}
-
-replace {
- clr a
- cjne %1,%2,%3
- cpl a
-%3:
- jz %4
-} by {
- ; Peephole 170 jump optimization
- cjne %1,%2,%4
-%3:}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %9,%10,%3
- cpl a
-%3:
- jz %4
-} by {
- ; Peephole 171 jump optimization
- cjne %1,%2,%4
- cjne %9,%10,%4
-%3:}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %9,%10,%3
- cjne %11,%12,%3
- cpl a
-%3:
- jz %4
-} by {
- ; Peephole 172 jump optimization
- cjne %1,%2,%4
- cjne %9,%10,%4
- cjne %11,%12,%4
-%3:}
-
-replace {
- clr a
- cjne %1,%2,%3
- cjne %9,%10,%3
- cjne %11,%12,%3
- cjne %13,%14,%3
- cpl a
-%3:
- jz %4
-} by {
- ; Peephole 173 jump optimization
- cjne %1,%2,%4
- cjne %9,%10,%4
- cjne %11,%12,%4
- cjne %13,%14,%4
-%3:}
-
-replace {
- mov r%1,%2
- clr c
- mov a,r%1
- subb a,#0x01
- mov %2,a
-} by {
- ; Peephole 174 optimized decrement (acc not set to %2, flags undefined)
- mov r%1,%2
- dec %2
-}
-
-
-replace {
- mov r%1,%2
- mov a,r%1
- add a,#0x01
- mov %2,a
-} by {
- ; Peephole 175 optimized increment (acc not set to %2, flags undefined)
- mov r%1,%2
- inc %2
-}
-
-replace {
- mov %1,@r%2
- inc %1
- mov @r%2,%1
-} by {
- ; Peephole 176 optimized increment, removed redundant mov
- inc @r%2
- mov %1,@r%2
-}
-
-replace {
- mov %1,%2
- mov %2,%1
-} by {
- ; Peephole 177 removed redundant mov
- mov %1,%2
-}
-
-replace {
- mov a,%1
- mov b,a
- mov a,%2
-} by {
- ; Peephole 178 removed redundant mov
- mov b,%1
- mov a,%2
-}
-
-// rules 179-182 provided by : Frieder <fe@lake.iup.uni-heidelberg.de>
-// saving 2 byte, 1 cycle
-replace {
- mov b,#0x00
- mov a,#0x00
-} by {
- ; Peephole 179 changed mov to clr
- clr a
- mov b,a
-}
-
-// saving 1 byte, 0 cycles
-replace {
- mov a,#0x00
-} by {
- ; Peephole 180 changed mov to clr
- clr a
-}
-
-// saving 3 byte, 2 cycles, return(NULL) profits here
-replace {
- mov dpl,#0x00
- mov dph,#0x00
-} by {
- ; Peephole 181 used 16 bit load of dptr
- mov dptr,#0x0000
-}
-
-// saving 3 byte, 2 cycles, return(float_constant) profits here
-replace {
- mov dpl,#%1
- mov dph,#%2
-} by {
- ; Peephole 182 used 16 bit load of dptr
- mov dptr,#(((%2)<<8) + %1)
-}
-
-replace {
- anl %1,#%2
- anl %1,#%3
-} by {
- ; Peephole 183 avoided anl during execution
- anl %1,#(%2 & %3)
-}
-
-replace {
- mov %1,a
- cpl a
- mov %1,a
-} by {
- ; Peephole 184 removed redundant mov
- cpl a
- mov %1,a
-}
-
-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
-}
-
-replace {
- add a,#%1
- mov dpl,a
- clr a
- addc a,#(%1 >> 8)
- mov dph,a
- clr a
- movc a,@a+dptr
- mov %2,a
- inc dptr
- clr a
- movc a,@a+dptr
- mov %3,a
- inc dptr
- clr a
- movc a,@a+dptr
- mov %4,a
- inc dptr
- clr a
-} by {
- ; Peephole 186.a optimized movc sequence
- mov dptr,#%1
- mov b,acc
- movc a,@a+dptr
- mov %2,a
- mov acc,b
- inc dptr
- movc a,@a+dptr
- mov %3,a
- mov acc,b
- inc dptr
- mov %4,a
- mov acc,b
- inc dptr
-}
-
-replace {
- add a,#%1
- mov dpl,a
- clr a
- addc a,#(%1 >> 8)
- mov dph,a
- clr a
- movc a,@a+dptr
- mov %2,a
- inc dptr
- clr a
- movc a,@a+dptr
- mov %3,a
- inc dptr
- clr a
-} by {
- ; Peephole 186.b optimized movc sequence
- mov dptr,#%1
- mov b,acc
- movc a,@a+dptr
- mov %2,a
- mov acc,b
- inc dptr
- movc a,@a+dptr
- mov %3,a
- mov acc,b
- inc dptr
-}
-
-replace {
- add a,#%1
- mov dpl,a
- clr a
- addc a,#(%1 >> 8)
- mov dph,a
- clr a
- movc a,@a+dptr
- mov %2,a
- inc dptr
- clr a
-} by {
- ; Peephole 186.c optimized movc sequence
- mov dptr,#%1
- mov b,acc
- movc a,@a+dptr
- mov %2,a
- mov acc,b
- inc dptr
-}
-
-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 optimized movc sequence
- mov dptr,#%1
- movc a,@a+dptr
-}
-
-replace {
- mov r%1,%2
- anl ar%1,#%3
- mov a,r%1
-} by {
- ; Peephole 187 used a instead of ar%1 for anl
- mov a,%2
- anl a,#%3
- mov r%1,a
-}
-
-replace {
- mov %1,a
- mov dptr,%2
- movc a,@a+dptr
- mov %1,a
-} by {
- ; Peephole 188 removed redundant mov
- mov dptr,%2
- movc a,@a+dptr
- mov %1,a
-}
-
-replace {
- anl a,#0x0f
- mov %1,a
- mov a,#0x0f
- anl a,%1
-} by {
- ; Peephole 189 removed redundant mov and anl
- anl a,#0x0f
- mov %1,a
-}
-
-// rules 190 & 191 need to be in order
-replace {
- mov a,%1
- lcall __gptrput
- mov a,%1
-} by {
- ; Peephole 190 removed redundant mov
- mov a,%1
- lcall __gptrput
-}
-
-replace {
- mov %1,a
- mov dpl,%2
- mov dph,%3
- mov b,%4
- mov a,%1
-} by {
- ; Peephole 191 removed redundant mov
- mov %1,a
- mov dpl,%2
- mov dph,%3
- mov b,%4
-}
-
-replace {
- mov r%1,a
- mov @r%2,ar%1
-} by {
- ; Peephole 192 used a instead of ar%1 as source
- mov r%1,a
- mov @r%2,a
-}
-
-replace {
- jnz %3
- mov a,%4
- jnz %3
- mov a,%9
- jnz %3
- mov a,%12
- cjne %13,%14,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 193.a optimized misc jump sequence
- jnz %8
- mov a,%4
- jnz %8
- mov a,%9
- jnz %8
- mov a,%12
- cjne %13,%14,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- mov a,%4
- cjne %5,%6,%3
- mov a,%9
- cjne %10,%11,%3
- mov a,%12
- cjne %13,%14,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 193 optimized misc jump sequence
- cjne %1,%2,%8
- mov a,%4
- cjne %5,%6,%8
- mov a,%9
- cjne %10,%11,%8
- mov a,%12
- cjne %13,%14,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- cjne %5,%6,%3
- cjne %10,%11,%3
- cjne %13,%14,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 194 optimized misc jump sequence
- cjne %1,%2,%8
- cjne %5,%6,%8
- cjne %10,%11,%8
- cjne %13,%14,%8
- sjmp %7
-%3:
-}
-
-replace {
- jnz %3
- mov a,%4
- jnz %3
- mov a,%9
- cjne %10,%11,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 195.a optimized misc jump sequence
- jnz %8
- mov a,%4
- jnz %8
- mov a,%9
- cjne %10,%11,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- mov a,%4
- cjne %5,%6,%3
- mov a,%9
- cjne %10,%11,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 195 optimized misc jump sequence
- cjne %1,%2,%8
- mov a,%4
- cjne %5,%6,%8
- mov a,%9
- cjne %10,%11,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- cjne %5,%6,%3
- cjne %10,%11,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 196 optimized misc jump sequence
- cjne %1,%2,%8
- cjne %5,%6,%8
- cjne %10,%11,%8
- sjmp %7
-%3:
-}
-
-replace {
- jnz %3
- mov a,%4
- cjne %5,%6,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 197.a optimized misc jump sequence
- jnz %8
- mov a,%4
- cjne %5,%6,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- mov a,%4
- cjne %5,%6,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 197 optimized misc jump sequence
- cjne %1,%2,%8
- mov a,%4
- cjne %5,%6,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- cjne %5,%6,%3
- sjmp %7
-%3:
- sjmp %8
-} by {
- ; Peephole 198 optimized misc jump sequence
- cjne %1,%2,%8
- cjne %5,%6,%8
- sjmp %7
-%3:
-}
-
-replace {
- cjne %1,%2,%3
- sjmp %4
-%3:
- sjmp %5
-} by {
- ; Peephole 199 optimized misc jump sequence
- cjne %1,%2,%5
- sjmp %4
-%3:
-}
-
-replace {
- sjmp %1
-%1:
-} by {
- ; Peephole 200 removed redundant sjmp
-%1:
-}
-
-replace {
- sjmp %1
-%2:
-%1:
-} by {
- ; Peephole 201 removed redundant sjmp
-%2:
-%1:
-}
-
-replace {
- push acc
- mov dptr,%1
- pop acc
-} by {
- ; Peephole 202 removed redundant push pop
- mov dptr,%1
-}
-
-replace {
- mov r%1,_spx
- lcall %2
- mov r%1,_spx
-} by {
- ; Peephole 203 removed mov r%1,_spx
- lcall %2
-}
-
-replace {
- mov %1,a
- add a,acc
- mov %1,a
-} by {
- ; Peephole 204 removed redundant mov
- add a,acc
- mov %1,a
-}
-
-replace {
- djnz %1,%2
- sjmp %3
-%2:
- sjmp %4
-%3:
-} by {
- ; Peephole 205 optimized misc jump sequence
- djnz %1,%4
-%2:
-%3:
-}
-
-replace {
- mov %1,%1
-} by {
- ; Peephole 206 removed redundant mov %1,%1
-}
-
-replace {
- mov a,_bp
- add a,#0x00
- mov %1,a
-} by {
- ; Peephole 207 removed zero add (acc not set to %1, flags undefined)
- mov %1,_bp
-}
-
-replace {
- push acc
- mov r%1,_bp
- pop acc
-} by {
- ; Peephole 208 removed redundant push pop
- mov r%1,_bp
-}
-
-replace {
- mov a,_bp
- add a,#0x00
- inc a
- mov %1,a
-} by {
- ; Peephole 209 optimized increment (acc not set to %1, flags undefined)
- mov %1,_bp
- inc %1
-}
-
-replace {
- mov dptr,#((((%1 >> 8)) <<8) + %1)
-} by {
- ; Peephole 210 simplified expression
- mov dptr,#%1
-}
-
-replace {
- push %1
- pop %1
-} by {
- ; Peephole 211 removed redundant push %1 pop %1
-}
-
-replace {
- mov a,_bp
- add a,#0x01
- mov r%1,a
-} by {
- ; Peephole 212 reduced add sequence to inc
- mov r%1,_bp
- inc r%1
-}
-
-replace {
- mov %1,#(( %2 >> 8 ) ^ 0x80)
-} by {
- mov %1,#(%2 >> 8)
- xrl %1,#0x80
-}
-
-replace {
- mov %1,#(( %2 + %3 >> 8 ) ^ 0x80)
-} by {
- mov %1,#((%2 + %3) >> 8)
- xrl %1,#0x80
-}
-
-replace {
- mov %1,a
- mov a,%2
- add a,%1
-} by {
- ; Peephole 214 reduced some extra movs
- mov %1,a
- add a,%2
-} if operandsNotSame
-
-replace {
- mov %1,a
- add a,%2
- mov %1,a
-} by {
- ; Peephole 215 removed some movs
- add a,%2
- mov %1,a
-} if operandsNotSame
-
-replace {
- mov r%1,%2
- clr a
- inc r%1
- mov @r%1,a
- dec r%1
- mov @r%1,a
-} by {
- ; Peephole 216 simplified clear (2bytes)
- mov r%1,%2
- clr a
- mov @r%1,a
- inc r%1
- mov @r%1,a
-}
-
-replace {
- mov r%1,%2
- clr a
- inc r%1
- inc r%1
- mov @r%1,a
- dec r%1
- mov @r%1,a
- dec r%1
- mov @r%1,a
-} by {
- ; Peephole 217 simplified clear (3bytes)
- mov r%1,%2
- clr a
- mov @r%1,a
- inc r%1
- mov @r%1,a
- inc r%1
- mov @r%1,a
-}
-
-replace {
- mov r%1,%2
- clr a
- inc r%1
- inc r%1
- inc r%1
- mov @r%1,a
- dec r%1
- mov @r%1,a
- dec r%1
- mov @r%1,a
- dec r%1
- mov @r%1,a
-} by {
- ; Peephole 218 simplified clear (4bytes)
- mov r%1,%2
- clr a
- mov @r%1,a
- inc r%1
- mov @r%1,a
- inc r%1
- mov @r%1,a
- inc r%1
- mov @r%1,a
-}
\ No newline at end of file
+++ /dev/null
-/* Generated file DO NOT Edit */
-/* To Make changes to rules */
-/* edit file SDCCpeeph.def */
-"\n"
-"\n"
-"replace restart {\n"
-" xch a,%1\n"
-" xch a,%1\n"
-"} by {\n"
-" ; Peephole 2.a removed redundant xch xch\n"
-"}\n"
-"\n"
-"replace restart {\n"
-" mov %1,#0x00\n"
-" mov a,#0x00\n"
-"} by {\n"
-" ; Peephole 3.a changed mov to clr\n"
-" clr a\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace restart {\n"
-" mov %1,#0x00\n"
-" clr a\n"
-"} by {\n"
-" ; Peephole 3.b changed mov to clr\n"
-" clr a\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace restart {\n"
-" mov %1,#0x00\n"
-" mov %2,#0x00\n"
-" mov a,%3\n"
-"} by {\n"
-" ; Peephole 3.c changed mov to clr\n"
-" clr a\n"
-" mov %1,a\n"
-" mov %2,a\n"
-" mov a,%3\n"
-"}\n"
-"\n"
-"\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" mov dptr,#%2\n"
-" mov a,%1\n"
-" movx @dptr,a\n"
-"} by {\n"
-" ; Peephole 100 removed redundant mov\n"
-" mov %1,a\n"
-" mov dptr,#%2\n"
-" movx @dptr,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,acc\n"
-"} by {\n"
-" ; Peephole 100.a removed redundant mov\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,%1\n"
-" movx @dptr,a\n"
-" inc dptr\n"
-" mov a,%1\n"
-" movx @dptr,a\n"
-"} by {\n"
-" ; Peephole 101 removed redundant mov\n"
-" mov a,%1\n"
-" movx @dptr,a\n"
-" inc dptr\n"
-" movx @dptr,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,%2\n"
-" ljmp %3\n"
-"%4:\n"
-" mov %1,%5\n"
-"%3:\n"
-" mov dpl,%1\n"
-"%7:\n"
-" mov sp,bp\n"
-" pop bp\n"
-"} by {\n"
-" ; Peephole 102 removed redundant mov\n"
-" mov dpl,%2\n"
-" ljmp %3\n"
-"%4:\n"
-" mov dpl,%5\n"
-"%3:\n"
-"%7:\n"
-" mov sp,bp\n"
-" pop bp\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,%2\n"
-" ljmp %3\n"
-"%4:\n"
-" mov a%1,%5\n"
-"%3:\n"
-" mov dpl,%1\n"
-"%7:\n"
-" mov sp,bp\n"
-" pop bp\n"
-"} by {\n"
-" ; Peephole 103 removed redundant mov\n"
-" mov dpl,%2\n"
-" ljmp %3\n"
-"%4:\n"
-" mov dpl,%5\n"
-"%3:\n"
-"%7:\n"
-" mov sp,bp\n"
-" pop bp\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,bp\n"
-" clr c\n"
-" add a,#0x01\n"
-" mov r%1,a\n"
-"} by {\n"
-" ; Peephole 104 optimized increment (acc not set to r%1, flags undefined)\n"
-" mov r%1,bp\n"
-" inc r%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" mov a,%1\n"
-"} by {\n"
-" ; Peephole 105 removed redundant mov\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" clr c\n"
-" mov a,%1\n"
-"} by {\n"
-" ; Peephole 106 removed redundant mov \n"
-" mov %1,a\n"
-" clr c\n"
-"}\n"
-"\n"
-"replace {\n"
-" ljmp %1\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 107 removed redundant ljmp\n"
-"%1:\n"
-"}\n"
-"\n"
-"replace {\n"
-" jc %1\n"
-" ljmp %5\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 108 removed ljmp by inverse jump logic\n"
-" jnc %5\n"
-"%1:\n"
-"} if labelInRange\n"
-"\n"
-"replace {\n"
-" jz %1\n"
-" ljmp %5\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 109 removed ljmp by inverse jump logic\n"
-" jnz %5\n"
-"%1:\n"
-"} if labelInRange\n"
-"\n"
-"replace {\n"
-" jnz %1\n"
-" ljmp %5\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 110 removed ljmp by inverse jump logic\n"
-" jz %5\n"
-"%1:\n"
-"} if labelInRange\n"
-"\n"
-"replace {\n"
-" jb %1,%2\n"
-" ljmp %5\n"
-"%2:\n"
-"} by {\n"
-" ; Peephole 111 removed ljmp by inverse jump logic\n"
-" jnb %1,%5\n"
-"%2:\n"
-"} if labelInRange\n"
-"\n"
-"replace {\n"
-" jnb %1,%2\n"
-" ljmp %5\n"
-"%2:\n"
-"} by {\n"
-" ; Peephole 112 removed ljmp by inverse jump logic\n"
-" jb %1,%5\n"
-"%2:\n"
-"} if labelInRange\n"
-"\n"
-"replace {\n"
-" ljmp %5\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 132 changed ljmp to sjmp\n"
-" sjmp %5\n"
-"%1:\n"
-"} if labelInRange\n"
-"\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cpl a\n"
-"%3:\n"
-" rrc a\n"
-" mov %4,c\n"
-"} by {\n"
-" ; Peephole 113 optimized misc sequence\n"
-" clr %4\n"
-" cjne %1,%2,%3\n"
-" setb %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cpl a\n"
-"%3:\n"
-" rrc a\n"
-" mov %4,c\n"
-"} by {\n"
-" ; Peephole 114 optimized misc sequence\n"
-" clr %4\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" setb %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cpl a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 115 jump optimization \n"
-" cjne %1,%2,%3\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cpl a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 116 jump optimization\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cjne %11,%12,%3\n"
-" cpl a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 117 jump optimization\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cjne %11,%12,%3\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cjne %11,%12,%3\n"
-" cjne %13,%14,%3\n"
-" cpl a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 118 jump optimization\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cjne %11,%12,%3\n"
-" cjne %13,%14,%3\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" clr a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 119 jump optimization\n"
-" cjne %1,%2,%4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" clr a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 120 jump optimization\n"
-" cjne %1,%2,%4\n"
-" cjne %10,%11,%4\n"
-"%3:\n"
-"}\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %12,%13,%3\n"
-" clr a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 121 jump optimization\n"
-" cjne %1,%2,%4\n"
-" cjne %10,%11,%4\n"
-" cjne %12,%13,%4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %12,%13,%3\n"
-" cjne %14,%15,%3\n"
-" clr a\n"
-"%3:\n"
-" jnz %4\n"
-"} by {\n"
-" ; Peephole 122 jump optimization\n"
-" cjne %1,%2,%4\n"
-" cjne %10,%11,%4\n"
-" cjne %12,%13,%4\n"
-" cjne %14,%15,%4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" clr a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 123 jump optimization\n"
-" cjne %1,%2,%3\n"
-" smp %4\n"
-"%3:\n"
-"}\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" clr a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 124 jump optimization\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" smp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %12,%13,%3\n"
-" clr a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 125 jump optimization\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %12,%13,%3\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,#0x01\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %12,%13,%3\n"
-" cjne %14,%15,%3\n"
-" clr a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 126 jump optimization\n"
-" cjne %1,%2,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %12,%13,%3\n"
-" cjne %14,%15,%3\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" push psw\n"
-" mov psw,%1\n"
-" push bp\n"
-" mov bp,%2\n"
-"%3:\n"
-" mov %2,bp\n"
-" pop bp\n"
-" pop psw\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 127 removed misc sequence\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" rlc a\n"
-" jz %1\n"
-"} by {\n"
-" ; Peephole 128 jump optimization\n"
-" jnc %1\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" rlc a\n"
-" jnz %1\n"
-"} by {\n"
-" ; Peephole 129 jump optimization\n"
-" jc %1\n"
-"}\n"
-"\n"
-"replace { \n"
-" mov r%1,@r%2\n"
-"} by {\n"
-" ; Peephole 130 changed target address mode r%1 to ar%1\n"
-" mov ar%1,@r%2\n"
-"}\n"
-"\n"
-"replace { \n"
-" mov a,%1\n"
-" subb a,#0x01\n"
-" mov %2,a\n"
-" mov %1,%2\n"
-"} by {\n"
-" ; Peephole 131 optimized decrement (not caring for c)\n"
-" dec %1 \n"
-" mov %2,%1 \n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" mov ar%3,@r%1\n"
-" inc r%3\n"
-" mov r%4,%2\n"
-" mov @r%4,ar%3\n"
-"} by {\n"
-" ; Peephole 133 removed redundant moves\n"
-" mov r%1,%2\n"
-" inc @r%1\n"
-" mov ar%3,@r%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" mov ar%3,@r%1\n"
-" dec r%3\n"
-" mov r%4,%2\n"
-" mov @r%4,ar%3\n"
-"} by {\n"
-" ; Peephole 134 removed redundant moves\n"
-" mov r%1,%2\n"
-" dec @r%1\n"
-" mov ar%3,@r%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,a\n"
-" mov a,r%2\n"
-" orl a,r%1\n"
-"} by {\n"
-" ; Peephole 135 removed redundant mov\n"
-" mov r%1,a\n"
-" orl a,r%2\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" mov dpl,%2\n"
-" mov dph,%3\n"
-" mov a,%1\n"
-"} by {\n"
-" ; Peephole 136 removed redundant moves\n"
-" mov %1,a\n"
-" mov dpl,%2\n"
-" mov dph,%3\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov b,#0x00\n"
-" mov a,%1\n"
-" cjne %2,%3,%4\n"
-" mov b,#0x01\n"
-"%4:\n"
-" mov a,b\n"
-" jz %5\n"
-"} by {\n"
-" ; Peephole 137 optimized misc jump sequence\n"
-" mov a,%1\n"
-" cjne %2,%3,%5\n"
-"%4:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov b,#0x00\n"
-" mov a,%1\n"
-" cjne %2,%3,%4\n"
-" mov b,#0x01\n"
-"%4:\n"
-" mov a,b\n"
-" jnz %5\n"
-"} by {\n"
-" ; Peephole 138 optimized misc jump sequence\n"
-" mov a,%1\n"
-" cjne %2,%3,%4\n"
-" sjmp %5\n"
-"%4:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,a\n"
-" anl ar%1,%2\n"
-" mov a,r%1\n"
-"} by {\n"
-" ; Peephole 139 removed redundant mov\n"
-" anl a,%2\n"
-" mov r%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,a\n"
-" orl ar%1,%2\n"
-" mov a,r%1\n"
-"} by {\n"
-" ; Peephole 140 removed redundant mov\n"
-" orl a,%2\n"
-" mov r%1,a }\n"
-"\n"
-"replace {\n"
-" mov r%1,a\n"
-" xrl ar%1,%2\n"
-" mov a,r%1\n"
-"} by {\n"
-" ; Peephole 141 removed redundant mov\n"
-" xrl a,%2\n"
-" mov r%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,a\n"
-" mov r%2,ar%1\n"
-" mov ar%1,@r%2\n"
-"} by {\n"
-" ; Peephole 142 removed redundant moves\n"
-" mov r%2,a\n"
-" mov ar%1,@r%2\n"
-"}\n"
-"\n"
-"replace {\n"
-" rlc a\n"
-" mov acc.0,c\n"
-"} by {\n"
-" ; Peephole 143 converted rlc to rl\n"
-" rl a\n"
-"}\n"
-"\n"
-"replace {\n"
-" rrc a\n"
-" mov acc.7,c\n"
-"} by {\n"
-" ; Peephole 144 converted rrc to rc\n"
-" rr a\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr c\n"
-" addc a,%1\n"
-"} by {\n"
-" ; Peephole 145 changed to add without carry \n"
-" add a,%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" clr c\n"
-" mov a,%1\n"
-" addc a,%2\n"
-"} by {\n"
-" ; Peephole 146 changed to add without carry\n"
-" mov a,%1\n"
-" add a,%2\n"
-"}\n"
-"\n"
-"replace {\n"
-" orl r%1,a\n"
-"} by {\n"
-" ; Peephole 147 changed target address mode r%1 to ar%1\n"
-" orl ar%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" anl r%1,a\n"
-"} by {\n"
-" ; Peephole 148 changed target address mode r%1 to ar%1\n"
-" anl ar%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" xrl r%1,a\n"
-"} by {\n"
-" ; Peephole 149 changed target address mode r%1 to ar%1\n"
-" xrl ar%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov dpl,%1\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 150 removed misc moves via dpl before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov dpl,%1\n"
-" mov dph,%2\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 151 removed misc moves via dph, dpl before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov dpl,%1\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 152 removed misc moves via dph, dpl before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov %3,b\n"
-" mov dpl,%1\n"
-" mov dph,%2\n"
-" mov b,%3\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 153 removed misc moves via dph, dpl, b before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov %3,b\n"
-" mov dpl,%1\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 154 removed misc moves via dph, dpl, b before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov %3,b\n"
-" mov dpl,%1\n"
-" mov dph,%2\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 155 removed misc moves via dph, dpl, b before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov %3,b\n"
-" mov %4,a\n"
-" mov dpl,%1\n"
-" mov dph,%2\n"
-" mov b,%3\n"
-" mov a,%4\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 156 removed misc moves via dph, dpl, b, a before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov %3,b\n"
-" mov %4,a\n"
-" mov dpl,%1\n"
-" mov dph,%2\n"
-"%9:\n"
-" ret\n"
-"} by {\n"
-" ; Peephole 157 removed misc moves via dph, dpl, b, a before return\n"
-"%9:\n"
-" ret\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,dpl\n"
-" mov %2,dph\n"
-" mov %3,b\n"
-" mov %4,a\n"
-" mov dpl,%1\n"
-"%9:\n"
-" ret } by {\n"
-" ; Peephole 158 removed misc moves via dph, dpl, b, a before return\n"
-"%9:\n"
-" ret }\n"
-"\n"
-"replace {\n"
-" mov %1,#%2\n"
-" xrl %1,#0x80\n"
-"} by {\n"
-" ; Peephole 159 avoided xrl during execution\n"
-" mov %1,#(%2 ^ 0x80)\n"
-"}\n"
-"\n"
-"replace {\n"
-" jnc %1\n"
-" sjmp %2\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 160 removed sjmp by inverse jump logic\n"
-" jc %2\n"
-"%1:}\n"
-"\n"
-"replace {\n"
-" jc %1\n"
-" sjmp %2\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 161 removed sjmp by inverse jump logic\n"
-" jnc %2\n"
-"%1:}\n"
-"\n"
-"replace {\n"
-" jnz %1\n"
-" sjmp %2\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 162 removed sjmp by inverse jump logic\n"
-" jz %2\n"
-"%1:}\n"
-"\n"
-"replace {\n"
-" jz %1\n"
-" sjmp %2\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 163 removed sjmp by inverse jump logic\n"
-" jnz %2\n"
-"%1:}\n"
-"\n"
-"replace {\n"
-" jnb %3,%1\n"
-" sjmp %2\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 164 removed sjmp by inverse jump logic\n"
-" jb %3,%2\n"
-"%1:\n"
-"}\n"
-"\n"
-"replace {\n"
-" jb %3,%1\n"
-" sjmp %2\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 165 removed sjmp by inverse jump logic\n"
-" jnb %3,%2\n"
-"%1:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,%2\n"
-" mov %3,%1\n"
-" mov %2,%1\n"
-"} by {\n"
-" ; Peephole 166 removed redundant mov\n"
-" mov %1,%2\n"
-" mov %3,%1 }\n"
-"\n"
-"replace {\n"
-" mov c,%1\n"
-" cpl c\n"
-" mov %1,c\n"
-"} by {\n"
-" ; Peephole 167 removed redundant bit moves (c not set to %1)\n"
-" cpl %1 }\n"
-"\n"
-"replace {\n"
-" jnb %1,%2\n"
-" sjmp %3\n"
-"%2:} by {\n"
-" ; Peephole 168 jump optimization\n"
-" jb %1,%3\n"
-"%2:}\n"
-"\n"
-"replace {\n"
-" jb %1,%2\n"
-" sjmp %3\n"
-"%2:} by {\n"
-" ; Peephole 169 jump optimization\n"
-" jnb %1,%3\n"
-"%2:}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cpl a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 170 jump optimization\n"
-" cjne %1,%2,%4\n"
-"%3:}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cpl a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 171 jump optimization\n"
-" cjne %1,%2,%4\n"
-" cjne %9,%10,%4\n"
-"%3:}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cjne %11,%12,%3\n"
-" cpl a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 172 jump optimization\n"
-" cjne %1,%2,%4\n"
-" cjne %9,%10,%4\n"
-" cjne %11,%12,%4\n"
-"%3:}\n"
-"\n"
-"replace {\n"
-" clr a\n"
-" cjne %1,%2,%3\n"
-" cjne %9,%10,%3\n"
-" cjne %11,%12,%3\n"
-" cjne %13,%14,%3\n"
-" cpl a\n"
-"%3:\n"
-" jz %4\n"
-"} by {\n"
-" ; Peephole 173 jump optimization\n"
-" cjne %1,%2,%4\n"
-" cjne %9,%10,%4\n"
-" cjne %11,%12,%4\n"
-" cjne %13,%14,%4\n"
-"%3:}\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" clr c\n"
-" mov a,r%1\n"
-" subb a,#0x01\n"
-" mov %2,a\n"
-"} by {\n"
-" ; Peephole 174 optimized decrement (acc not set to %2, flags undefined)\n"
-" mov r%1,%2\n"
-" dec %2\n"
-"}\n"
-"\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" mov a,r%1\n"
-" add a,#0x01\n"
-" mov %2,a\n"
-"} by {\n"
-" ; Peephole 175 optimized increment (acc not set to %2, flags undefined)\n"
-" mov r%1,%2\n"
-" inc %2\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,@r%2\n"
-" inc %1\n"
-" mov @r%2,%1\n"
-"} by {\n"
-" ; Peephole 176 optimized increment, removed redundant mov\n"
-" inc @r%2\n"
-" mov %1,@r%2\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,%2\n"
-" mov %2,%1\n"
-"} by {\n"
-" ; Peephole 177 removed redundant mov\n"
-" mov %1,%2\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,%1\n"
-" mov b,a\n"
-" mov a,%2\n"
-"} by {\n"
-" ; Peephole 178 removed redundant mov\n"
-" mov b,%1\n"
-" mov a,%2\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov b,#0x00\n"
-" mov a,#0x00\n"
-"} by {\n"
-" ; Peephole 179 changed mov to clr\n"
-" clr a\n"
-" mov b,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,#0x00\n"
-"} by {\n"
-" ; Peephole 180 changed mov to clr\n"
-" clr a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov dpl,#0x00\n"
-" mov dph,#0x00\n"
-"} by {\n"
-" ; Peephole 181 used 16 bit load of dptr\n"
-" mov dptr,#0x0000\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov dpl,#%1\n"
-" mov dph,#%2\n"
-"} by {\n"
-" ; Peephole 182 used 16 bit load of dptr\n"
-" mov dptr,#(((%2)<<8) + %1)\n"
-"}\n"
-"\n"
-"replace {\n"
-" anl %1,#%2\n"
-" anl %1,#%3\n"
-"} by {\n"
-" ; Peephole 183 avoided anl during execution\n"
-" anl %1,#(%2 & %3)\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" cpl a\n"
-" mov %1,a\n"
-"} by {\n"
-" ; Peephole 184 removed redundant mov\n"
-" cpl a\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" inc %1\n"
-"} by {\n"
-" ; Peephole 185 changed order of increment (acc incremented also!)\n"
-" inc a\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" add a,#%1\n"
-" mov dpl,a\n"
-" clr a\n"
-" addc a,#(%1 >> 8)\n"
-" mov dph,a\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-" mov %2,a\n"
-" inc dptr\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-" mov %3,a\n"
-" inc dptr\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-" mov %4,a\n"
-" inc dptr\n"
-" clr a \n"
-"} by {\n"
-" ; Peephole 186.a optimized movc sequence\n"
-" mov dptr,#%1\n"
-" mov b,acc\n"
-" movc a,@a+dptr\n"
-" mov %2,a\n"
-" mov acc,b\n"
-" inc dptr \n"
-" movc a,@a+dptr\n"
-" mov %3,a\n"
-" mov acc,b\n"
-" inc dptr\n"
-" mov %4,a\n"
-" mov acc,b\n"
-" inc dptr\n"
-"}\n"
-"\n"
-"replace {\n"
-" add a,#%1\n"
-" mov dpl,a\n"
-" clr a\n"
-" addc a,#(%1 >> 8)\n"
-" mov dph,a\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-" mov %2,a\n"
-" inc dptr\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-" mov %3,a\n"
-" inc dptr\n"
-" clr a\n"
-"} by {\n"
-" ; Peephole 186.b optimized movc sequence\n"
-" mov dptr,#%1\n"
-" mov b,acc\n"
-" movc a,@a+dptr\n"
-" mov %2,a\n"
-" mov acc,b\n"
-" inc dptr \n"
-" movc a,@a+dptr\n"
-" mov %3,a\n"
-" mov acc,b\n"
-" inc dptr \n"
-"}\n"
-"\n"
-"replace {\n"
-" add a,#%1\n"
-" mov dpl,a\n"
-" clr a\n"
-" addc a,#(%1 >> 8)\n"
-" mov dph,a\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-" mov %2,a\n"
-" inc dptr\n"
-" clr a\n"
-"} by {\n"
-" ; Peephole 186.c optimized movc sequence\n"
-" mov dptr,#%1\n"
-" mov b,acc\n"
-" movc a,@a+dptr\n"
-" mov %2,a\n"
-" mov acc,b\n"
-" inc dptr\n"
-"}\n"
-"\n"
-"replace {\n"
-" add a,#%1\n"
-" mov dpl,a\n"
-" clr a\n"
-" addc a,#(%1 >> 8)\n"
-" mov dph,a\n"
-" clr a\n"
-" movc a,@a+dptr\n"
-"} by {\n"
-" ; Peephole 186 optimized movc sequence\n"
-" mov dptr,#%1\n"
-" movc a,@a+dptr\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" anl ar%1,#%3\n"
-" mov a,r%1\n"
-"} by {\n"
-" ; Peephole 187 used a instead of ar%1 for anl\n"
-" mov a,%2\n"
-" anl a,#%3\n"
-" mov r%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" mov dptr,%2\n"
-" movc a,@a+dptr\n"
-" mov %1,a\n"
-"} by {\n"
-" ; Peephole 188 removed redundant mov\n"
-" mov dptr,%2\n"
-" movc a,@a+dptr\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" anl a,#0x0f\n"
-" mov %1,a\n"
-" mov a,#0x0f\n"
-" anl a,%1\n"
-"} by {\n"
-" ; Peephole 189 removed redundant mov and anl\n"
-" anl a,#0x0f\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,%1\n"
-" lcall __gptrput\n"
-" mov a,%1\n"
-"} by {\n"
-" ; Peephole 190 removed redundant mov\n"
-" mov a,%1\n"
-" lcall __gptrput\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" mov dpl,%2\n"
-" mov dph,%3\n"
-" mov b,%4\n"
-" mov a,%1\n"
-"} by {\n"
-" ; Peephole 191 removed redundant mov\n"
-" mov %1,a\n"
-" mov dpl,%2\n"
-" mov dph,%3\n"
-" mov b,%4\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,a\n"
-" mov @r%2,ar%1\n"
-"} by {\n"
-" ; Peephole 192 used a instead of ar%1 as source\n"
-" mov r%1,a\n"
-" mov @r%2,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" jnz %3\n"
-" mov a,%4\n"
-" jnz %3\n"
-" mov a,%9\n"
-" jnz %3\n"
-" mov a,%12\n"
-" cjne %13,%14,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 193.a optimized misc jump sequence\n"
-" jnz %8\n"
-" mov a,%4\n"
-" jnz %8\n"
-" mov a,%9\n"
-" jnz %8\n"
-" mov a,%12\n"
-" cjne %13,%14,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" mov a,%4\n"
-" cjne %5,%6,%3\n"
-" mov a,%9\n"
-" cjne %10,%11,%3\n"
-" mov a,%12\n"
-" cjne %13,%14,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 193 optimized misc jump sequence\n"
-" cjne %1,%2,%8\n"
-" mov a,%4\n"
-" cjne %5,%6,%8\n"
-" mov a,%9\n"
-" cjne %10,%11,%8\n"
-" mov a,%12\n"
-" cjne %13,%14,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" cjne %5,%6,%3\n"
-" cjne %10,%11,%3\n"
-" cjne %13,%14,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 194 optimized misc jump sequence\n"
-" cjne %1,%2,%8\n"
-" cjne %5,%6,%8\n"
-" cjne %10,%11,%8\n"
-" cjne %13,%14,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" jnz %3\n"
-" mov a,%4\n"
-" jnz %3\n"
-" mov a,%9\n"
-" cjne %10,%11,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 195.a optimized misc jump sequence\n"
-" jnz %8\n"
-" mov a,%4\n"
-" jnz %8\n"
-" mov a,%9\n"
-" cjne %10,%11,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" mov a,%4\n"
-" cjne %5,%6,%3\n"
-" mov a,%9\n"
-" cjne %10,%11,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 195 optimized misc jump sequence\n"
-" cjne %1,%2,%8\n"
-" mov a,%4\n"
-" cjne %5,%6,%8\n"
-" mov a,%9\n"
-" cjne %10,%11,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" cjne %5,%6,%3\n"
-" cjne %10,%11,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 196 optimized misc jump sequence\n"
-" cjne %1,%2,%8\n"
-" cjne %5,%6,%8\n"
-" cjne %10,%11,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" jnz %3\n"
-" mov a,%4\n"
-" cjne %5,%6,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8 \n"
-"} by {\n"
-" ; Peephole 197.a optimized misc jump sequence\n"
-" jnz %8\n"
-" mov a,%4\n"
-" cjne %5,%6,%8\n"
-" sjmp %7\n"
-"%3: \n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" mov a,%4\n"
-" cjne %5,%6,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 197 optimized misc jump sequence\n"
-" cjne %1,%2,%8\n"
-" mov a,%4\n"
-" cjne %5,%6,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" cjne %5,%6,%3\n"
-" sjmp %7\n"
-"%3:\n"
-" sjmp %8\n"
-"} by {\n"
-" ; Peephole 198 optimized misc jump sequence\n"
-" cjne %1,%2,%8\n"
-" cjne %5,%6,%8\n"
-" sjmp %7\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" cjne %1,%2,%3\n"
-" sjmp %4\n"
-"%3:\n"
-" sjmp %5\n"
-"} by {\n"
-" ; Peephole 199 optimized misc jump sequence\n"
-" cjne %1,%2,%5\n"
-" sjmp %4\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" sjmp %1\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 200 removed redundant sjmp\n"
-"%1:\n"
-"}\n"
-"\n"
-"replace {\n"
-" sjmp %1\n"
-"%2:\n"
-"%1:\n"
-"} by {\n"
-" ; Peephole 201 removed redundant sjmp\n"
-"%2:\n"
-"%1:\n"
-"}\n"
-"\n"
-"replace {\n"
-" push acc\n"
-" mov dptr,%1\n"
-" pop acc\n"
-"} by {\n"
-" ; Peephole 202 removed redundant push pop\n"
-" mov dptr,%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,_spx\n"
-" lcall %2\n"
-" mov r%1,_spx\n"
-"} by {\n"
-" ; Peephole 203 removed mov r%1,_spx\n"
-" lcall %2\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" add a,acc\n"
-" mov %1,a\n"
-"} by {\n"
-" ; Peephole 204 removed redundant mov\n"
-" add a,acc\n"
-" mov %1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" djnz %1,%2\n"
-" sjmp %3\n"
-"%2:\n"
-" sjmp %4\n"
-"%3:\n"
-"} by {\n"
-" ; Peephole 205 optimized misc jump sequence\n"
-" djnz %1,%4\n"
-"%2:\n"
-"%3:\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,%1\n"
-"} by {\n"
-" ; Peephole 206 removed redundant mov %1,%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,_bp\n"
-" add a,#0x00\n"
-" mov %1,a\n"
-"} by {\n"
-" ; Peephole 207 removed zero add (acc not set to %1, flags undefined)\n"
-" mov %1,_bp\n"
-"}\n"
-"\n"
-"replace {\n"
-" push acc\n"
-" mov r%1,_bp\n"
-" pop acc\n"
-"} by {\n"
-" ; Peephole 208 removed redundant push pop\n"
-" mov r%1,_bp\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov a,_bp\n"
-" add a,#0x00\n"
-" inc a\n"
-" mov %1,a\n"
-"} by {\n"
-" ; Peephole 209 optimized increment (acc not set to %1, flags undefined)\n"
-" mov %1,_bp\n"
-" inc %1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov dptr,#((((%1 >> 8)) <<8) + %1)\n"
-"} by {\n"
-" ; Peephole 210 simplified expression\n"
-" mov dptr,#%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" push %1\n"
-" pop %1\n"
-"} by {\n"
-" ; Peephole 211 removed redundant push %1 pop %1 \n"
-"} \n"
-"\n"
-"replace {\n"
-" mov a,_bp\n"
-" add a,#0x01\n"
-" mov r%1,a\n"
-"} by {\n"
-" ; Peephole 212 reduced add sequence to inc\n"
-" mov r%1,_bp\n"
-" inc r%1\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,#(( %2 >> 8 ) ^ 0x80)\n"
-"} by { \n"
-" mov %1,#(%2 >> 8)\n"
-" xrl %1,#0x80\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,#(( %2 + %3 >> 8 ) ^ 0x80)\n"
-"} by { \n"
-" mov %1,#((%2 + %3) >> 8)\n"
-" xrl %1,#0x80\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" mov a,%2\n"
-" add a,%1\n"
-"} by {\n"
-" ; Peephole 214 reduced some extra movs\n"
-" mov %1,a\n"
-" add a,%2 \n"
-"} if operandsNotSame\n"
-"\n"
-"replace {\n"
-" mov %1,a\n"
-" add a,%2\n"
-" mov %1,a\n"
-"} by {\n"
-" ; Peephole 215 removed some movs\n"
-" add a,%2\n"
-" mov %1,a\n"
-"} if operandsNotSame\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" clr a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-" dec r%1\n"
-" mov @r%1,a\n"
-"} by {\n"
-" ; Peephole 216 simplified clear (2bytes)\n"
-" mov r%1,%2\n"
-" clr a\n"
-" mov @r%1,a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" clr a\n"
-" inc r%1\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-" dec r%1\n"
-" mov @r%1,a\n"
-" dec r%1\n"
-" mov @r%1,a\n"
-"} by {\n"
-" ; Peephole 217 simplified clear (3bytes)\n"
-" mov r%1,%2\n"
-" clr a\n"
-" mov @r%1,a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-"}\n"
-"\n"
-"replace {\n"
-" mov r%1,%2\n"
-" clr a\n"
-" inc r%1\n"
-" inc r%1\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-" dec r%1\n"
-" mov @r%1,a\n"
-" dec r%1\n"
-" mov @r%1,a\n"
-" dec r%1\n"
-" mov @r%1,a\n"
-"} by {\n"
-" ; Peephole 218 simplified clear (4bytes)\n"
-" mov r%1,%2\n"
-" clr a\n"
-" mov @r%1,a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-" inc r%1\n"
-" mov @r%1,a\n"
-"}\n"
all: $(LIB)
-$(LIB): $(OBJ)
+$(LIB): peeph.rul $(OBJ)
rm -f $(LIB)
ar r $(LIB) $(OBJ)
ranlib $(LIB)
+peeph.rul: peeph.def
+ $(AWK) -f ../SDCCpeeph.awk peeph.def > peeph.rul
+
include clean.mk
#include "main.h"
#include "ralloc.h"
+static char _defaultRules[] =
+{
+#include "peeph.rul"
+};
+
/* list of key words used by msc51 */
static char *_mcs51_keywords[] = {
"at",
{
_linkCmd
},
+ {
+ _defaultRules
+ },
{
/* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
1, 1, 2, 4, 1, 2, 3, 1, 4, 4
--- /dev/null
+//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 restart {
+ xch a,%1
+ xch a,%1
+} by {
+ ; Peephole 2.a removed redundant xch xch
+}
+
+replace restart {
+// saving 2 byte
+ mov %1,#0x00
+ mov a,#0x00
+} by {
+ ; Peephole 3.a changed mov to clr
+ clr a
+ mov %1,a
+}
+
+replace restart {
+// saving 1 byte
+ mov %1,#0x00
+ clr a
+} by {
+ ; Peephole 3.b changed mov to clr
+ clr a
+ mov %1,a
+}
+
+replace restart {
+// saving 1 byte, loosing 1 cycle but maybe allowing peephole 3.b to start
+ mov %1,#0x00
+ mov %2,#0x00
+ mov a,%3
+} by {
+ ; Peephole 3.c changed mov to clr
+ clr a
+ mov %1,a
+ mov %2,a
+ mov a,%3
+}
+
+
+
+replace {
+ mov %1,a
+ mov dptr,#%2
+ mov a,%1
+ movx @dptr,a
+} by {
+ ; Peephole 100 removed redundant mov
+ mov %1,a
+ mov dptr,#%2
+ movx @dptr,a
+}
+
+replace {
+ mov a,acc
+} by {
+ ; Peephole 100.a removed redundant mov
+}
+
+replace {
+ mov a,%1
+ movx @dptr,a
+ inc dptr
+ mov a,%1
+ movx @dptr,a
+} by {
+ ; Peephole 101 removed redundant mov
+ mov a,%1
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+}
+
+replace {
+ mov %1,%2
+ ljmp %3
+%4:
+ mov %1,%5
+%3:
+ mov dpl,%1
+%7:
+ mov sp,bp
+ pop bp
+} by {
+ ; Peephole 102 removed redundant mov
+ mov dpl,%2
+ ljmp %3
+%4:
+ mov dpl,%5
+%3:
+%7:
+ mov sp,bp
+ pop bp
+}
+
+replace {
+ mov %1,%2
+ ljmp %3
+%4:
+ mov a%1,%5
+%3:
+ mov dpl,%1
+%7:
+ mov sp,bp
+ pop bp
+} by {
+ ; Peephole 103 removed redundant mov
+ mov dpl,%2
+ ljmp %3
+%4:
+ mov dpl,%5
+%3:
+%7:
+ mov sp,bp
+ pop bp
+}
+
+replace {
+ mov a,bp
+ clr c
+ add a,#0x01
+ mov r%1,a
+} by {
+ ; Peephole 104 optimized increment (acc not set to r%1, flags undefined)
+ mov r%1,bp
+ inc r%1
+}
+
+replace {
+ mov %1,a
+ mov a,%1
+} by {
+ ; Peephole 105 removed redundant mov
+ mov %1,a
+}
+
+replace {
+ mov %1,a
+ clr c
+ mov a,%1
+} by {
+ ; Peephole 106 removed redundant mov
+ mov %1,a
+ clr c
+}
+
+replace {
+ ljmp %1
+%1:
+} by {
+ ; Peephole 107 removed redundant ljmp
+%1:
+}
+
+replace {
+ jc %1
+ ljmp %5
+%1:
+} by {
+ ; Peephole 108 removed ljmp by inverse jump logic
+ jnc %5
+%1:
+} if labelInRange
+
+replace {
+ jz %1
+ ljmp %5
+%1:
+} by {
+ ; Peephole 109 removed ljmp by inverse jump logic
+ jnz %5
+%1:
+} if labelInRange
+
+replace {
+ jnz %1
+ ljmp %5
+%1:
+} by {
+ ; Peephole 110 removed ljmp by inverse jump logic
+ jz %5
+%1:
+} if labelInRange
+
+replace {
+ jb %1,%2
+ ljmp %5
+%2:
+} by {
+ ; Peephole 111 removed ljmp by inverse jump logic
+ jnb %1,%5
+%2:
+} if labelInRange
+
+replace {
+ jnb %1,%2
+ ljmp %5
+%2:
+} by {
+ ; Peephole 112 removed ljmp by inverse jump logic
+ jb %1,%5
+%2:
+} if labelInRange
+
+replace {
+ ljmp %5
+%1:
+} by {
+ ; Peephole 132 changed ljmp to sjmp
+ sjmp %5
+%1:
+} if labelInRange
+
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cpl a
+%3:
+ rrc a
+ mov %4,c
+} by {
+ ; Peephole 113 optimized misc sequence
+ clr %4
+ cjne %1,%2,%3
+ setb %4
+%3:
+}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cpl a
+%3:
+ rrc a
+ mov %4,c
+} by {
+ ; Peephole 114 optimized misc sequence
+ clr %4
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ setb %4
+%3:
+}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cpl a
+%3:
+ jnz %4
+} by {
+ ; Peephole 115 jump optimization
+ cjne %1,%2,%3
+ sjmp %4
+%3:
+}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cpl a
+%3:
+ jnz %4
+} by {
+ ; Peephole 116 jump optimization
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ sjmp %4
+%3:
+}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cjne %11,%12,%3
+ cpl a
+%3:
+ jnz %4
+} by {
+ ; Peephole 117 jump optimization
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cjne %11,%12,%3
+ sjmp %4
+%3:
+}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cjne %11,%12,%3
+ cjne %13,%14,%3
+ cpl a
+%3:
+ jnz %4
+} by {
+ ; Peephole 118 jump optimization
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cjne %11,%12,%3
+ cjne %13,%14,%3
+ sjmp %4
+%3:
+}
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ clr a
+%3:
+ jnz %4
+} by {
+ ; Peephole 119 jump optimization
+ cjne %1,%2,%4
+%3:
+}
+
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ clr a
+%3:
+ jnz %4
+} by {
+ ; Peephole 120 jump optimization
+ cjne %1,%2,%4
+ cjne %10,%11,%4
+%3:
+}
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cjne %12,%13,%3
+ clr a
+%3:
+ jnz %4
+} by {
+ ; Peephole 121 jump optimization
+ cjne %1,%2,%4
+ cjne %10,%11,%4
+ cjne %12,%13,%4
+%3:
+}
+
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cjne %12,%13,%3
+ cjne %14,%15,%3
+ clr a
+%3:
+ jnz %4
+} by {
+ ; Peephole 122 jump optimization
+ cjne %1,%2,%4
+ cjne %10,%11,%4
+ cjne %12,%13,%4
+ cjne %14,%15,%4
+%3:
+}
+
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ clr a
+%3:
+ jz %4
+} by {
+ ; Peephole 123 jump optimization
+ cjne %1,%2,%3
+ smp %4
+%3:
+}
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ clr a
+%3:
+ jz %4
+} by {
+ ; Peephole 124 jump optimization
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ smp %4
+%3:
+}
+
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cjne %12,%13,%3
+ clr a
+%3:
+ jz %4
+} by {
+ ; Peephole 125 jump optimization
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cjne %12,%13,%3
+ sjmp %4
+%3:
+}
+
+replace {
+ mov a,#0x01
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cjne %12,%13,%3
+ cjne %14,%15,%3
+ clr a
+%3:
+ jz %4
+} by {
+ ; Peephole 126 jump optimization
+ cjne %1,%2,%3
+ cjne %10,%11,%3
+ cjne %12,%13,%3
+ cjne %14,%15,%3
+ sjmp %4
+%3:
+}
+
+replace {
+ push psw
+ mov psw,%1
+ push bp
+ mov bp,%2
+%3:
+ mov %2,bp
+ pop bp
+ pop psw
+ ret
+} by {
+ ; Peephole 127 removed misc sequence
+ ret
+}
+
+replace {
+ clr a
+ rlc a
+ jz %1
+} by {
+ ; Peephole 128 jump optimization
+ jnc %1
+}
+
+replace {
+ clr a
+ rlc a
+ jnz %1
+} by {
+ ; Peephole 129 jump optimization
+ jc %1
+}
+
+replace {
+ mov r%1,@r%2
+} by {
+ ; Peephole 130 changed target address mode r%1 to ar%1
+ mov ar%1,@r%2
+}
+
+replace {
+ mov a,%1
+ subb a,#0x01
+ mov %2,a
+ mov %1,%2
+} by {
+ ; Peephole 131 optimized decrement (not caring for c)
+ dec %1
+ mov %2,%1
+}
+
+replace {
+ mov r%1,%2
+ mov ar%3,@r%1
+ inc r%3
+ mov r%4,%2
+ mov @r%4,ar%3
+} by {
+ ; Peephole 133 removed redundant moves
+ mov r%1,%2
+ inc @r%1
+ mov ar%3,@r%1
+}
+
+replace {
+ mov r%1,%2
+ mov ar%3,@r%1
+ dec r%3
+ mov r%4,%2
+ mov @r%4,ar%3
+} by {
+ ; Peephole 134 removed redundant moves
+ mov r%1,%2
+ dec @r%1
+ mov ar%3,@r%1
+}
+
+replace {
+ mov r%1,a
+ mov a,r%2
+ orl a,r%1
+} by {
+ ; Peephole 135 removed redundant mov
+ mov r%1,a
+ orl a,r%2
+}
+
+replace {
+ mov %1,a
+ mov dpl,%2
+ mov dph,%3
+ mov a,%1
+} by {
+ ; Peephole 136 removed redundant moves
+ mov %1,a
+ mov dpl,%2
+ mov dph,%3
+}
+
+replace {
+ mov b,#0x00
+ mov a,%1
+ cjne %2,%3,%4
+ mov b,#0x01
+%4:
+ mov a,b
+ jz %5
+} by {
+ ; Peephole 137 optimized misc jump sequence
+ mov a,%1
+ cjne %2,%3,%5
+%4:
+}
+
+replace {
+ mov b,#0x00
+ mov a,%1
+ cjne %2,%3,%4
+ mov b,#0x01
+%4:
+ mov a,b
+ jnz %5
+} by {
+ ; Peephole 138 optimized misc jump sequence
+ mov a,%1
+ cjne %2,%3,%4
+ sjmp %5
+%4:
+}
+
+replace {
+ mov r%1,a
+ anl ar%1,%2
+ mov a,r%1
+} by {
+ ; Peephole 139 removed redundant mov
+ anl a,%2
+ mov r%1,a
+}
+
+replace {
+ mov r%1,a
+ orl ar%1,%2
+ mov a,r%1
+} by {
+ ; Peephole 140 removed redundant mov
+ orl a,%2
+ mov r%1,a }
+
+replace {
+ mov r%1,a
+ xrl ar%1,%2
+ mov a,r%1
+} by {
+ ; Peephole 141 removed redundant mov
+ xrl a,%2
+ mov r%1,a
+}
+
+replace {
+ mov r%1,a
+ mov r%2,ar%1
+ mov ar%1,@r%2
+} by {
+ ; Peephole 142 removed redundant moves
+ mov r%2,a
+ mov ar%1,@r%2
+}
+
+replace {
+ rlc a
+ mov acc.0,c
+} by {
+ ; Peephole 143 converted rlc to rl
+ rl a
+}
+
+replace {
+ rrc a
+ mov acc.7,c
+} by {
+ ; Peephole 144 converted rrc to rc
+ rr a
+}
+
+replace {
+ clr c
+ addc a,%1
+} by {
+ ; Peephole 145 changed to add without carry
+ add a,%1
+}
+
+replace {
+ clr c
+ mov a,%1
+ addc a,%2
+} by {
+ ; Peephole 146 changed to add without carry
+ mov a,%1
+ add a,%2
+}
+
+replace {
+ orl r%1,a
+} by {
+ ; Peephole 147 changed target address mode r%1 to ar%1
+ orl ar%1,a
+}
+
+replace {
+ anl r%1,a
+} by {
+ ; Peephole 148 changed target address mode r%1 to ar%1
+ anl ar%1,a
+}
+
+replace {
+ xrl r%1,a
+} by {
+ ; Peephole 149 changed target address mode r%1 to ar%1
+ xrl ar%1,a
+}
+
+replace {
+ mov %1,dpl
+ mov dpl,%1
+%9:
+ ret
+} by {
+ ; Peephole 150 removed misc moves via dpl before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov dpl,%1
+ mov dph,%2
+%9:
+ ret
+} by {
+ ; Peephole 151 removed misc moves via dph, dpl before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov dpl,%1
+%9:
+ ret
+} by {
+ ; Peephole 152 removed misc moves via dph, dpl before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov %3,b
+ mov dpl,%1
+ mov dph,%2
+ mov b,%3
+%9:
+ ret
+} by {
+ ; Peephole 153 removed misc moves via dph, dpl, b before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov %3,b
+ mov dpl,%1
+%9:
+ ret
+} by {
+ ; Peephole 154 removed misc moves via dph, dpl, b before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov %3,b
+ mov dpl,%1
+ mov dph,%2
+%9:
+ ret
+} by {
+ ; Peephole 155 removed misc moves via dph, dpl, b before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov %3,b
+ mov %4,a
+ mov dpl,%1
+ mov dph,%2
+ mov b,%3
+ mov a,%4
+%9:
+ ret
+} by {
+ ; Peephole 156 removed misc moves via dph, dpl, b, a before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov %3,b
+ mov %4,a
+ mov dpl,%1
+ mov dph,%2
+%9:
+ ret
+} by {
+ ; Peephole 157 removed misc moves via dph, dpl, b, a before return
+%9:
+ ret
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov %3,b
+ mov %4,a
+ mov dpl,%1
+%9:
+ ret } by {
+ ; Peephole 158 removed misc moves via dph, dpl, b, a before return
+%9:
+ ret }
+
+replace {
+ mov %1,#%2
+ xrl %1,#0x80
+} by {
+ ; Peephole 159 avoided xrl during execution
+ mov %1,#(%2 ^ 0x80)
+}
+
+replace {
+ jnc %1
+ sjmp %2
+%1:
+} by {
+ ; Peephole 160 removed sjmp by inverse jump logic
+ jc %2
+%1:}
+
+replace {
+ jc %1
+ sjmp %2
+%1:
+} by {
+ ; Peephole 161 removed sjmp by inverse jump logic
+ jnc %2
+%1:}
+
+replace {
+ jnz %1
+ sjmp %2
+%1:
+} by {
+ ; Peephole 162 removed sjmp by inverse jump logic
+ jz %2
+%1:}
+
+replace {
+ jz %1
+ sjmp %2
+%1:
+} by {
+ ; Peephole 163 removed sjmp by inverse jump logic
+ jnz %2
+%1:}
+
+replace {
+ jnb %3,%1
+ sjmp %2
+%1:
+} by {
+ ; Peephole 164 removed sjmp by inverse jump logic
+ jb %3,%2
+%1:
+}
+
+replace {
+ jb %3,%1
+ sjmp %2
+%1:
+} by {
+ ; Peephole 165 removed sjmp by inverse jump logic
+ jnb %3,%2
+%1:
+}
+
+replace {
+ mov %1,%2
+ mov %3,%1
+ mov %2,%1
+} by {
+ ; Peephole 166 removed redundant mov
+ mov %1,%2
+ mov %3,%1 }
+
+replace {
+ mov c,%1
+ cpl c
+ mov %1,c
+} by {
+ ; Peephole 167 removed redundant bit moves (c not set to %1)
+ cpl %1 }
+
+replace {
+ jnb %1,%2
+ sjmp %3
+%2:} by {
+ ; Peephole 168 jump optimization
+ jb %1,%3
+%2:}
+
+replace {
+ jb %1,%2
+ sjmp %3
+%2:} by {
+ ; Peephole 169 jump optimization
+ jnb %1,%3
+%2:}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cpl a
+%3:
+ jz %4
+} by {
+ ; Peephole 170 jump optimization
+ cjne %1,%2,%4
+%3:}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cpl a
+%3:
+ jz %4
+} by {
+ ; Peephole 171 jump optimization
+ cjne %1,%2,%4
+ cjne %9,%10,%4
+%3:}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cjne %11,%12,%3
+ cpl a
+%3:
+ jz %4
+} by {
+ ; Peephole 172 jump optimization
+ cjne %1,%2,%4
+ cjne %9,%10,%4
+ cjne %11,%12,%4
+%3:}
+
+replace {
+ clr a
+ cjne %1,%2,%3
+ cjne %9,%10,%3
+ cjne %11,%12,%3
+ cjne %13,%14,%3
+ cpl a
+%3:
+ jz %4
+} by {
+ ; Peephole 173 jump optimization
+ cjne %1,%2,%4
+ cjne %9,%10,%4
+ cjne %11,%12,%4
+ cjne %13,%14,%4
+%3:}
+
+replace {
+ mov r%1,%2
+ clr c
+ mov a,r%1
+ subb a,#0x01
+ mov %2,a
+} by {
+ ; Peephole 174 optimized decrement (acc not set to %2, flags undefined)
+ mov r%1,%2
+ dec %2
+}
+
+
+replace {
+ mov r%1,%2
+ mov a,r%1
+ add a,#0x01
+ mov %2,a
+} by {
+ ; Peephole 175 optimized increment (acc not set to %2, flags undefined)
+ mov r%1,%2
+ inc %2
+}
+
+replace {
+ mov %1,@r%2
+ inc %1
+ mov @r%2,%1
+} by {
+ ; Peephole 176 optimized increment, removed redundant mov
+ inc @r%2
+ mov %1,@r%2
+}
+
+replace {
+ mov %1,%2
+ mov %2,%1
+} by {
+ ; Peephole 177 removed redundant mov
+ mov %1,%2
+}
+
+replace {
+ mov a,%1
+ mov b,a
+ mov a,%2
+} by {
+ ; Peephole 178 removed redundant mov
+ mov b,%1
+ mov a,%2
+}
+
+// rules 179-182 provided by : Frieder <fe@lake.iup.uni-heidelberg.de>
+// saving 2 byte, 1 cycle
+replace {
+ mov b,#0x00
+ mov a,#0x00
+} by {
+ ; Peephole 179 changed mov to clr
+ clr a
+ mov b,a
+}
+
+// saving 1 byte, 0 cycles
+replace {
+ mov a,#0x00
+} by {
+ ; Peephole 180 changed mov to clr
+ clr a
+}
+
+// saving 3 byte, 2 cycles, return(NULL) profits here
+replace {
+ mov dpl,#0x00
+ mov dph,#0x00
+} by {
+ ; Peephole 181 used 16 bit load of dptr
+ mov dptr,#0x0000
+}
+
+// saving 3 byte, 2 cycles, return(float_constant) profits here
+replace {
+ mov dpl,#%1
+ mov dph,#%2
+} by {
+ ; Peephole 182 used 16 bit load of dptr
+ mov dptr,#(((%2)<<8) + %1)
+}
+
+replace {
+ anl %1,#%2
+ anl %1,#%3
+} by {
+ ; Peephole 183 avoided anl during execution
+ anl %1,#(%2 & %3)
+}
+
+replace {
+ mov %1,a
+ cpl a
+ mov %1,a
+} by {
+ ; Peephole 184 removed redundant mov
+ cpl a
+ mov %1,a
+}
+
+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
+}
+
+replace {
+ add a,#%1
+ mov dpl,a
+ clr a
+ addc a,#(%1 >> 8)
+ mov dph,a
+ clr a
+ movc a,@a+dptr
+ mov %2,a
+ inc dptr
+ clr a
+ movc a,@a+dptr
+ mov %3,a
+ inc dptr
+ clr a
+ movc a,@a+dptr
+ mov %4,a
+ inc dptr
+ clr a
+} by {
+ ; Peephole 186.a optimized movc sequence
+ mov dptr,#%1
+ mov b,acc
+ movc a,@a+dptr
+ mov %2,a
+ mov acc,b
+ inc dptr
+ movc a,@a+dptr
+ mov %3,a
+ mov acc,b
+ inc dptr
+ mov %4,a
+ mov acc,b
+ inc dptr
+}
+
+replace {
+ add a,#%1
+ mov dpl,a
+ clr a
+ addc a,#(%1 >> 8)
+ mov dph,a
+ clr a
+ movc a,@a+dptr
+ mov %2,a
+ inc dptr
+ clr a
+ movc a,@a+dptr
+ mov %3,a
+ inc dptr
+ clr a
+} by {
+ ; Peephole 186.b optimized movc sequence
+ mov dptr,#%1
+ mov b,acc
+ movc a,@a+dptr
+ mov %2,a
+ mov acc,b
+ inc dptr
+ movc a,@a+dptr
+ mov %3,a
+ mov acc,b
+ inc dptr
+}
+
+replace {
+ add a,#%1
+ mov dpl,a
+ clr a
+ addc a,#(%1 >> 8)
+ mov dph,a
+ clr a
+ movc a,@a+dptr
+ mov %2,a
+ inc dptr
+ clr a
+} by {
+ ; Peephole 186.c optimized movc sequence
+ mov dptr,#%1
+ mov b,acc
+ movc a,@a+dptr
+ mov %2,a
+ mov acc,b
+ inc dptr
+}
+
+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 optimized movc sequence
+ mov dptr,#%1
+ movc a,@a+dptr
+}
+
+replace {
+ mov r%1,%2
+ anl ar%1,#%3
+ mov a,r%1
+} by {
+ ; Peephole 187 used a instead of ar%1 for anl
+ mov a,%2
+ anl a,#%3
+ mov r%1,a
+}
+
+replace {
+ mov %1,a
+ mov dptr,%2
+ movc a,@a+dptr
+ mov %1,a
+} by {
+ ; Peephole 188 removed redundant mov
+ mov dptr,%2
+ movc a,@a+dptr
+ mov %1,a
+}
+
+replace {
+ anl a,#0x0f
+ mov %1,a
+ mov a,#0x0f
+ anl a,%1
+} by {
+ ; Peephole 189 removed redundant mov and anl
+ anl a,#0x0f
+ mov %1,a
+}
+
+// rules 190 & 191 need to be in order
+replace {
+ mov a,%1
+ lcall __gptrput
+ mov a,%1
+} by {
+ ; Peephole 190 removed redundant mov
+ mov a,%1
+ lcall __gptrput
+}
+
+replace {
+ mov %1,a
+ mov dpl,%2
+ mov dph,%3
+ mov b,%4
+ mov a,%1
+} by {
+ ; Peephole 191 removed redundant mov
+ mov %1,a
+ mov dpl,%2
+ mov dph,%3
+ mov b,%4
+}
+
+replace {
+ mov r%1,a
+ mov @r%2,ar%1
+} by {
+ ; Peephole 192 used a instead of ar%1 as source
+ mov r%1,a
+ mov @r%2,a
+}
+
+replace {
+ jnz %3
+ mov a,%4
+ jnz %3
+ mov a,%9
+ jnz %3
+ mov a,%12
+ cjne %13,%14,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 193.a optimized misc jump sequence
+ jnz %8
+ mov a,%4
+ jnz %8
+ mov a,%9
+ jnz %8
+ mov a,%12
+ cjne %13,%14,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ mov a,%4
+ cjne %5,%6,%3
+ mov a,%9
+ cjne %10,%11,%3
+ mov a,%12
+ cjne %13,%14,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 193 optimized misc jump sequence
+ cjne %1,%2,%8
+ mov a,%4
+ cjne %5,%6,%8
+ mov a,%9
+ cjne %10,%11,%8
+ mov a,%12
+ cjne %13,%14,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ cjne %5,%6,%3
+ cjne %10,%11,%3
+ cjne %13,%14,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 194 optimized misc jump sequence
+ cjne %1,%2,%8
+ cjne %5,%6,%8
+ cjne %10,%11,%8
+ cjne %13,%14,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ jnz %3
+ mov a,%4
+ jnz %3
+ mov a,%9
+ cjne %10,%11,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 195.a optimized misc jump sequence
+ jnz %8
+ mov a,%4
+ jnz %8
+ mov a,%9
+ cjne %10,%11,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ mov a,%4
+ cjne %5,%6,%3
+ mov a,%9
+ cjne %10,%11,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 195 optimized misc jump sequence
+ cjne %1,%2,%8
+ mov a,%4
+ cjne %5,%6,%8
+ mov a,%9
+ cjne %10,%11,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ cjne %5,%6,%3
+ cjne %10,%11,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 196 optimized misc jump sequence
+ cjne %1,%2,%8
+ cjne %5,%6,%8
+ cjne %10,%11,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ jnz %3
+ mov a,%4
+ cjne %5,%6,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 197.a optimized misc jump sequence
+ jnz %8
+ mov a,%4
+ cjne %5,%6,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ mov a,%4
+ cjne %5,%6,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 197 optimized misc jump sequence
+ cjne %1,%2,%8
+ mov a,%4
+ cjne %5,%6,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ cjne %5,%6,%3
+ sjmp %7
+%3:
+ sjmp %8
+} by {
+ ; Peephole 198 optimized misc jump sequence
+ cjne %1,%2,%8
+ cjne %5,%6,%8
+ sjmp %7
+%3:
+}
+
+replace {
+ cjne %1,%2,%3
+ sjmp %4
+%3:
+ sjmp %5
+} by {
+ ; Peephole 199 optimized misc jump sequence
+ cjne %1,%2,%5
+ sjmp %4
+%3:
+}
+
+replace {
+ sjmp %1
+%1:
+} by {
+ ; Peephole 200 removed redundant sjmp
+%1:
+}
+
+replace {
+ sjmp %1
+%2:
+%1:
+} by {
+ ; Peephole 201 removed redundant sjmp
+%2:
+%1:
+}
+
+replace {
+ push acc
+ mov dptr,%1
+ pop acc
+} by {
+ ; Peephole 202 removed redundant push pop
+ mov dptr,%1
+}
+
+replace {
+ mov r%1,_spx
+ lcall %2
+ mov r%1,_spx
+} by {
+ ; Peephole 203 removed mov r%1,_spx
+ lcall %2
+}
+
+replace {
+ mov %1,a
+ add a,acc
+ mov %1,a
+} by {
+ ; Peephole 204 removed redundant mov
+ add a,acc
+ mov %1,a
+}
+
+replace {
+ djnz %1,%2
+ sjmp %3
+%2:
+ sjmp %4
+%3:
+} by {
+ ; Peephole 205 optimized misc jump sequence
+ djnz %1,%4
+%2:
+%3:
+}
+
+replace {
+ mov %1,%1
+} by {
+ ; Peephole 206 removed redundant mov %1,%1
+}
+
+replace {
+ mov a,_bp
+ add a,#0x00
+ mov %1,a
+} by {
+ ; Peephole 207 removed zero add (acc not set to %1, flags undefined)
+ mov %1,_bp
+}
+
+replace {
+ push acc
+ mov r%1,_bp
+ pop acc
+} by {
+ ; Peephole 208 removed redundant push pop
+ mov r%1,_bp
+}
+
+replace {
+ mov a,_bp
+ add a,#0x00
+ inc a
+ mov %1,a
+} by {
+ ; Peephole 209 optimized increment (acc not set to %1, flags undefined)
+ mov %1,_bp
+ inc %1
+}
+
+replace {
+ mov dptr,#((((%1 >> 8)) <<8) + %1)
+} by {
+ ; Peephole 210 simplified expression
+ mov dptr,#%1
+}
+
+replace {
+ push %1
+ pop %1
+} by {
+ ; Peephole 211 removed redundant push %1 pop %1
+}
+
+replace {
+ mov a,_bp
+ add a,#0x01
+ mov r%1,a
+} by {
+ ; Peephole 212 reduced add sequence to inc
+ mov r%1,_bp
+ inc r%1
+}
+
+replace {
+ mov %1,#(( %2 >> 8 ) ^ 0x80)
+} by {
+ mov %1,#(%2 >> 8)
+ xrl %1,#0x80
+}
+
+replace {
+ mov %1,#(( %2 + %3 >> 8 ) ^ 0x80)
+} by {
+ mov %1,#((%2 + %3) >> 8)
+ xrl %1,#0x80
+}
+
+replace {
+ mov %1,a
+ mov a,%2
+ add a,%1
+} by {
+ ; Peephole 214 reduced some extra movs
+ mov %1,a
+ add a,%2
+} if operandsNotSame
+
+replace {
+ mov %1,a
+ add a,%2
+ mov %1,a
+} by {
+ ; Peephole 215 removed some movs
+ add a,%2
+ mov %1,a
+} if operandsNotSame
+
+replace {
+ mov r%1,%2
+ clr a
+ inc r%1
+ mov @r%1,a
+ dec r%1
+ mov @r%1,a
+} by {
+ ; Peephole 216 simplified clear (2bytes)
+ mov r%1,%2
+ clr a
+ mov @r%1,a
+ inc r%1
+ mov @r%1,a
+}
+
+replace {
+ mov r%1,%2
+ clr a
+ inc r%1
+ inc r%1
+ mov @r%1,a
+ dec r%1
+ mov @r%1,a
+ dec r%1
+ mov @r%1,a
+} by {
+ ; Peephole 217 simplified clear (3bytes)
+ mov r%1,%2
+ clr a
+ mov @r%1,a
+ inc r%1
+ mov @r%1,a
+ inc r%1
+ mov @r%1,a
+}
+
+replace {
+ mov r%1,%2
+ clr a
+ inc r%1
+ inc r%1
+ inc r%1
+ mov @r%1,a
+ dec r%1
+ mov @r%1,a
+ dec r%1
+ mov @r%1,a
+ dec r%1
+ mov @r%1,a
+} by {
+ ; Peephole 218 simplified clear (4bytes)
+ mov r%1,%2
+ clr a
+ mov @r%1,a
+ inc r%1
+ mov @r%1,a
+ inc r%1
+ mov @r%1,a
+ inc r%1
+ mov @r%1,a
+}
\ No newline at end of file
const char **cmd;
} linker;
+ struct {
+ /** Default peephole rules */
+ char *default_rules;
+ } peep;
+
/** Basic type sizes */
struct {
int char_size;
all: $(LIB)
-$(LIB): $(OBJ)
+$(LIB): peeph.rul $(OBJ)
rm -f $(LIB)
ar r $(LIB) $(OBJ)
ranlib $(LIB)
+peeph.rul: peeph.def
+ $(AWK) -f ../SDCCpeeph.awk peeph.def > peeph.rul
+
include clean.mk
With loopInduction on Breaks 198B
With all working on 20796 158 196C
Slightly better genCmp(signed) 20597 159 195B
-
+
Michael Hope <michaelh@earthling.net> 2000
Based on the mcs51 generator - Sandeep Dutta . sandeep.dutta@usa.net (1998)
and - Jean-Louis VERN.jlvern@writeme.com (1999)
}
}
-char *aopGetWord(asmop *aop, int offset)
+char *aopGetWordLong(asmop *aop, int offset, bool with_hash)
{
char *s = buffer ;
char *rs;
- assert(aop->size == 2);
+ if (aop->size != 2)
+ return NULL;
assert(offset == 0);
/* depending on type */
switch (aop->type) {
case AOP_IMMD:
- sprintf (s,"#%s",aop->aopu.aop_immd);
+ sprintf (s,"%s%s",with_hash ? "#" : "", aop->aopu.aop_immd);
ALLOC_ATOMIC(rs,strlen(s)+1);
strcpy(rs,s);
return rs;
if (!IS_FLOAT(val->type)) {
unsigned long v = floatFromVal(val);
- sprintf(buffer,"#0x%04lx", v);
+ sprintf(buffer,"%s0x%04lx", with_hash ? "#" : "", v);
ALLOC_ATOMIC(rs,strlen(buffer)+1);
return strcpy (rs,buffer);
}
return NULL;
}
+char *aopGetWord(asmop *aop, int offset)
+{
+ return aopGetWordLong(aop, offset, TRUE);
+}
+
/*-----------------------------------------------------------------*/
/* aopGet - for fetching value of the aop */
/*-----------------------------------------------------------------*/
if (AOP_TYPE(IC_RIGHT(ic)) != AOP_LIT)
return FALSE;
+ emitcode("", "; genPlusIncr");
+
+ icount = floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit);
+
+ /* If result is a pair */
+ if (isPair(AOP(IC_RESULT(ic)))) {
+ char *left = aopGetWordLong(AOP(IC_LEFT(ic)), 0, FALSE);
+ if (left) {
+ /* Both a lit on the right and a true symbol on the left */
+ emitcode("ld", "%s,#%s + %d", getPairName(AOP(IC_RESULT(ic))), left, icount);
+ return TRUE;
+ }
+ }
+
/* if the literal value of the right hand side
is greater than 4 then it is not worth it */
- if ((icount = floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit)) > 4)
+ if (icount > 4)
return FALSE ;
/* Inc a pair */
if (sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) &&
isPair(AOP(IC_RESULT(ic)))) {
while (icount--) {
- emitcode("inc", "%s", getPairName(AOP(IC_RESULT(ic))));
+ emitcode("inc", "%s ; 1", getPairName(AOP(IC_RESULT(ic))));
}
return TRUE;
}
size = getDataSize(IC_RESULT(ic));
+ /* Special case when left and right are constant */
+ if (isPair(AOP(IC_RESULT(ic)))) {
+ char *left, *right;
+
+ left = aopGetWordLong(AOP(IC_LEFT(ic)), 0, FALSE);
+ right = aopGetWordLong(AOP(IC_RIGHT(ic)), 0, FALSE);
+ if (left && right) {
+ /* It's a pair */
+ /* PENDING: fix */
+ char buffer[100];
+ sprintf(buffer, "#(%s + %s)", left, right);
+ emitcode("ld", "%s,%s", getPairName(AOP(IC_RESULT(ic))), buffer);
+ goto release;
+ }
+ }
+
while(size--) {
if (AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
MOVA(aopGet(AOP(IC_LEFT(ic)),offset,FALSE));
size = max(AOP_SIZE(left),AOP_SIZE(right));
/* if unsigned char cmp with lit, just compare */
- if((size == 1) && !sign &&
+ if((size == 1) &&
(AOP_TYPE(right) == AOP_LIT && AOP_TYPE(left) != AOP_DIR )){
emitcode("ld", "a,%s", aopGet(AOP(left), offset, FALSE));
- emitcode("cp", "%s", aopGet(AOP(right), offset, FALSE));
+ if (sign) {
+ emitcode("xor", "a,#0x80");
+ emitcode("cp", "%s^0x80", aopGet(AOP(right), offset, FALSE));
+ }
+ else
+ emitcode("cp", "%s", aopGet(AOP(right), offset, FALSE));
}
else {
if(AOP_TYPE(right) == AOP_LIT) {
goto release;
}
}
- CLRC;
+ if (sign) {
+ /* First setup h and l contaning the top most bytes XORed */
+ bool fDidXor = FALSE;
+ if (AOP_TYPE(left) == AOP_LIT){
+ unsigned long lit = (unsigned long)
+ floatFromVal(AOP(left)->aopu.aop_lit);
+ emitcode("ld", "l,#0x%02x",
+ 0x80 ^ (unsigned int)((lit >> ((size-1)*8)) & 0x0FFL));
+ }
+ else {
+ emitcode("ld", "a,%s", aopGet(AOP(left), size-1, FALSE));
+ emitcode("xor", "a,#0x80");
+ emitcode("ld", "l,a");
+ fDidXor = TRUE;
+ }
+ if (AOP_TYPE(right) == AOP_LIT) {
+ unsigned long lit = (unsigned long)
+ floatFromVal(AOP(right)->aopu.aop_lit);
+ emitcode("ld", "h,#0x%02x",
+ 0x80 ^ (unsigned int)((lit >> ((size-1)*8)) & 0x0FFL));
+ }
+ else {
+ emitcode("ld", "a,%s", aopGet(AOP(right), size-1, FALSE));
+ emitcode("xor", "a,#0x80");
+ emitcode("ld", "h,a");
+ fDidXor = TRUE;
+ }
+ if (!fDidXor)
+ CLRC;
+ }
+ else {
+ CLRC;
+ }
while (size--) {
/* Do a long subtract */
- MOVA(aopGet(AOP(left),offset,FALSE));
+ if (!sign || size)
+ MOVA(aopGet(AOP(left),offset,FALSE));
if (sign && size == 0) {
- /* Ugly but hey */
- emitcode("push", "af");
- emitcode("xor", "a,#0x80");
- emitcode("ld", "l,a");
- if (AOP_TYPE(right) == AOP_LIT){
- unsigned long lit = (unsigned long)
- floatFromVal(AOP(right)->aopu.aop_lit);
- emitcode("pop", "af");
- emitcode("ld", "a,l");
- emitcode("sbc","a,#0x%02x",
- 0x80 ^ (unsigned int)((lit >> (offset*8)) & 0x0FFL));
- } else {
- emitcode("ld", "a,%s",aopGet(AOP(right),offset++,FALSE));
- emitcode("xor", "a,#0x80");
- emitcode("ld", "h,a");
- emitcode("pop", "af");
- emitcode("ld", "a,l");
- emitcode("sbc", "a,h");
- }
+ emitcode("ld", "a,l");
+ emitcode("sbc", "a,h");
}
else {
/* Subtract through, propagating the carry */
if (AOP_TYPE(left) == AOP_IMMD)
emitcode("ld","hl,%s",aopGet(AOP(left),0,TRUE));
else { /* we need to get it byte by byte */
+
emitcode("ld", "l,%s", aopGet(AOP(left), 0, FALSE));
emitcode("ld", "h,%s", aopGet(AOP(left), 1, FALSE));
}
(AOP_TYPE(result) != AOP_REG) &&
(AOP_TYPE(right) == AOP_LIT) &&
!IS_FLOAT(operandType(right)) &&
- (lit < 256L)){
- emitcode("xor","a,a");
+ (lit < 256L)) {
+ bool fXored = FALSE;
+ offset = 0;
/* Work from the top down.
Done this way so that we can use the cached copy of 0
in A for a fast clear */
while (size--) {
- if((unsigned int)((lit >> (size*8)) & 0x0FFL)== 0)
- aopPut(AOP(result),"a",size);
+ if((unsigned int)((lit >> (offset*8)) & 0x0FFL)== 0) {
+ if (!fXored && size>1) {
+ emitcode("xor", "a,a");
+ fXored = TRUE;
+ }
+ if (fXored) {
+ aopPut(AOP(result),"a",offset);
+ }
+ else {
+ aopPut(AOP(result), "#0", offset);
+ }
+ }
else
aopPut(AOP(result),
- aopGet(AOP(right),size,FALSE),
- size);
+ aopGet(AOP(right),offset,FALSE),
+ offset);
+ offset++;
}
} else {
while (size--) {
/* now we are ready to call the
peep hole optimizer */
- /* if (!options.nopeep)
- peepHole (&lineHead); */
+ if (!options.nopeep)
+ peepHole (&lineHead);
/* now do the actual printing */
printLine (lineHead,codeOutFile);
#include "common.h"
#include "ralloc.h"
+static char _defaultRules[] =
+{
+#include "peeph.rul"
+};
+
static char *_z80_keywords[] = { NULL };
void z80_assignRegisters (eBBlock **ebbs, int count);
static void _z80_setDefaultOptions(void)
{
options.genericPtr = 1; /* default on */
- options.nopeep = 1;
+ options.nopeep = 0;
options.stackAuto = 1;
options.mainreturn = 1;
options.noregparms = 1;
{
_linkCmd
},
+ {
+ _defaultRules
+ },
{
/* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
1, 1, 2, 4, 2, 2, 2, 1, 4, 4
--- /dev/null
+replace restart {
+ ld %1,%1
+} by {
+ ; Removed redundent load
+}
return FALSE;
}
+/** Optimisations:
+ Certian assignments involving pointers can be temporarly stored
+ in HL. Esp.
+genAssign
+ ld iy,#_Blah
+ ld bc,(iy)
+genAssign (ptr)
+ ld hl,bc
+ ld iy,#_Blah2
+ ld (iy),(hl)
+*/
+
/** Pack registers for acc use.
When the result of this operation is small and short lived it may
be able to be stored in the accumelator.
packRegsForOneuse (ic,IC_LEFT(ic),ebp);
#endif
-#if 0
/* if pointer set & left has a size more than
one and right is not in far space */
if (POINTER_SET(ic) &&
- !isOperandInFarSpace(IC_RIGHT(ic)) &&
+ /* MLH: no such thing.
+ !isOperandInFarSpace(IC_RIGHT(ic)) && */
!OP_SYMBOL(IC_RESULT(ic))->remat &&
!IS_OP_RUONLY(IC_RIGHT(ic)) &&
getSize(aggrToPtr(operandType(IC_RESULT(ic)),FALSE)) > 1 )
packRegsForOneuse (ic,IC_RESULT(ic),ebp);
-#endif
-#if 0
/* if pointer get */
if (POINTER_GET(ic) &&
- !isOperandInFarSpace(IC_RESULT(ic))&&
+ /* MLH: dont have far space
+ !isOperandInFarSpace(IC_RESULT(ic))&& */
!OP_SYMBOL(IC_LEFT(ic))->remat &&
!IS_OP_RUONLY(IC_RESULT(ic)) &&
getSize(aggrToPtr(operandType(IC_LEFT(ic)),FALSE)) > 1 )
-
packRegsForOneuse (ic,IC_LEFT(ic),ebp);
-#endif
/* pack registers for accumulator use, when the result of an
arithmetic or bit wise operation has only one use, that use is
*/
unsigned _clock(void);
+/** Print the number of t-states this program has been executing for.
+ Optional :)
+*/
+void _printTStates(void);
+
/** Set to one to print more messages about expected values etc.
*/
#define DEBUG 0
/* overflow may occur for this array element. */
/* 32766 is the highest value for a 16 bitter */
- Number_Of_Runs = 20000;
+ Number_Of_Runs = 32766;
runTime = _clock();
printf("Time: %u ticks\n", runTime);
printf("Dhrystones/s = %u\n", Number_Of_Runs / (runTime/HZ));
printf("MIPS = d/s/1757 = (sigh, need floats...)\n");
+ _printTStates();
}
void Proc_1 (REG Rec_Pointer Ptr_Val_Par)
DPRINTF(("-> Proc_8\n"));
Int_Loc = Int_1_Par_Val + 5;
Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
- DPRINTF(("Int_Loc %d == 8\n", Int_Loc));
+ DPRINTF(("Int_Loc %d == 8 Int_2_Par_Val %d == 7\n", Int_Loc, Int_2_Par_Val));
Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc];
Arr_1_Par_Ref [Int_Loc+30] = Int_Loc;
Arr_2_Par_Ref [Int_Loc * 50 + Int_Loc-1] += 1;
Arr_2_Par_Ref [(Int_Loc+20 *50) + Int_Loc] = Arr_1_Par_Ref [Int_Loc];
Int_Glob = 5;
+ DPRINTF(("Arr_1_Glob[8] %d == 7\n", Arr_1_Par_Ref[8]));
}
/*********************************************************************/