// push %1
//} by {
// ; Peephole 2 removed pop %1 push %1 (not push pop)
-// mov %2,%3
+// mov %2,%3
//}
//
clr c
addc a,%1
} by {
- ; Peephole 145 changed to add without carry
+ ; Peephole 145 changed to add without carry
add a,%1
}
mov %1,%2
mov %2,%1
} by {
- ; Peephole 177 removed redundant mov
+ ; Peephole 177.a removed redundant mov
mov %1,%2
} if notVolatile %1 %2
mov r%1,a
mov a,ar%1
} by {
- ; Peephole 177 removed redundant mov
+ ; Peephole 177.b removed redundant mov
mov r%1,a
}
+// applies to f.e. bug-408972.c
+replace {
+ mov %1,%2
+ mov %1,%3
+} by {
+ ; Peephole 177.c removed redundant move
+ mov %1,%3
+} if notVolatile %1 %2
+
+// applies to f.e. bug-408972.c
+// not before peephole 177.c
+replace {
+ mov %1,%2
+ mov %3,%4
+ mov %2,%1
+} by {
+ ; Peephole 177.d removed redundant move
+ mov %1,%2
+ mov %3,%4
+} if notVolatile %1 %2
+
replace {
mov a,%1
mov b,a
movc a,@a+dptr
mov %3,a
mov acc,b
- inc dptr
+ inc dptr
}
replace {
cjne r%1,#%2,%3
mov a,#0x01
sjmp %4
-%3:
+%3:
clr a
%4:
} by {
%7:
}
-// applies to f.e. j = (k!=0x1000);
+// applies to f.e. j = (k!=0x1000);
// with volatile idata int k;
replace {
cjne @r%1,#%2,%3
cjne @r%1,#%2,%3
mov a,#0x01
sjmp %7
-%3:
+%3:
clr a
%7:
} by {
ret
} if labelIsReturnOnly
+// applies to shifts.c and when accessing arrays with an unsigned integer index
+// saving 1 byte, 2 cycles
+replace {
+ mov r%1,%2
+ mov a,(%2 + 1)
+ xch a,r%1
+ add a,acc
+ xch a,r%1
+ rlc a
+ mov r%3,a
+} by {
+ ; Peephole 252 optimized left shift
+ mov a,%2
+ add a,acc
+ mov r%1,a
+ mov a,(%2 + 1)
+ rlc a
+ mov r%3,a
+}