added peephole conditional labelJTInRange. For now you need to set the environment...
[fw/sdcc] / src / mcs51 / peeph.def
index e6540fcf8df73449c371b1224ae9dc65a3fc06e2..1e44366c20c7f75dd96424cf29843fe492465ee6 100644 (file)
@@ -57,6 +57,66 @@ replace {
        mov     a,%3
 }
 
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       clr     a
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       ;       Peephole 3.d    removed redundant clr
+}
+
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       clr     a
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       ;       Peephole 3.e    removed redundant clr
+}
+
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       clr     a
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       ;       Peephole 3.f    removed redundant clr
+}
+
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       mov     %5,a
+       clr     a
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       mov     %5,a
+       ;       Peephole 3.g    removed redundant clr
+}
+
 replace {
        mov     %1,a
        mov     dptr,#%2
@@ -1050,6 +1110,24 @@ replace {
        mov     r%1,%3
 } if notVolatile %2
 
+replace {
+       mov     %1,%2
+       mov     a,%1
+} by {
+       ;       peephole 177.g  optimized mov sequence
+       mov     a,%2
+       mov     %1,a
+} if notVolatile %1
+
+replace {
+       mov     %1,%2
+       mov     a,%2
+} by {
+       ;       peephole 177.h  optimized mov sequence
+       mov     a,%2
+       mov     %1,a
+} if notVolatile %2
+
 replace {
        mov     a,%1
        mov     b,a
@@ -3568,24 +3646,505 @@ replace {
        mov     %1,a
 } if notVolatile %1
 
+// Peepholes 259.x are not compatible with peepholex 250.x
+// Peepholes 250.x add jumps to a previously unused label. As the 
+// labelRefCount is not increased, peepholes 259.x are (mistakenly) applied.
+// (Mail on sdcc-devel 2004-10-25)
+// Note: Peepholes 193..199, 251 remove jumps to previously used labels without
+// decreasing labelRefCount (less dangerous - this f.e. leads to 253.c being
+// applied instead of 253.b))
+//
 // applies to f.e. vprintf.c
+//replace {
+//     sjmp    %1
+//%2:  
+//     ret
+//} by {
+//     sjmp    %1
+//     ;       Peephole 259.a  removed redundant label %2 and ret
+//     ;
+//} if labelRefCount %2 0
+
+// applies to f.e. gets.c
+//replace {
+//     ljmp    %1
+//%2:  
+//     ret
+//} by {
+//     ljmp    %1
+//     ;       Peephole 259.b  removed redundant label %2 and ret
+//     ;
+//} if labelRefCount %2 0
+
+// optimizing jumptables
+// Please note: to enable peephole 260.x you currently have to set 
+// the environment variable SDCC_SJMP_JUMPTABLE
 replace {
-       sjmp    %1
-%2:    
-       ret
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+%3:
 } by {
-       sjmp    %1
-       ;       Peephole 259.a  removed redundant label %2 and ret
-       ;
-} if labelRefCount %2 0
+       ;       Peephole 260.a  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+%3:
+} if labelJTInRange
 
-// applies to f.e. gets.c
+// optimizing jumptables
 replace {
-       ljmp    %1
-%2:    
-       ret
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+%3:
 } by {
-       ljmp    %1
-       ;       Peephole 259.b  removed redundant label %2 and ret
-       ;
-} if labelRefCount %2 0
+       ;       Peephole 260.b  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+%3:
+} by {
+       ;       Peephole 260.c  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+%3:
+} by {
+       ;       Peephole 260.d  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+%3:
+} by {
+       ;       Peephole 260.e  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+%3:
+} by {
+       ;       Peephole 260.f  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+%3:
+} by {
+       ;       Peephole 260.g  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+       ljmp    %15
+%3:
+} by {
+       ;       Peephole 260.h  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+       sjmp    %15
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+       ljmp    %15
+       ljmp    %16
+%3:
+} by {
+       ;       Peephole 260.i  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+       sjmp    %15
+       sjmp    %16
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+       ljmp    %15
+       ljmp    %16
+       ljmp    %17
+%3:
+} by {
+       ;       Peephole 260.j  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+       sjmp    %15
+       sjmp    %16
+       sjmp    %17
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+       ljmp    %15
+       ljmp    %16
+       ljmp    %17
+       ljmp    %18
+%3:
+} by {
+       ;       Peephole 260.k  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+       sjmp    %15
+       sjmp    %16
+       sjmp    %17
+       sjmp    %18
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+       ljmp    %15
+       ljmp    %16
+       ljmp    %17
+       ljmp    %18
+       ljmp    %19
+%3:
+} by {
+       ;       Peephole 260.l  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+       sjmp    %15
+       sjmp    %16
+       sjmp    %17
+       sjmp    %18
+       sjmp    %19
+%3:
+} if labelJTInRange
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+       ljmp    %10
+       ljmp    %11
+       ljmp    %12
+
+       ljmp    %13
+       ljmp    %14
+       ljmp    %15
+       ljmp    %16
+       ljmp    %17
+       ljmp    %18
+       ljmp    %19
+       ljmp    %20
+%3:
+} by {
+       ;       Peephole 260.m  used sjmp in jumptable
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       sjmp    %5
+       sjmp    %6
+       sjmp    %7
+       sjmp    %8
+       sjmp    %9
+       sjmp    %10
+       sjmp    %11
+       sjmp    %12
+
+       sjmp    %13
+       sjmp    %14
+       sjmp    %15
+       sjmp    %16
+       sjmp    %17
+       sjmp    %18
+       sjmp    %19
+       sjmp    %20
+%3:
+} if labelJTInRange