From: michaelh Date: Thu, 10 Feb 2000 05:46:45 +0000 (+0000) Subject: Right. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=01ad33a1bb9aec417dab3e45e57cac53b38fdb66;p=fw%2Fsdcc Right. * Added t-state counter to crt0.s * Shifted peephole rules into platform directories * Turned on some of the reg packing under z80 * Added some dumb stdinclude files as a hack git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@95 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/device/include/z80/stdio.h b/device/include/z80/stdio.h new file mode 100644 index 00000000..ff820227 --- /dev/null +++ b/device/include/z80/stdio.h @@ -0,0 +1,6 @@ +/** Dumb stdio.h + Z80 temp hack. +*/ + +void printf(const char *szFormat, ...); + diff --git a/device/include/z80/string.h b/device/include/z80/string.h new file mode 100644 index 00000000..f87505b6 --- /dev/null +++ b/device/include/z80/string.h @@ -0,0 +1,12 @@ +/* Silly string.h + * Z80 specific hack +*/ + +#include + +char *strcpy(char *dest, const char *src); + +int strcmp(const char *s1, const char *s2); + +void *memcpy(void *dest, const void *src, WORD wLen); + diff --git a/device/include/z80/types.h b/device/include/z80/types.h new file mode 100644 index 00000000..cf956083 --- /dev/null +++ b/device/include/z80/types.h @@ -0,0 +1,11 @@ +/** Silly types.h + Z80 specific hack +*/ + +#ifndef TYPES_INCLUDE +#define TYPES_INCLUDE + +typedef unsigned char BYTE; +typedef unsigned WORD; + +#endif diff --git a/device/lib/z80/crt0.s b/device/lib/z80/crt0.s index 9e2a08c5..ce0176f9 100644 --- a/device/lib/z80/crt0.s +++ b/device/lib/z80/crt0.s @@ -44,7 +44,12 @@ _getsp:: 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 diff --git a/src/Makefile.in b/src/Makefile.in index 302309ce..eee05f8d 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -91,9 +91,6 @@ SDCCy.c: SDCC.y 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 $< diff --git a/src/SDCCpeeph.c b/src/SDCCpeeph.c index 6450d7ac..aa923fbb 100644 --- a/src/SDCCpeeph.c +++ b/src/SDCCpeeph.c @@ -29,11 +29,6 @@ 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) @@ -705,7 +700,7 @@ void initPeepHole () 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) { diff --git a/src/SDCCpeeph.def b/src/SDCCpeeph.def deleted file mode 100644 index 9ae5acff..00000000 --- a/src/SDCCpeeph.def +++ /dev/null @@ -1,1629 +0,0 @@ -//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 -// 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 diff --git a/src/SDCCpeeph.rul b/src/SDCCpeeph.rul deleted file mode 100644 index 8ab8f613..00000000 --- a/src/SDCCpeeph.rul +++ /dev/null @@ -1,1605 +0,0 @@ -/* 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" diff --git a/src/mcs51/Makefile b/src/mcs51/Makefile index af2a30d8..a248555c 100644 --- a/src/mcs51/Makefile +++ b/src/mcs51/Makefile @@ -10,9 +10,12 @@ CFLAGS += -I.. -I. -I../.. 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 diff --git a/src/mcs51/main.c b/src/mcs51/main.c index 2f22fd76..7064aab9 100644 --- a/src/mcs51/main.c +++ b/src/mcs51/main.c @@ -8,6 +8,11 @@ #include "main.h" #include "ralloc.h" +static char _defaultRules[] = +{ +#include "peeph.rul" +}; + /* list of key words used by msc51 */ static char *_mcs51_keywords[] = { "at", @@ -134,6 +139,9 @@ PORT mcs51_port = { { _linkCmd }, + { + _defaultRules + }, { /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */ 1, 1, 2, 4, 1, 2, 3, 1, 4, 4 diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def new file mode 100644 index 00000000..9ae5acff --- /dev/null +++ b/src/mcs51/peeph.def @@ -0,0 +1,1629 @@ +//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 +// 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 diff --git a/src/port.h b/src/port.h index 6c998372..30c1e9e5 100644 --- a/src/port.h +++ b/src/port.h @@ -29,6 +29,11 @@ typedef struct { const char **cmd; } linker; + struct { + /** Default peephole rules */ + char *default_rules; + } peep; + /** Basic type sizes */ struct { int char_size; diff --git a/src/z80/Makefile b/src/z80/Makefile index af2a30d8..a248555c 100644 --- a/src/z80/Makefile +++ b/src/z80/Makefile @@ -10,9 +10,12 @@ CFLAGS += -I.. -I. -I../.. 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 diff --git a/src/z80/gen.c b/src/z80/gen.c index 1a5169f6..4468ba78 100644 --- a/src/z80/gen.c +++ b/src/z80/gen.c @@ -14,7 +14,7 @@ With loopInduction on Breaks 198B With all working on 20796 158 196C Slightly better genCmp(signed) 20597 159 195B - + Michael Hope 2000 Based on the mcs51 generator - Sandeep Dutta . sandeep.dutta@usa.net (1998) and - Jean-Louis VERN.jlvern@writeme.com (1999) @@ -538,18 +538,19 @@ dealloc: } } -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; @@ -561,7 +562,7 @@ char *aopGetWord(asmop *aop, int offset) 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); } @@ -572,6 +573,11 @@ char *aopGetWord(asmop *aop, int offset) return NULL; } +char *aopGetWord(asmop *aop, int offset) +{ + return aopGetWordLong(aop, offset, TRUE); +} + /*-----------------------------------------------------------------*/ /* aopGet - for fetching value of the aop */ /*-----------------------------------------------------------------*/ @@ -1376,16 +1382,30 @@ static bool genPlusIncr (iCode *ic) 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; } @@ -1499,6 +1519,22 @@ static void genPlus (iCode *ic) 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)); @@ -1758,10 +1794,15 @@ static void genCmp (operand *left,operand *right, 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) { @@ -1785,30 +1826,46 @@ static void genCmp (operand *left,operand *right, 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 */ @@ -3147,6 +3204,7 @@ static void genGenPointerGet (operand *left, 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)); } @@ -3401,18 +3459,30 @@ static void genAssign (iCode *ic) (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--) { @@ -3838,8 +3908,8 @@ void genZ80Code (iCode *lic) /* 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); diff --git a/src/z80/main.c b/src/z80/main.c index c508a6ba..27026e49 100644 --- a/src/z80/main.c +++ b/src/z80/main.c @@ -1,6 +1,11 @@ #include "common.h" #include "ralloc.h" +static char _defaultRules[] = +{ +#include "peeph.rul" +}; + static char *_z80_keywords[] = { NULL }; void z80_assignRegisters (eBBlock **ebbs, int count); @@ -17,7 +22,7 @@ static void _z80_finaliseOptions(void) 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; @@ -67,6 +72,9 @@ PORT z80_port = { { _linkCmd }, + { + _defaultRules + }, { /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */ 1, 1, 2, 4, 2, 2, 2, 1, 4, 4 diff --git a/src/z80/peeph.def b/src/z80/peeph.def new file mode 100644 index 00000000..9fd073d6 --- /dev/null +++ b/src/z80/peeph.def @@ -0,0 +1,5 @@ +replace restart { + ld %1,%1 +} by { + ; Removed redundent load +} diff --git a/src/z80/ralloc.c b/src/z80/ralloc.c index 62d33494..b79fbfe1 100644 --- a/src/z80/ralloc.c +++ b/src/z80/ralloc.c @@ -1661,6 +1661,18 @@ static bool isBitwiseOptimizable (iCode *ic) 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. @@ -1871,28 +1883,25 @@ void packRegisters (eBBlock *ebp) 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 diff --git a/support/tests/dhrystone/dhry.c b/support/tests/dhrystone/dhry.c index 9b44ddd9..d970ffba 100644 --- a/support/tests/dhrystone/dhry.c +++ b/support/tests/dhrystone/dhry.c @@ -49,6 +49,11 @@ */ 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 @@ -124,7 +129,7 @@ int main(void) /* 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(); @@ -256,6 +261,7 @@ int main(void) 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) @@ -454,7 +460,7 @@ void Proc_8 (int *Arr_1_Par_Ref, int *Arr_2_Par_Ref, 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; @@ -463,6 +469,7 @@ void Proc_8 (int *Arr_1_Par_Ref, int *Arr_2_Par_Ref, 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])); } /*********************************************************************/