X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fmcs51%2Fpeeph.def;h=96db036d26177b4da9572f2964faf8db7d7dee3e;hb=043c22a94f39d137aaa14e5b54ec2a3e076580c9;hp=30ddc1307f64e5d0e03b686f8e9f9a79b1de8538;hpb=2d45a55fdddb7f2a8dbeef73da8048d67ab342ed;p=fw%2Fsdcc diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 30ddc130..96db036d 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -684,7 +684,7 @@ replace { mov a,%2 add a,#0xff - %1 mov %3,c -} +} if operandsLiteral(%1) replace { clr c @@ -696,7 +696,7 @@ replace { mov a,%2 add a,#0xff - %1 jnc %5 -} +} if operandsLiteral(%1) replace { clr c @@ -708,7 +708,7 @@ replace { mov a,%2 add a,#0xff - %1 jc %5 -} +} if operandsLiteral(%1) replace { clr c @@ -720,7 +720,7 @@ replace { mov a,#0x100 - %2 add a,%1 mov %3,c -} if operandsNotRelated('0x00' %2) +} if operandsNotRelated('0x00' %2), operandsLiteral(%2) replace { clr c @@ -732,7 +732,7 @@ replace { mov a,#0x100 - %2 add a,%1 jc %5 -} if operandsNotRelated('0x00' %2) +} if operandsNotRelated('0x00' %2), operandsLiteral(%2) replace { clr c @@ -744,7 +744,7 @@ replace { mov a,#0x100 - %2 add a,%1 jnc %5 -} if operandsNotRelated('0x00' %2) +} if operandsNotRelated('0x00' %2), operandsLiteral(%2) replace { @@ -856,6 +856,19 @@ replace { mov r%1,a } +// applies to genlshOne +replace { + mov ar%1,@%2 + mov a,r%1 + add a,acc + mov r%1,a +} by { + ; Peephole 140 removed redundant mov + mov a,@%2 + add a,@%2 + mov r%1,a +} + replace { mov r%1,a mov r%2,ar%1 @@ -1449,7 +1462,8 @@ replace { mov %1,a } if notVolatile %1 -replace { +// char indexed access to: long code table[] = {4,3,2,1}; +replace restart { add a,#%1 mov dpl,a clr a @@ -1468,25 +1482,28 @@ replace { mov %4,a inc dptr clr a + movc a,@a+dptr } by { ; Peephole 186.a optimized movc sequence + mov b,a mov dptr,#%1 - mov b,acc movc a,@a+dptr mov %2,a - mov acc,b inc dptr + mov a,b movc a,@a+dptr mov %3,a - mov acc,b inc dptr + mov a,b movc a,@a+dptr mov %4,a - mov acc,b inc dptr + mov a,b + movc a,@a+dptr } -replace { +// char indexed access to: void* code table[] = {4,3,2,1}; +replace restart { add a,#%1 mov dpl,a clr a @@ -1501,21 +1518,24 @@ replace { mov %3,a inc dptr clr a + movc a,@a+dptr } by { ; Peephole 186.b optimized movc sequence + mov b,a mov dptr,#%1 - mov b,acc movc a,@a+dptr mov %2,a - mov acc,b inc dptr + mov a,b movc a,@a+dptr mov %3,a - mov acc,b inc dptr + mov a,b + movc a,@a+dptr } -replace { +// char indexed access to: int code table[] = {4,3,2,1}; +replace restart { add a,#%1 mov dpl,a clr a @@ -1526,31 +1546,31 @@ replace { mov %2,a inc dptr clr a + movc a,@a+dptr } by { ; Peephole 186.c optimized movc sequence + mov %2,a mov dptr,#%1 - mov b,acc movc a,@a+dptr - mov %2,a - mov acc,b + xch a,%2 inc dptr + movc a,@a+dptr } -// disabled due to bug #1434401 -//// char indexed access to: char code table[] = {4,3,2,1}; -//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.d optimized movc sequence -// mov dptr,#%1 -// movc a,@a+dptr -//} +// char indexed access to: char code table[] = {4,3,2,1}; +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.d optimized movc sequence + mov dptr,#%1 + movc a,@a+dptr +} // char indexed access to: int code table[] = {4,3,2,1}; replace { @@ -3102,8 +3122,6 @@ replace { } if notVolatile %1 - - // rules 247.x apply to f.e. bitfields.c replace { mov r%5,#%1 @@ -4515,6 +4533,19 @@ replace { mov %1,#(%2 + 1) } + +replace { + clr a + cjne %1,%2,%3 + inc a +%3: + jz %4 +} by { + ; Peephole 264 jump optimization (acc not set) + cjne %1,%2,%4 +%3: +} if labelRefCount(%3 1), labelRefCountChange(%3 -1) + // should be one of the last peepholes replace{ %1: