%3:
mov dpl,%1
%7:
- mov sp,bp
- pop bp
+ mov sp,_bp
+ pop _bp
} by {
- ; Peephole 102 removed redundant mov
+ ; Peephole 102 removed redundant mov to %1
mov dpl,%2
ljmp %3
%4:
mov dpl,%5
%3:
%7:
- mov sp,bp
- pop bp
-} if notVolatile %1
+ mov sp,_bp
+ pop _bp
+} if notVolatile(%1), labelRefCount(%3 1)
replace {
mov %1,%2
%3:
mov dpl,%1
%7:
- mov sp,bp
- pop bp
+ mov sp,_bp
+ pop _bp
} by {
- ; Peephole 103 removed redundant mov
+ ; Peephole 103 removed redundant mov to %1
mov dpl,%2
ljmp %3
%4:
mov dpl,%5
%3:
%7:
- mov sp,bp
- pop bp
-}
+ mov sp,_bp
+ pop _bp
+} if labelRefCount(%3 1)
-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
-}
+// Does not seem to be triggered anymore
+//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
replace {
push psw
mov psw,%1
- push bp
- mov bp,%2
+ push _bp
+ mov _bp,%2
%3:
- mov %2,bp
- pop bp
+ mov %2,_bp
+ pop _bp
pop psw
ret
} by {
mov a,%2
add a,#0xff - %1
mov %3,c
-}
+} if operandsLiteral(%1)
replace {
clr c
mov a,%2
add a,#0xff - %1
jnc %5
-}
+} if operandsLiteral(%1)
replace {
clr c
mov a,%2
add a,#0xff - %1
jc %5
-}
+} if operandsLiteral(%1)
replace {
clr c
mov a,#0x100 - %2
add a,%1
mov %3,c
-} if operandsNotRelated('0x00' %2)
+} if operandsNotRelated('0x00' %2), operandsLiteral(%2)
-//This peephole caused bug #1453093
-//replace {
-// clr c
-// mov a,%1
-// subb a,#%2
-// jnc %5
-//} by {
-// ; Peephole 132.e optimized genCmpLt by inverse logic (carry differs)
-// mov a,#0x100 - %2
-// add a,%1
-// jc %5
-//} if operandsNotRelated('0x00' %2)
+replace {
+ clr c
+ mov a,%1
+ subb a,#%2
+ jnc %5
+} by {
+ ; Peephole 132.e optimized genCmpLt by inverse logic (carry differs)
+ mov a,#0x100 - %2
+ add a,%1
+ jc %5
+} if operandsNotRelated('0x00' %2), operandsLiteral(%2)
replace {
clr c
mov a,#0x100 - %2
add a,%1
jnc %5
-} if operandsNotRelated('0x00' %2)
+} if operandsNotRelated('0x00' %2), operandsLiteral(%2)
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
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
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
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
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 {
; Peephole 206 removed redundant mov %1,%1
} if notVolatile
-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
-}
+// Does not seem to be triggered anymore
+//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
}
-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
-}
+// Does not seem to be triggered anymore
+//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)
; 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
-}
+// Does not seem to be triggered anymore
+//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
+//}
// reverts peephole 159? asx8051 cannot handle, too complex?
replace {
} if notVolatile %1
-
-
// rules 247.x apply to f.e. bitfields.c
replace {
mov r%5,#%1
// unsigned char i=8; do{ } while(--i != 0);
-// this currently only applies if i is kept in a register
+// this applies if i is kept in a register
replace {
dec %1
cjne %1,#0x00,%2
} by {
- ; Peephole 257 optimized decrement with compare
+ ; Peephole 257.a optimized decrement with compare
djnz %1,%2
-} if notVolatile %1
+} if notVolatile(%1)
+
+// unsigned char i=8; do{ } while(--i != 0);
+// this applies if i is kept in data memory
+replace {
+ dec %1
+ mov a,%1
+ jnz %2
+} by {
+ ; Peephole 257.b optimized decrement with compare
+ djnz %1,%2
+} if notVolatile(%1), operandsNotRelated(%1 '@r0' '@r1')
// in_byte<<=1; if(in_bit) in_byte|=1;
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: