* as/mcs51/asexpr.c (expr): disabled warning "not in .flat24 mode",
[fw/sdcc] / src / mcs51 / peeph.def
index 8fa20f57041bf246a7acc713ee93e2ceaf0e47a1..97095ba55720498bf40f3856c09b5546c7105d61 100644 (file)
@@ -57,6 +57,130 @@ 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 {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,#0x00
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       ;       Peephole 3.h    changed mov %3,#0x00 to %3,a
+       mov     %3,a
+}
+
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,#0x00
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       ;       Peephole 3.i    changed mov %4,#0x00 to %4,a
+       mov     %4,a
+}
+
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       mov     %5,#0x00
+} by {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       ;       Peephole 3.j    changed mov %5,#0x00 to %5,a
+       mov     %5,a
+}
+
+replace {
+       clr     a
+       mov     %1,a
+       mov     %2,a
+       mov     %3,a
+       mov     %4,a
+       mov     %5,a
+       mov     %6,#0x00
+} by {
+       clr a
+       mov %1,a
+       mov %2,a
+       mov %3,a
+       mov %4,a
+       mov %5,a
+       ;       Peephole 3.k    changed mov %6,#0x00 to %6,a
+       mov %6,a
+}
+
 replace {
        mov     %1,a
        mov     dptr,#%2
@@ -223,7 +347,6 @@ replace {
 %1:
 } if labelInRange
 
-
 replace {
        clr     a
        cjne    %1,%2,%3
@@ -263,12 +386,24 @@ replace {
 %3:
        jnz     %4
 } by {
-       ;       Peephole 115    jump optimization
+       ;       Peephole 115.a  jump optimization
        cjne    %1,%2,%3
        sjmp    %4
 %3:
 } if labelRefCount %3 1
 
+replace {
+       mov     %1,a
+       cjne    %1,#0x00,%2
+       sjmp    %3
+%2:
+} by {
+       ;       Peephole 115.b  jump optimization
+       mov     %1,a
+       jz      %3
+%2:
+}
+
 replace {
        clr     a
        cjne    %1,%2,%3
@@ -389,7 +524,7 @@ replace {
 } by {
        ;       Peephole 123    jump optimization
        cjne    %1,%2,%3
-       smp     %4
+       sjmp    %4
 %3:
 } if labelRefCount %3 1
 
@@ -468,15 +603,58 @@ replace {
        jnc     %1
 }
 
+// applies to: bug-524691.c --model-large: while (uRight - uLeft > 1)
 replace {
        clr     a
        rlc     a
-       jnz     %1
+       jnz     %0
 } by {
-       ;       Peephole 129    jump optimization
-       jc      %1
+       ;       Peephole 129.a  jump optimization
+        jc     %0
 }
 
+// applies to: _fsdiv.c --xstack: if (mant1 < mant2)
+replace {
+       clr     a
+       rlc     a
+        pop    %1
+       jnz     %0
+} by {
+       ;       Peephole 129.b  optimized condition
+        pop    %1
+        jc     %0
+} if notVolatile %1
+
+// applies to: time.c --xstack: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch)
+replace {
+       clr     a
+       rlc     a
+        pop    %1
+        pop    %2
+       jnz     %0
+} by {
+       ;       Peephole 129.c  optimized condition
+        pop    %1
+        pop    %2
+        jc     %0
+} if notVolatile %1 %2
+
+// applies to: _memmove.c --xstack: if (((int)src < (int)dst) && ((((int)src)+acount) > (int)dst))
+replace {
+       clr     a
+       rlc     a
+        pop    %1
+        pop    %2
+        pop    %3
+       jnz     %0
+} by {
+       ;       Peephole 129.d  optimized condition
+        pop    %1
+        pop    %2
+        pop    %3
+        jc     %0
+} if notVolatile %1 %2 %3
+
 replace {
        mov     r%1,@r%2
 } by {
@@ -495,6 +673,80 @@ replace {
        mov     %2,%1
 }
 
+// ideally the optimizations of rules 132.x should be done in genCmpXX
+replace {
+       clr     c
+       mov     a,#%1
+       subb    a,%2
+       mov     %3,c
+} by {
+       ;       Peephole 132.a  optimized genCmpGt by inverse logic (acc differs)
+       mov     a,%2
+       add     a,#0xff - %1
+       mov     %3,c
+}
+
+replace {
+       clr     c
+       mov     a,#%1
+       subb    a,%2
+       jnc     %5
+} by {
+       ;       Peephole 132.b  optimized genCmpGt by inverse logic (acc differs)
+       mov     a,%2
+       add     a,#0xff - %1
+       jnc     %5
+}
+
+replace {
+       clr     c
+       mov     a,#%1
+       subb    a,%2
+       jc      %5
+} by {
+       ;       Peephole 132.c  optimized genCmpGt by inverse logic (acc differs)
+       mov     a,%2
+       add     a,#0xff - %1
+       jc      %5
+}
+
+replace {
+       clr     c
+       mov     a,%1
+       subb    a,#%2
+       mov     %3,c
+} by {
+       ;       Peephole 132.d  optimized genCmpGt by inverse logic
+       mov     a,#0x100 - %2
+       add     a,%1
+       mov     %3,c
+} 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)
+
+replace {
+       clr     c
+       mov     a,%1
+       subb    a,#%2
+       jc      %5
+} by {
+       ;       Peephole 132.f  optimized genCmpLt by inverse logic (carry differs)
+       mov     a,#0x100 - %2
+       add     a,%1
+       jnc     %5
+} if operandsNotRelated('0x00' %2)
+
+
 replace {
        mov     r%1,%2
        mov     ar%3,@r%1
@@ -1030,7 +1282,7 @@ replace restart {
        ;       Peephole 177.d  removed redundant move
        mov     %1,%2
        mov     %3,%4
-} if notVolatile %1 %2
+} if notVolatile(%1 %2),operandsNotRelated(%1 %3)
 
 // applies to f.e. bug-607243.c
 // also check notVolatile %3, as it will return FALSE if it's @r%1
@@ -1050,6 +1302,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
@@ -1940,18 +2210,18 @@ replace {
 
 replace {
        clr     a
-       movx    @dptr,a
-       inc     dptr
-       movx    @dptr,a
-       inc     dptr
+       movx    @%1,a
+       inc     %1
+       movx    @%1,a
+       inc     %1
        clr     a
 } by {
        ;       Peephole 226    removed unnecessary clr
        clr     a
-       movx    @dptr,a
-       inc     dptr
-       movx    @dptr,a
-       inc     dptr
+       movx    @%1,a
+       inc     %1
+       movx    @%1,a
+       inc     %1
 }
 
 replace {
@@ -3418,6 +3688,64 @@ replace {
 %2:
 } if labelRefCount %2 0
 
+// applies to f.e. bug-905492.c
+replace {
+       jnz     %1
+%2:
+       mov     %3,#0x00
+} by {
+       ;       Peephole 256.c  loading %3 with zero from a
+       jnz     %1
+%2:
+       mov     %3,a
+} if labelRefCount %2 0
+
+// applies to f.e. malloc.c
+replace {
+       jnz     %1
+%2:
+       mov     %4,%5
+       mov     %3,#0x00
+} by {
+       ;       Peephole 256.d  loading %3 with zero from a
+       jnz     %1
+%2:
+       mov     %4,%5
+       mov     %3,a
+} if labelRefCount(%2 0),operandsNotRelated('a' %4)
+
+replace {
+       jnz     %1
+%2:
+       mov     %4,%5
+       mov     %6,%7
+       mov     %3,#0x00
+} by {
+       ;       Peephole 256.e  loading %3 with zero from a
+       jnz     %1
+%2:
+       mov     %4,%5
+       mov     %6,%7
+       mov     %3,a
+} if labelRefCount(%2 0),operandsNotRelated('a' %4 %6)
+
+replace {
+       jnz     %1
+%2:
+       mov     %4,%5
+       mov     %6,%7
+       mov     %8,%9
+       mov     %3,#0x00
+} by {
+       ;       Peephole 256.f  loading %2 with zero from a
+       jnz     %1
+%2:
+       mov     %4,%5
+       mov     %6,%7
+       mov     %8,%9
+       mov     %3,a
+} if labelRefCount(%2 0),operandsNotRelated('a' %4 %6 %8)
+
 
 // unsigned char i=8; do{ } while(--i != 0);
 // this currently only applies if i is kept in a register
@@ -3513,7 +3841,7 @@ replace {
 // helps f.e. writing data on a 3-wire (SPI) bus
 replace {
        mov     a,%1
-       mov     c,acc.7
+       rlc     a
        mov     %2,c
        mov     a,%1
        add     a,%1
@@ -3529,7 +3857,7 @@ replace {
 // out_bit=out_byte&0x01; out_byte>>=1;
 replace {
        mov     a,%1
-       mov     c,acc.0
+       rrc     a
        mov     %2,c
        mov     a,%1
        clr     c
@@ -3544,24 +3872,549 @@ 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
+//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 {
-       ljmp    %1
-%2:    
-       ret
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+%3:
 } by {
-       ljmp    %1
-       ;       Peephole 259.b  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
+
+// optimizing jumptables
+replace {
+       add     a,%1
+       mov     dptr,#%2
+       jmp     @a+dptr
+%2:
+       ljmp    %5
+       ljmp    %6
+       ljmp    %7
+       ljmp    %8
+       ljmp    %9
+%3:
+} by {
+       ;       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
+
+// applies to: a = (a << 1) | (a >> 15);
+replace {
+       mov     a,%1
+       rlc     a
+       mov     %1,a
+       mov     a,%2
+       rlc     a
+       mov     %2,a
+       mov     a,%1
+       mov     acc.0,c
+       mov     %1,a
+} by {
+       ;       Peephole 261.a  optimized left rol
+       mov     a,%1
+       rlc     a
+       xch     a,%2
+       rlc     a
+       xch     a,%2
+       mov     acc.0,c
+       mov     %1,a
+}
+
+// applies to: a = (a << 15) | (a >> 1);
+replace {
+       mov     a,%1
+       rrc     a
+       mov     %1,a
+       mov     a,%2
+       rrc     a
+       mov     %2,a
+       mov     a,%1
+       mov     acc.7,c
+       mov     %1,a
+} by {
+       ;       Peephole 261.b  optimized right rol
+       mov     a,%1
+       rrc     a
+       xch     a,%2
+       rrc     a
+       xch     a,%2
+       mov     acc.7,c
+       mov     %1,a
+}