mov dptr,#%2
movx @dptr,a
}
-
replace {
mov a,acc
} by {
cjne %1,%2,%3
setb %4
%3:
-}
+} if labelRefCount %3 1
replace {
clr a
cjne %10,%11,%3
setb %4
%3:
-}
+} if labelRefCount %3 2
replace {
clr a
cjne %1,%2,%3
sjmp %4
%3:
-}
+} if labelRefCount %3 1
replace {
clr a
cjne %9,%10,%3
sjmp %4
%3:
-}
+} if labelRefCount %3 2
replace {
clr a
cjne %11,%12,%3
sjmp %4
%3:
-}
+} if labelRefCount %3 3
replace {
clr a
cjne %13,%14,%3
sjmp %4
%3:
-}
+} if labelRefCount %3 4
+
replace {
mov a,#0x01
cjne %1,%2,%3
; Peephole 119 jump optimization
cjne %1,%2,%4
%3:
-}
+} if labelRefCount %3 1
replace {
mov a,#0x01
cjne %1,%2,%4
cjne %10,%11,%4
%3:
-}
+} if labelRefCount %3 2
+
replace {
mov a,#0x01
cjne %1,%2,%3
cjne %10,%11,%4
cjne %12,%13,%4
%3:
-}
+} if labelRefCount %3 3
replace {
mov a,#0x01
cjne %12,%13,%4
cjne %14,%15,%4
%3:
-}
+} if labelRefCount %3 4
replace {
mov a,#0x01
cjne %1,%2,%3
smp %4
%3:
-}
+} if labelRefCount %3 1
+
replace {
mov a,#0x01
cjne %1,%2,%3
; Peephole 124 jump optimization
cjne %1,%2,%3
cjne %10,%11,%3
- smp %4
+ sjmp %4
%3:
-}
+} if labelRefCount %3 2
replace {
mov a,#0x01
cjne %12,%13,%3
sjmp %4
%3:
-}
+} if labelRefCount %3 3
replace {
mov a,#0x01
cjne %14,%15,%3
sjmp %4
%3:
-}
+} if labelRefCount %3 4
replace {
push psw
} by {
; Peephole 127 removed misc sequence
ret
-}
+} if labelRefCount %3 0
replace {
clr a
orl a,r%2
}
-replace {
- mov %1,a
- mov dpl,%2
- mov dph,%3
- mov dpx,%4
- mov a,%1
-} by {
- ; Peephole 136a removed redundant moves
- mov %1,a
- mov dpl,%2
- mov dph,%3
- mov dpx,%4
-} if 24bitMode
-
replace {
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:
-}
+// WTF? Doesn't look sensible to me...
+//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:
+//} if labelRefCount %4 1
+//
+//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:
+//} if labelRefCount %4 1
replace {
mov r%1,a
} by {
; Peephole 170 jump optimization
cjne %1,%2,%4
-%3:}
+%3:
+} if labelRefCount %3 1
replace {
clr a
; Peephole 171 jump optimization
cjne %1,%2,%4
cjne %9,%10,%4
-%3:}
+%3:
+} if labelRefCount %3 2
replace {
clr a
cjne %1,%2,%4
cjne %9,%10,%4
cjne %11,%12,%4
-%3:}
+%3:
+} if labelRefCount %3 3
replace {
clr a
cjne %9,%10,%4
cjne %11,%12,%4
cjne %13,%14,%4
-%3:}
+%3:
+} if labelRefCount %3 4
replace {
mov r%1,%2
mov %1,@r%2
}
-replace {
- mov %1,%2
- mov %2,%1
-} by {
- ; Peephole 177 removed redundant mov
- mov %1,%2
-}
+// this one will screw assignes to volatile/sfr's
+//replace {
+// mov %1,%2
+// mov %2,%1
+//} by {
+// ; Peephole 177 removed redundant mov
+// mov %1,%2
+//}
replace {
mov a,%1
clr a
}
-replace {
- mov dpl,#0x00
- mov dph,#0x00
- mov dpx,#0x00
-} by {
- ; Peephole 181a used 24 bit load of dptr
- mov dptr,#0x0000
-} if 24bitMode
-
// saving 3 byte, 2 cycles, return(NULL) profits here
replace {
mov dpl,#0x00
mov dptr,#0x0000
}
-// saves 2 bytes, ?? cycles.
+// saving 3 bytes, 2 cycles
+// provided by Bernhard Held <bernhard.held@de.westinghouse.com>
replace {
- mov dpl,#%1
- mov dph,#(%1 >> 8)
- mov dpx,#(%1 >> 16)
+ mov dpl,#%1
+ mov dph,#(%1 >> 8)
} by {
- ; Peephole 182a used 24 bit load of dptr
- mov dptr,#%1
-} if 24bitMode
+ ; Peephole 182a use 16 bit load of DPTR
+ mov dptr,#%1
+}
// saving 3 byte, 2 cycles, return(float_constant) profits here
replace {
mov a,%12
cjne %13,%14,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 4
replace {
cjne %1,%2,%3
mov a,%12
cjne %13,%14,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 4
replace {
cjne @%1,%2,%3
inc %1
cjne @%1,%14,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 4
replace {
cjne %1,%2,%3
cjne %10,%11,%8
cjne %13,%14,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 4
replace {
jnz %3
mov a,%9
cjne %10,%11,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 3
replace {
cjne %1,%2,%3
mov a,%9
cjne %10,%11,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 3
replace {
cjne @%1,%2,%3
inc %1
cjne @%1,%11,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 3
replace {
cjne %1,%2,%3
cjne %5,%6,%8
cjne %10,%11,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 3
replace {
jnz %3
mov a,%4
cjne %5,%6,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 2
replace {
cjne %1,%2,%3
mov a,%4
cjne %5,%6,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 2
replace {
cjne @%1,%2,%3
inc %1
cjne @%1,%6,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 2
replace {
cjne %1,%2,%3
cjne %1,%2,%8
cjne %5,%6,%8
sjmp %7
-%3:
-}
+;%3:
+} if labelRefCount %3 2
replace {
cjne %1,%2,%3
; Peephole 199 optimized misc jump sequence
cjne %1,%2,%5
sjmp %4
-%3:
-}
+;%3:
+} if labelRefCount %3 1
replace {
sjmp %1
djnz %1,%4
%2:
%3:
-}
+} if labelRefCount %2 1
replace {
mov %1,%1
inc %1
}
-replace {
- mov dptr,#((((%1 >> 16)) <<16) + (((%1 >> 8)) <<8) + %1)
-} by {
- ; Peephole 210a simplified expression
- mov dptr,#%1
-} if 24bitMode
-
replace {
mov dptr,#((((%1 >> 8)) <<8) + %1)
} by {
inc r%1
} by {
; removed dec/inc pair
-}
\ No newline at end of file
+}
+
+replace {
+ mov %1,dpl
+ mov %2,dph
+ mov dpl,%1
+ mov dph,%2
+} by {
+ ; Peephole 223 removed redundant dph/dpl moves
+ mov %1,dpl
+ mov %2,dph
+}
+
+replace {
+ mov %1,dpl
+ mov (%1 + 1),dph
+ mov dpl,%1
+ mov dph,(%1 + 1)
+} by {
+ ; Peephole 224 removed redundant dph/dpl moves
+ mov %1,dpl
+ mov (%1 + 1),dph
+}
+
+replace {
+ mov a,%1
+ movx @dptr,a
+ mov dpl,%2
+ mov dph,%3
+ mov b,%4
+ mov a,%1
+} by {
+ ; Peephole 225 removed redundant move to acc
+ mov a,%1
+ movx @dptr,a
+ mov dpl,%2
+ mov dph,%3
+ mov b,%4
+}
+
+replace {
+ clr a
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ inc dptr
+ clr a
+} by {
+ ; Peephole 226 removed unnecessary clr
+ clr a
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ inc dptr
+}
+
+replace {
+ mov dptr,#%1
+ clr a
+ inc dptr
+ inc dptr
+ inc dptr
+ movx @dptr,a
+ lcall __decdptr
+ movx @dptr,a
+ lcall __decdptr
+ movx @dptr,a
+ lcall __decdptr
+ movx @dptr,a
+} by {
+ ; Peephole 227 replaced inefficient 32 bit clear
+ mov dptr,#%1
+ clr a
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ mov dptr,#%1
+}
+
+replace {
+ mov dptr,#%1
+ clr a
+ inc dptr
+ inc dptr
+ inc dptr
+ movx @dptr,a
+ lcall __decdptr
+ movx @dptr,a
+ lcall __decdptr
+ movx @dptr,a
+ lcall __decdptr
+ mov a,#%2
+ movx @dptr,a
+} by {
+ ; Peephole 228 replaced inefficient 32 constant
+ mov dptr,#%1
+ mov a, #%2
+ movx @dptr,a
+ inc dptr
+ clr a
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ mov dptr,#%1
+}
+
+replace {
+ mov dptr,#%1
+ clr a
+ inc dptr
+ movx @dptr,a
+ lcall __decdptr
+ movx @dptr,a
+} by {
+ ; Peephole 229 replaced inefficient 16 bit clear
+ mov dptr,#%1
+ clr a
+ movx @dptr,a
+ inc dptr
+ movx @dptr,a
+ mov dptr,#%1
+}
+
+replace {
+ mov dptr,#%1
+ clr a
+ inc dptr
+ movx @dptr,a
+ lcall __decdptr
+ mov a,#%2
+ movx @dptr,a
+} by {
+ ; Peephole 230 replaced inefficient 16 constant
+ mov dptr,#%1
+ mov a,#%2
+ movx @dptr,a
+ inc dptr
+ clr a
+ movx @dptr,a
+ mov dptr,#%1
+}
+
+// this last peephole often removes the last mov from 227-230
+replace {
+ mov dptr,#%1
+ mov dptr,#%2
+} by {
+ ; Peephole 231 removed redundant mov to dptr
+ mov dptr,#%2
+}
+
+replace {
+ movx a,@dptr
+} by {
+ ; Peephole 232 using movc to read xdata (--xram-movc)
+ clr a
+ movc a,@a+dptr
+} if xramMovcOption
+
+replace {
+ lcall _gptrget
+} by {
+ ; Peephole 233 using _gptrgetc instead of _gptrget (--xram-movc)
+ lcall _gptrgetc
+} if xramMovcOption
+
+replace {
+ mov r%1,a
+ mov dpl,r%1
+%2:
+ ret
+} by {
+ ; Peephole 234 loading dpl directly from a(ccumulator)
+ mov dpl,a
+%2:
+ ret
+}
+
+replace {
+ mov r%1,a
+ mov dpl,r%2
+ mov dph,r%1
+%3:
+ ret
+} by {
+ ; Peephole 235 loading dph directly from a(ccumulator)
+ mov dpl,r%2
+ mov dph,a
+%3:
+ ret
+}
+
+// 14 rules by Fiorenzo D. Ramaglia <fd.ramaglia@tin.it>
+
+replace {
+ add a,ar%1
+} by {
+ ; Peephole 236a
+ add a,r%1
+}
+
+replace {
+ addc a,ar%1
+} by {
+ ; Peephole 236b
+ addc a,r%1
+}
+
+replace {
+ anl a,ar%1
+} by {
+ ; Peephole 236c
+ anl a,r%1
+}
+
+replace {
+ dec ar%1
+} by {
+ ; Peephole 236d
+ dec r%1
+}
+
+replace {
+ djnz ar%1,%2
+} by {
+ ; Peephole 236e
+ djnz r%1,%2
+}
+
+replace {
+ inc ar%1
+} by {
+ ; Peephole 236f
+ inc r%1
+}
+
+replace {
+ mov a,ar%1
+} by {
+ ; Peephole 236g
+ mov a,r%1
+}
+
+replace {
+ mov ar%1,#%2
+} by {
+ ; Peephole 236h
+ mov r%1,#%2
+}
+
+replace {
+ mov ar%1,a
+} by {
+ ; Peephole 236i
+ mov r%1,a
+}
+
+replace {
+ mov ar%1,ar%2
+} by {
+ ; Peephole 236j
+ mov r%1,ar%2
+}
+
+replace {
+ orl a,ar%1
+} by {
+ ; Peephole 236k
+ orl a,r%1
+}
+
+replace {
+ subb a,ar%1
+} by {
+ ; Peephole 236l
+ subb a,r%1
+}
+
+replace {
+ xch a,ar%1
+} by {
+ ; Peephole 236m
+ xch a,r%1
+}
+
+replace {
+ xrl a,ar%1
+} by {
+ ; Peephole 236n
+ xrl a,r%1
+}
+
+replace {
+ sjmp %1
+%2:
+ mov %3,%4
+%1:
+ ret
+} by {
+ ; Peephole 237a removed sjmp to ret
+ ret
+%2:
+ mov %3,%4
+%1:
+ ret
+}
+
+replace {
+ sjmp %1
+%2:
+ mov %3,%4
+ mov dpl,%5
+ mov dph,%6
+%1:
+ ret
+} by {
+ ; Peephole 237b removed sjmp to ret
+ ret
+%2:
+ mov %3,%4
+ mov dpl,%5
+ mov dph,%6
+%1:
+ ret
+}