src/mcs51/peeph.def: fix bug #705773
[fw/sdcc] / src / mcs51 / peeph.def
1 //replace restart {
2 //        pop  %1
3 //        push %1
4 //} by {
5 //        ;       Peephole 1     removed pop %1 push %1 (not push pop)
6 //}
7
8 //replace restart {
9 //        pop  %1
10 //        mov  %2,%3
11 //        push %1
12 //} by {
13 //        ;       Peephole 2     removed pop %1 push %1 (not push pop)
14 //        mov  %2,%3 
15 //}
16
17 //
18 // added by Jean Louis VERN for
19 // his shift stuff
20 replace restart {
21         xch     a,%1
22         xch     a,%1
23 } by {
24         ;       Peephole 2.a    removed redundant xch xch
25 }
26
27 replace restart {
28 // saving 2 byte
29         mov     %1,#0x00
30         mov     a,#0x00
31 } by {
32         ;       Peephole 3.a    changed mov to clr
33         clr     a
34         mov     %1,a
35 }
36
37 replace restart {
38 // saving 1 byte
39         mov     %1,#0x00
40         clr     a
41 } by {
42         ;       Peephole 3.b    changed mov to clr
43         clr     a
44         mov     %1,a
45 }
46
47 replace restart {
48 // saving 1 byte, loosing 1 cycle but maybe allowing peephole 3.b to start
49         mov     %1,#0x00
50         mov     %2,#0x00
51         mov     a,%3
52 } by {
53         ;       Peephole 3.c    changed mov to clr
54         clr     a
55         mov     %1,a
56         mov     %2,a
57         mov     a,%3
58 }
59
60 replace {
61         mov     %1,a
62         mov     dptr,#%2
63         mov     a,%1
64         movx    @dptr,a
65 } by {
66         ;       Peephole 100    removed redundant mov
67         mov     %1,a
68         mov     dptr,#%2
69         movx    @dptr,a
70 }
71 replace {
72         mov     a,acc
73 } by {
74         ;       Peephole 100.a  removed redundant mov
75 }
76
77 replace {
78         mov     a,%1
79         movx    @dptr,a
80         inc     dptr
81         mov     a,%1
82         movx    @dptr,a
83 } by {
84         ;       Peephole 101    removed redundant mov
85         mov     a,%1
86         movx    @dptr,a
87         inc     dptr
88         movx    @dptr,a
89 }
90
91 replace {
92         mov     %1,%2
93         ljmp    %3
94 %4:
95         mov     %1,%5
96 %3:
97         mov     dpl,%1
98 %7:
99         mov     sp,bp
100         pop     bp
101 } by {
102         ;       Peephole 102    removed redundant mov
103         mov     dpl,%2
104         ljmp    %3
105 %4:
106         mov     dpl,%5
107 %3:
108 %7:
109         mov     sp,bp
110         pop     bp
111 }
112
113 replace {
114         mov     %1,%2
115         ljmp    %3
116 %4:
117         mov     a%1,%5
118 %3:
119         mov     dpl,%1
120 %7:
121         mov     sp,bp
122         pop     bp
123 } by {
124         ;       Peephole 103    removed redundant mov
125         mov     dpl,%2
126         ljmp    %3
127 %4:
128         mov     dpl,%5
129 %3:
130 %7:
131         mov     sp,bp
132         pop     bp
133 }
134
135 replace {
136         mov     a,bp
137         clr     c
138         add     a,#0x01
139         mov     r%1,a
140 } by {
141         ;       Peephole 104    optimized increment (acc not set to r%1, flags undefined)
142         mov     r%1,bp
143         inc     r%1
144 }
145
146 replace {
147         mov     %1,a
148         mov     a,%1
149 } by {
150         ;       Peephole 105    removed redundant mov
151         mov     %1,a
152 }
153
154 replace {
155         mov     %1,a
156         clr     c
157         mov     a,%1
158 } by {
159         ;       Peephole 106    removed redundant mov 
160         mov     %1,a
161         clr     c
162 }
163
164 replace {
165         ljmp    %1
166 %1:
167 } by {
168         ;       Peephole 107    removed redundant ljmp
169 %1:
170 }
171
172 replace {
173         jc      %1
174         ljmp    %5
175 %1:
176 } by {
177         ;       Peephole 108    removed ljmp by inverse jump logic
178         jnc     %5
179 %1:
180 } if labelInRange
181
182 replace {
183         jz      %1
184         ljmp    %5
185 %1:
186 } by {
187         ;       Peephole 109    removed ljmp by inverse jump logic
188         jnz     %5
189 %1:
190 } if labelInRange
191
192 replace {
193         jnz     %1
194         ljmp    %5
195 %1:
196 } by {
197         ;       Peephole 110    removed ljmp by inverse jump logic
198         jz      %5
199 %1:
200 } if labelInRange
201
202 replace {
203         jb      %1,%2
204         ljmp    %5
205 %2:
206 } by {
207         ;       Peephole 111    removed ljmp by inverse jump logic
208         jnb     %1,%5
209 %2:
210 } if labelInRange
211
212 replace {
213         jnb     %1,%2
214         ljmp    %5
215 %2:
216 } by {
217         ;       Peephole 112    removed ljmp by inverse jump logic
218         jb      %1,%5
219 %2:
220 } if labelInRange
221
222 replace {
223         ljmp    %5
224 %1:
225 } by {
226         ;       Peephole 132    changed ljmp to sjmp
227         sjmp    %5
228 %1:
229 } if labelInRange
230
231
232 replace {
233         clr     a
234         cjne    %1,%2,%3
235         cpl     a
236 %3:
237         rrc     a
238         mov     %4,c
239 } by {
240         ;       Peephole 113    optimized misc sequence
241         clr     %4
242         cjne    %1,%2,%3
243         setb    %4
244 %3:
245 } if labelRefCount %3 1
246
247 replace {
248         clr     a
249         cjne    %1,%2,%3
250         cjne    %10,%11,%3
251         cpl     a
252 %3:
253         rrc     a
254         mov     %4,c
255 } by {
256         ;       Peephole 114    optimized misc sequence
257         clr     %4
258         cjne    %1,%2,%3
259         cjne    %10,%11,%3
260         setb    %4
261 %3:
262 } if labelRefCount %3 2
263
264 replace {
265         clr     a
266         cjne    %1,%2,%3
267         cpl     a
268 %3:
269         jnz     %4
270 } by {
271         ;       Peephole 115    jump optimization 
272         cjne    %1,%2,%3
273         sjmp    %4
274 %3:
275 } if labelRefCount %3 1
276
277 replace {
278         clr     a
279         cjne    %1,%2,%3
280         cjne    %9,%10,%3
281         cpl     a
282 %3:
283         jnz     %4
284 } by {
285         ;       Peephole 116    jump optimization
286         cjne    %1,%2,%3
287         cjne    %9,%10,%3
288         sjmp    %4
289 %3:
290 } if labelRefCount %3 2
291
292 replace {
293         clr     a
294         cjne    %1,%2,%3
295         cjne    %9,%10,%3
296         cjne    %11,%12,%3
297         cpl     a
298 %3:
299         jnz %4
300 } by {
301         ;       Peephole 117    jump optimization
302         cjne    %1,%2,%3
303         cjne    %9,%10,%3
304         cjne    %11,%12,%3
305         sjmp    %4
306 %3:
307 } if labelRefCount %3 3
308
309 replace {
310         clr     a
311         cjne    %1,%2,%3
312         cjne    %9,%10,%3
313         cjne    %11,%12,%3
314         cjne    %13,%14,%3
315         cpl     a
316 %3:
317         jnz     %4
318 } by {
319         ;       Peephole 118    jump optimization
320         cjne    %1,%2,%3
321         cjne    %9,%10,%3
322         cjne    %11,%12,%3
323         cjne    %13,%14,%3
324         sjmp    %4
325 %3:
326 } if labelRefCount %3 4
327
328 replace {
329         mov     a,#0x01
330         cjne    %1,%2,%3
331         clr     a
332 %3:
333         jnz     %4
334 } by {
335         ;       Peephole 119    jump optimization
336         cjne    %1,%2,%4
337 %3:
338 } if labelRefCount %3 1
339
340 replace {
341         mov     a,#0x01
342         cjne    %1,%2,%3
343         cjne    %10,%11,%3
344         clr     a
345 %3:
346         jnz     %4
347 } by {
348         ;       Peephole 120    jump optimization
349         cjne    %1,%2,%4
350         cjne    %10,%11,%4
351 %3:
352 } if labelRefCount %3 2
353
354 replace {
355         mov     a,#0x01
356         cjne    %1,%2,%3
357         cjne    %10,%11,%3
358         cjne    %12,%13,%3
359         clr     a
360 %3:
361         jnz  %4
362 } by {
363         ;       Peephole 121    jump optimization
364         cjne    %1,%2,%4
365         cjne    %10,%11,%4
366         cjne    %12,%13,%4
367 %3:
368 } if labelRefCount %3 3
369
370 replace {
371         mov     a,#0x01
372         cjne    %1,%2,%3
373         cjne    %10,%11,%3
374         cjne    %12,%13,%3
375         cjne    %14,%15,%3
376         clr     a
377 %3:
378         jnz     %4
379 } by {
380         ;       Peephole 122    jump optimization
381         cjne    %1,%2,%4
382         cjne    %10,%11,%4
383         cjne    %12,%13,%4
384         cjne    %14,%15,%4
385 %3:
386 } if labelRefCount %3 4
387
388 replace {
389         mov     a,#0x01
390         cjne    %1,%2,%3
391         clr     a
392 %3:
393         jz      %4
394 } by {
395         ;       Peephole 123    jump optimization
396         cjne    %1,%2,%3
397         smp     %4
398 %3:
399 } if labelRefCount %3 1
400
401 replace {
402         mov     a,#0x01
403         cjne    %1,%2,%3
404         cjne    %10,%11,%3
405         clr     a
406 %3:
407         jz      %4
408 } by {
409         ;       Peephole 124    jump optimization
410         cjne    %1,%2,%3
411         cjne    %10,%11,%3
412         sjmp    %4
413 %3:
414 } if labelRefCount %3 2
415
416 replace {
417         mov     a,#0x01
418         cjne    %1,%2,%3
419         cjne    %10,%11,%3
420         cjne    %12,%13,%3
421         clr     a
422 %3:
423         jz      %4
424 } by {
425         ;       Peephole 125    jump optimization
426         cjne    %1,%2,%3
427         cjne    %10,%11,%3
428         cjne    %12,%13,%3
429         sjmp    %4
430 %3:
431 } if labelRefCount %3 3
432
433 replace {
434         mov     a,#0x01
435         cjne    %1,%2,%3
436         cjne    %10,%11,%3
437         cjne    %12,%13,%3
438         cjne    %14,%15,%3
439         clr     a
440 %3:
441         jz      %4
442 } by {
443         ;       Peephole 126    jump optimization
444         cjne    %1,%2,%3
445         cjne    %10,%11,%3
446         cjne    %12,%13,%3
447         cjne    %14,%15,%3
448         sjmp    %4
449 %3:
450 } if labelRefCount %3 4
451
452 replace {
453         push    psw
454         mov     psw,%1
455         push    bp
456         mov     bp,%2
457 %3:
458         mov     %2,bp
459         pop     bp
460         pop     psw
461         ret
462 } by {
463         ;       Peephole 127    removed misc sequence
464         ret
465 } if labelRefCount %3 0
466
467 replace {
468         clr     a
469         rlc     a
470         jz      %1
471 } by {
472         ;       Peephole 128    jump optimization
473         jnc     %1
474 }
475
476 replace {
477         clr     a
478         rlc     a
479         jnz     %1
480 } by {
481         ;       Peephole 129    jump optimization
482         jc      %1
483 }
484
485 replace { 
486         mov     r%1,@r%2
487 } by {
488         ;       Peephole 130    changed target address mode r%1 to ar%1
489         mov     ar%1,@r%2
490 }
491
492 replace { 
493         mov     a,%1
494         subb    a,#0x01
495         mov     %2,a
496         mov     %1,%2
497 } by {
498         ;       Peephole 131    optimized decrement (not caring for c)
499         dec     %1         
500         mov     %2,%1      
501 }
502
503 replace {
504         mov     r%1,%2
505         mov     ar%3,@r%1
506         inc     r%3
507         mov     r%4,%2
508         mov     @r%4,ar%3
509 } by {
510         ;       Peephole 133    removed redundant moves
511         mov     r%1,%2
512         inc     @r%1
513         mov     ar%3,@r%1
514 }
515
516 replace {
517         mov     r%1,%2
518         mov     ar%3,@r%1
519         dec     r%3
520         mov     r%4,%2
521         mov     @r%4,ar%3
522 } by {
523         ;       Peephole 134    removed redundant moves
524         mov     r%1,%2
525         dec     @r%1
526         mov     ar%3,@r%1
527 }
528
529 replace {
530         mov     r%1,a
531         mov     a,r%2
532         orl     a,r%1
533 } by {
534         ;       Peephole 135    removed redundant mov
535         mov     r%1,a
536         orl     a,r%2
537 }
538
539 replace {
540         mov     %1,a
541         mov     dpl,%2
542         mov     dph,%3
543         mov     a,%1
544 } by {
545         ;       Peephole 136    removed redundant moves
546         mov     %1,a
547         mov     dpl,%2
548         mov     dph,%3
549 }
550
551 // WTF? Doesn't look sensible to me...
552 //replace {
553 //        mov  b,#0x00
554 //        mov  a,%1
555 //        cjne %2,%3,%4
556 //        mov  b,#0x01
557 //%4:
558 //        mov  a,b
559 //        jz   %5
560 //} by {
561 //        ;       Peephole 137   optimized misc jump sequence
562 //        mov  a,%1
563 //        cjne %2,%3,%5
564 //%4:
565 //} if labelRefCount %4 1
566 //
567 //replace {
568 //        mov  b,#0x00
569 //        mov  a,%1
570 //        cjne %2,%3,%4
571 //        mov  b,#0x01
572 //%4:
573 //        mov  a,b
574 //        jnz  %5
575 //} by {
576 //        ;       Peephole 138   optimized misc jump sequence
577 //        mov  a,%1
578 //        cjne %2,%3,%4
579 //        sjmp %5
580 //%4:
581 //} if labelRefCount %4 1
582
583 replace {
584         mov     r%1,a
585         anl     ar%1,%2
586         mov     a,r%1
587 } by {
588         ;       Peephole 139    removed redundant mov
589         anl     a,%2
590         mov     r%1,a
591 }
592
593 replace {
594         mov     r%1,a
595         orl     ar%1,%2
596         mov     a,r%1
597 } by {
598         ;       Peephole 140    removed redundant mov
599         orl     a,%2
600         mov     r%1,a }
601
602 replace {
603         mov     r%1,a
604         xrl     ar%1,%2
605         mov     a,r%1
606 } by {
607         ;       Peephole 141    removed redundant mov
608         xrl     a,%2
609         mov     r%1,a
610 }
611
612 replace {
613         mov     r%1,a
614         mov     r%2,ar%1
615         mov     ar%1,@r%2
616 } by {
617         ;       Peephole 142    removed redundant moves
618         mov     r%2,a
619         mov     ar%1,@r%2
620 }
621
622 replace {
623         rlc     a
624         mov     acc.0,c
625 } by {
626         ;       Peephole 143    converted rlc to rl
627         rl      a
628 }
629
630 replace {
631         rrc     a
632         mov     acc.7,c
633 } by {
634         ;       Peephole 144    converted rrc to rc
635         rr      a
636 }
637
638 replace {
639         clr     c
640         addc    a,%1
641 } by {
642         ;       Peephole 145    changed to add without carry  
643         add     a,%1
644 }
645
646 replace {
647         clr     c
648         mov     a,%1
649         addc    a,%2
650 } by {
651         ;       Peephole 146    changed to add without carry
652         mov     a,%1
653         add     a,%2
654 }
655
656 replace {
657         orl     r%1,a
658 } by {
659         ;       Peephole 147    changed target address mode r%1 to ar%1
660         orl     ar%1,a
661 }
662
663 replace {
664         anl     r%1,a
665 } by {
666         ;       Peephole 148    changed target address mode r%1 to ar%1
667         anl     ar%1,a
668 }
669
670 replace {
671         xrl     r%1,a
672 } by {
673         ;       Peephole 149    changed target address mode r%1 to ar%1
674         xrl     ar%1,a
675 }
676
677 replace {
678         mov     %1,dpl
679         mov     dpl,%1
680 %9:
681         ret
682 } by {
683         ;       Peephole 150    removed misc moves via dpl before return
684 %9:
685         ret
686 }
687
688 replace {
689         mov     %1,dpl
690         mov     %2,dph
691         mov     dpl,%1
692         mov     dph,%2
693 %9:
694         ret
695 } by {
696         ;       Peephole 151    removed misc moves via dph, dpl before return
697 %9:
698         ret
699 }
700
701 replace {
702         mov     %1,dpl
703         mov     %2,dph
704         mov     dpl,%1
705 %9:
706         ret
707 } by {
708         ;       Peephole 152    removed misc moves via dph, dpl before return
709 %9:
710         ret
711 }
712
713 replace {
714         mov     %1,dpl
715         mov     %2,dph
716         mov     %3,b
717         mov     dpl,%1
718         mov     dph,%2
719         mov     b,%3
720 %9:
721         ret
722 } by {
723         ;       Peephole 153    removed misc moves via dph, dpl, b before return
724 %9:
725         ret
726 }
727
728 replace {
729         mov     %1,dpl
730         mov     %2,dph
731         mov     %3,b
732         mov     dpl,%1
733 %9:
734         ret
735 } by {
736         ;       Peephole 154    removed misc moves via dph, dpl, b before return
737 %9:
738         ret
739 }
740
741 replace {
742         mov     %1,dpl
743         mov     %2,dph
744         mov     %3,b
745         mov     dpl,%1
746         mov     dph,%2
747 %9:
748         ret
749 } by {
750         ;       Peephole 155    removed misc moves via dph, dpl, b before return
751 %9:
752         ret
753 }
754
755 replace {
756         mov     %1,dpl
757         mov     %2,dph
758         mov     %3,b
759         mov     %4,a
760         mov     dpl,%1
761         mov     dph,%2
762         mov     b,%3
763         mov     a,%4
764 %9:
765         ret
766 } by {
767         ;       Peephole 156    removed misc moves via dph, dpl, b, a before return
768 %9:
769         ret
770 }
771
772 replace {
773         mov     %1,dpl
774         mov     %2,dph
775         mov     %3,b
776         mov     %4,a
777         mov     dpl,%1
778         mov     dph,%2
779 %9:
780         ret
781 } by {
782         ;       Peephole 157    removed misc moves via dph, dpl, b, a before return
783 %9:
784         ret
785 }
786
787 replace {
788         mov     %1,dpl
789         mov     %2,dph
790         mov     %3,b
791         mov     %4,a
792         mov     dpl,%1
793 %9:
794         ret
795 } by {
796         ;       Peephole 158    removed misc moves via dph, dpl, b, a before return
797 %9:
798         ret
799 }
800
801 replace {
802         mov     %1,#%2
803         xrl     %1,#0x80
804 } by {
805         ;       Peephole 159    avoided xrl during execution
806         mov  %1,#(%2 ^ 0x80)
807 }
808
809 replace {
810         jnc     %1
811         sjmp    %2
812 %1:
813 } by {
814         ;       Peephole 160    removed sjmp by inverse jump logic
815         jc      %2
816 %1:
817 }
818
819 replace {
820         jc      %1
821         sjmp    %2
822 %1:
823 } by {
824         ;       Peephole 161    removed sjmp by inverse jump logic
825         jnc     %2
826 %1:
827 }
828
829 replace {
830         jnz     %1
831         sjmp    %2
832 %1:
833 } by {
834         ;       Peephole 162    removed sjmp by inverse jump logic
835         jz      %2
836 %1:
837 }
838
839 replace {
840         jz      %1
841         sjmp    %2
842 %1:
843 } by {
844         ;       Peephole 163    removed sjmp by inverse jump logic
845         jnz     %2
846 %1:
847 }
848
849 replace {
850         jnb     %3,%1
851         sjmp    %2
852 %1:
853 } by {
854         ;       Peephole 164    removed sjmp by inverse jump logic
855         jb      %3,%2
856 %1:
857 }
858
859 replace {
860         jb      %3,%1
861         sjmp    %2
862 %1:
863 } by {
864         ;       Peephole 165    removed sjmp by inverse jump logic
865         jnb     %3,%2
866 %1:
867 }
868
869 replace {
870         mov     %1,%2
871         mov     %3,%1
872         mov     %2,%1
873 } by {
874         ;       Peephole 166    removed redundant mov
875         mov     %1,%2
876         mov     %3,%1
877 }
878
879 replace {
880         mov     c,%1
881         cpl     c
882         mov     %1,c
883 } by {
884         ;       Peephole 167    removed redundant bit moves (c not set to %1)
885         cpl     %1
886 }
887
888 replace {
889         jnb     %1,%2
890         sjmp    %3
891 %2:
892 } by {
893         ;       Peephole 168    jump optimization
894         jb      %1,%3
895 %2:
896 }
897
898 replace {
899         jb      %1,%2
900         sjmp    %3
901 %2:
902 } by {
903         ;       Peephole 169    jump optimization
904         jnb     %1,%3
905 %2:
906 }
907
908 replace {
909         clr     a
910         cjne    %1,%2,%3
911         cpl     a
912 %3:
913         jz      %4
914 } by {
915         ;       Peephole 170    jump optimization
916         cjne    %1,%2,%4
917 %3:
918 } if labelRefCount %3 1
919
920 replace {
921         clr     a
922         cjne    %1,%2,%3
923         cjne    %9,%10,%3
924         cpl     a
925 %3:
926         jz      %4
927 } by {
928         ;       Peephole 171    jump optimization
929         cjne    %1,%2,%4
930         cjne    %9,%10,%4
931 %3:
932 } if labelRefCount %3 2
933
934 replace {
935         clr     a
936         cjne    %1,%2,%3
937         cjne    %9,%10,%3
938         cjne    %11,%12,%3
939         cpl     a
940 %3:
941         jz      %4
942 } by {
943         ;       Peephole 172    jump optimization
944         cjne    %1,%2,%4
945         cjne    %9,%10,%4
946         cjne    %11,%12,%4
947 %3:
948 } if labelRefCount %3 3
949
950 replace {
951         clr     a
952         cjne    %1,%2,%3
953         cjne    %9,%10,%3
954         cjne    %11,%12,%3
955         cjne    %13,%14,%3
956         cpl     a
957 %3:
958         jz      %4
959 } by {
960         ;       Peephole 173    jump optimization
961         cjne    %1,%2,%4
962         cjne    %9,%10,%4
963         cjne    %11,%12,%4
964         cjne    %13,%14,%4
965 %3:
966 } if labelRefCount %3 4
967
968 replace {
969         mov     r%1,%2
970         clr     c
971         mov     a,r%1
972         subb    a,#0x01
973         mov     %2,a
974 } by {
975         ;       Peephole 174    optimized decrement (acc not set to %2, flags undefined)
976         mov     r%1,%2
977         dec     %2
978 }
979
980 replace {
981         mov     r%1,%2
982         mov     a,r%1
983         add     a,#0x01
984         mov     %2,a
985 } by {
986         ;       Peephole 175    optimized increment (acc not set to %2, flags undefined)
987         mov     r%1,%2
988         inc     %2
989 }
990
991 replace {
992         mov     %1,@r%2
993         inc     %1
994         mov     @r%2,%1
995 } by {
996         ;       Peephole 176    optimized increment, removed redundant mov
997         inc     @r%2
998         mov     %1,@r%2
999 }
1000
1001 // this one will screw assignes to volatile/sfr's
1002 //replace {
1003 //        mov  %1,%2
1004 //        mov  %2,%1
1005 //} by {
1006 //        ;       Peephole 177   removed redundant mov
1007 //        mov  %1,%2
1008 //}
1009
1010 replace {
1011         mov     a,%1
1012         mov     b,a
1013         mov     a,%2
1014 } by {
1015         ;       Peephole 178    removed redundant mov
1016         mov     b,%1
1017         mov     a,%2
1018 }
1019
1020 // rules 179-182 provided by : Frieder <fe@lake.iup.uni-heidelberg.de>
1021 // saving 2 byte, 1 cycle
1022 replace {
1023         mov     b,#0x00
1024         mov     a,#0x00
1025 } by {
1026         ;       Peephole 179    changed mov to clr
1027         clr     a
1028         mov     b,a
1029 }
1030
1031 // saving 1 byte, 0 cycles
1032 replace {
1033         mov     a,#0x00
1034 } by {
1035         ;       Peephole 180    changed mov to clr
1036         clr     a
1037 }
1038
1039 // saving 3 byte, 2 cycles, return(NULL) profits here
1040 replace {
1041         mov     dpl,#0x00
1042         mov     dph,#0x00
1043 } by {
1044         ;       Peephole 181    used 16 bit load of dptr
1045         mov     dptr,#0x0000
1046 }
1047
1048 // saving 3 bytes, 2 cycles
1049 // provided by Bernhard Held <bernhard.held@de.westinghouse.com>
1050 replace {
1051         mov     dpl,#%1
1052         mov     dph,#(%1 >> 8)
1053 } by {
1054         ;       Peephole 182.a  used 16 bit load of DPTR
1055         mov     dptr,#%1
1056 }
1057
1058 // saving 3 byte, 2 cycles, return(float_constant) profits here
1059 replace {
1060         mov     dpl,#%1
1061         mov     dph,#%2
1062 } by {
1063         ;       Peephole 182    used 16 bit load of dptr
1064         mov     dptr,#(((%2)<<8) + %1)
1065 }
1066
1067 replace {
1068         anl     %1,#%2
1069         anl     %1,#%3
1070 } by {
1071         ;       Peephole 183    avoided anl during execution
1072         anl     %1,#(%2 & %3)
1073 }
1074
1075 replace {
1076         mov     %1,a
1077         cpl     a
1078         mov     %1,a
1079 } by {
1080         ;       Peephole 184    removed redundant mov
1081         cpl     a
1082         mov     %1,a
1083 }
1084
1085 replace {
1086 // acc being incremented might cause problems
1087         mov     %1,a
1088         inc     %1
1089 } by {
1090         ;       Peephole 185    changed order of increment (acc incremented also!)
1091         inc     a
1092         mov     %1,a
1093 }
1094
1095 replace {
1096         add     a,#%1
1097         mov     dpl,a
1098         clr     a
1099         addc    a,#(%1 >> 8)
1100         mov     dph,a
1101         clr     a
1102         movc    a,@a+dptr
1103         mov     %2,a
1104         inc     dptr
1105         clr     a
1106         movc    a,@a+dptr
1107         mov     %3,a
1108         inc     dptr
1109         clr     a
1110         movc    a,@a+dptr
1111         mov     %4,a
1112         inc     dptr
1113         clr     a       
1114 } by {
1115         ;       Peephole 186.a  optimized movc sequence
1116         mov     dptr,#%1
1117         mov     b,acc
1118         movc    a,@a+dptr
1119         mov     %2,a
1120         mov     acc,b
1121         inc     dptr    
1122         movc    a,@a+dptr
1123         mov     %3,a
1124         mov     acc,b
1125         inc     dptr
1126         mov     %4,a
1127         mov     acc,b
1128         inc     dptr
1129 }
1130
1131 replace {
1132         add     a,#%1
1133         mov     dpl,a
1134         clr     a
1135         addc    a,#(%1 >> 8)
1136         mov     dph,a
1137         clr     a
1138         movc    a,@a+dptr
1139         mov     %2,a
1140         inc     dptr
1141         clr     a
1142         movc    a,@a+dptr
1143         mov     %3,a
1144         inc     dptr
1145         clr     a
1146 } by {
1147         ;       Peephole 186.b  optimized movc sequence
1148         mov     dptr,#%1
1149         mov     b,acc
1150         movc    a,@a+dptr
1151         mov     %2,a
1152         mov     acc,b
1153         inc     dptr    
1154         movc    a,@a+dptr
1155         mov     %3,a
1156         mov     acc,b
1157         inc     dptr    
1158 }
1159
1160 replace {
1161         add     a,#%1
1162         mov     dpl,a
1163         clr     a
1164         addc    a,#(%1 >> 8)
1165         mov     dph,a
1166         clr     a
1167         movc    a,@a+dptr
1168         mov     %2,a
1169         inc     dptr
1170         clr     a
1171 } by {
1172         ;       Peephole 186.c  optimized movc sequence
1173         mov     dptr,#%1
1174         mov     b,acc
1175         movc    a,@a+dptr
1176         mov     %2,a
1177         mov     acc,b
1178         inc     dptr
1179 }
1180
1181 replace {
1182         add     a,#%1
1183         mov     dpl,a
1184         clr     a
1185         addc    a,#(%1 >> 8)
1186         mov     dph,a
1187         clr     a
1188         movc    a,@a+dptr
1189 } by {
1190         ;       Peephole 186.d  optimized movc sequence
1191         mov     dptr,#%1
1192         movc    a,@a+dptr
1193 }
1194
1195 replace {
1196         mov     r%1,%2
1197         anl     ar%1,#%3
1198         mov     a,r%1
1199 } by {
1200         ;       Peephole 187    used a instead of ar%1 for anl
1201         mov     a,%2
1202         anl     a,#%3
1203         mov     r%1,a
1204 }
1205
1206 replace {
1207         mov     %1,a
1208         mov     dptr,%2
1209         movc    a,@a+dptr
1210         mov     %1,a
1211 } by {
1212         ;       Peephole 188    removed redundant mov
1213         mov     dptr,%2
1214         movc    a,@a+dptr
1215         mov     %1,a
1216 }
1217
1218 replace {
1219         anl     a,#0x0f
1220         mov     %1,a
1221         mov     a,#0x0f
1222         anl     a,%1
1223 } by {
1224         ;       Peephole 189    removed redundant mov and anl
1225         anl     a,#0x0f
1226         mov     %1,a
1227 }
1228
1229 // rules 190 & 191 need to be in order
1230 replace {
1231         mov     a,%1
1232         lcall   __gptrput
1233         mov     a,%1
1234 } by {
1235         ;       Peephole 190    removed redundant mov
1236         mov     a,%1
1237         lcall   __gptrput
1238 }
1239
1240 replace {
1241         mov     %1,a
1242         mov     dpl,%2
1243         mov     dph,%3
1244         mov     b,%4
1245         mov     a,%1
1246 } by {
1247         ;       Peephole 191    removed redundant mov
1248         mov     %1,a
1249         mov     dpl,%2
1250         mov     dph,%3
1251         mov     b,%4
1252 }
1253
1254 replace {
1255         mov     r%1,a
1256         mov     @r%2,ar%1
1257 } by {
1258         ;       Peephole 192    used a instead of ar%1 as source
1259         mov     r%1,a
1260         mov     @r%2,a
1261 }
1262
1263 replace {
1264         jnz     %3
1265         mov     a,%4
1266         jnz     %3
1267         mov     a,%9
1268         jnz     %3
1269         mov     a,%12
1270         cjne    %13,%14,%3
1271         sjmp    %7
1272 %3:
1273         sjmp    %8
1274 } by {
1275         ;       Peephole 193.a  optimized misc jump sequence
1276         jnz     %8
1277         mov     a,%4
1278         jnz     %8
1279         mov     a,%9
1280         jnz     %8
1281         mov     a,%12
1282         cjne    %13,%14,%8
1283         sjmp    %7
1284 ;%3:
1285 } if labelRefCount %3 4
1286
1287 replace {
1288         cjne    %1,%2,%3
1289         mov     a,%4
1290         cjne    %5,%6,%3
1291         mov     a,%9
1292         cjne    %10,%11,%3
1293         mov     a,%12
1294         cjne    %13,%14,%3
1295         sjmp    %7
1296 %3:
1297         sjmp    %8
1298 } by {
1299         ;       Peephole 193    optimized misc jump sequence
1300         cjne    %1,%2,%8
1301         mov     a,%4
1302         cjne    %5,%6,%8
1303         mov     a,%9
1304         cjne    %10,%11,%8
1305         mov     a,%12
1306         cjne    %13,%14,%8
1307         sjmp    %7
1308 ;%3:
1309 } if labelRefCount %3 4
1310
1311 replace {
1312         cjne    @%1,%2,%3
1313         inc     %1
1314         cjne    @%1,%6,%3
1315         inc     %1
1316         cjne    @%1,%11,%3
1317         inc     %1
1318         cjne    @%1,%14,%3
1319         sjmp    %7
1320 %3:
1321         sjmp    %8
1322 } by {
1323         ;       Peephole 193.a  optimized misc jump sequence
1324         cjne    @%1,%2,%8
1325         inc     %1
1326         cjne    @%1,%6,%8
1327         inc     %1
1328         cjne    @%1,%11,%8
1329         inc     %1
1330         cjne    @%1,%14,%8
1331         sjmp    %7
1332 ;%3:
1333 } if labelRefCount %3 4
1334
1335 replace {
1336         cjne    %1,%2,%3
1337         cjne    %5,%6,%3
1338         cjne    %10,%11,%3
1339         cjne    %13,%14,%3
1340         sjmp    %7
1341 %3:
1342         sjmp    %8
1343 } by {
1344         ;       Peephole 194    optimized misc jump sequence
1345         cjne    %1,%2,%8
1346         cjne    %5,%6,%8
1347         cjne    %10,%11,%8
1348         cjne    %13,%14,%8
1349         sjmp    %7
1350 ;%3:
1351 } if labelRefCount %3 4
1352
1353 replace {
1354         jnz     %3
1355         mov     a,%4
1356         jnz     %3
1357         mov     a,%9
1358         cjne    %10,%11,%3
1359         sjmp    %7
1360 %3:
1361         sjmp    %8
1362 } by {
1363         ;       Peephole 195.a  optimized misc jump sequence
1364         jnz     %8
1365         mov     a,%4
1366         jnz     %8
1367         mov     a,%9
1368         cjne    %10,%11,%8
1369         sjmp    %7
1370 ;%3:
1371 } if labelRefCount %3 3
1372
1373 replace {
1374         cjne    %1,%2,%3
1375         mov     a,%4
1376         cjne    %5,%6,%3
1377         mov     a,%9
1378         cjne    %10,%11,%3
1379         sjmp    %7
1380 %3:
1381         sjmp    %8
1382 } by {
1383         ;       Peephole 195.b  optimized misc jump sequence
1384         cjne    %1,%2,%8
1385         mov     a,%4
1386         cjne    %5,%6,%8
1387         mov     a,%9
1388         cjne    %10,%11,%8
1389         sjmp    %7
1390 ;%3:
1391 } if labelRefCount %3 3
1392
1393 replace {
1394         cjne    @%1,%2,%3
1395         inc     %1
1396         cjne    @%1,%6,%3
1397         inc     %1
1398         cjne    @%1,%11,%3
1399         sjmp    %7
1400 %3:
1401         sjmp    %8
1402 } by {
1403         ;       Peephole 195.c  optimized misc jump sequence
1404         cjne    @%1,%2,%8
1405         inc     %1
1406         cjne    @%1,%6,%8
1407         inc     %1
1408         cjne    @%1,%11,%8
1409         sjmp    %7
1410 ;%3:
1411 } if labelRefCount %3 3
1412
1413 replace {
1414         cjne    %1,%2,%3
1415         cjne    %5,%6,%3
1416         cjne    %10,%11,%3
1417         sjmp    %7
1418 %3:
1419         sjmp    %8
1420 } by {
1421         ;       Peephole 196    optimized misc jump sequence
1422         cjne    %1,%2,%8
1423         cjne    %5,%6,%8
1424         cjne    %10,%11,%8
1425         sjmp    %7
1426 ;%3:
1427 } if labelRefCount %3 3
1428
1429 replace {
1430         jnz     %3
1431         mov     a,%4
1432         cjne    %5,%6,%3
1433         sjmp    %7
1434 %3:
1435         sjmp    %8 
1436 } by {
1437         ;       Peephole 197.a  optimized misc jump sequence
1438         jnz     %8
1439         mov     a,%4
1440         cjne    %5,%6,%8
1441         sjmp    %7
1442 ;%3:     
1443 } if labelRefCount %3 2
1444
1445 replace {
1446         cjne    %1,%2,%3
1447         mov     a,%4
1448         cjne    %5,%6,%3
1449         sjmp    %7
1450 %3:
1451         sjmp    %8
1452 } by {
1453         ;       Peephole 197.b  optimized misc jump sequence
1454         cjne    %1,%2,%8
1455         mov     a,%4
1456         cjne    %5,%6,%8
1457         sjmp    %7
1458 ;%3:
1459 } if labelRefCount %3 2
1460
1461 replace {
1462         cjne     @%1,%2,%3
1463         inc     %1
1464         cjne    @%1,%6,%3
1465         sjmp    %7
1466 %3:
1467         sjmp    %8
1468 } by {
1469         ;       Peephole 197.c  optimized misc jump sequence
1470         cjne    @%1,%2,%8
1471         inc     %1
1472         cjne    @%1,%6,%8
1473         sjmp    %7
1474 ;%3:
1475 } if labelRefCount %3 2
1476
1477 replace {
1478         cjne    %1,%2,%3
1479         cjne    %5,%6,%3
1480         sjmp    %7
1481 %3:
1482         sjmp    %8
1483 } by {
1484         ;       Peephole 198    optimized misc jump sequence
1485         cjne    %1,%2,%8
1486         cjne    %5,%6,%8
1487         sjmp    %7
1488 ;%3:
1489 } if labelRefCount %3 2
1490
1491 replace {
1492         cjne    %1,%2,%3
1493         sjmp    %4
1494 %3:
1495         sjmp    %5
1496 } by {
1497         ;       Peephole 199    optimized misc jump sequence
1498         cjne    %1,%2,%5
1499         sjmp    %4
1500 ;%3:
1501 } if labelRefCount %3 1
1502
1503 replace {
1504         sjmp    %1
1505 %1:
1506 } by {
1507         ;       Peephole 200    removed redundant sjmp
1508 %1:
1509 }
1510
1511 replace {
1512         sjmp    %1
1513 %2:
1514 %1:
1515 } by {
1516         ;       Peephole 201    removed redundant sjmp
1517 %2:
1518 %1:
1519 }
1520
1521 replace {
1522         push    acc
1523         mov     dptr,%1
1524         pop     acc
1525 } by {
1526         ;       Peephole 202    removed redundant push pop
1527         mov     dptr,%1
1528 }
1529
1530 replace {
1531         mov     r%1,_spx
1532         lcall   %2
1533         mov     r%1,_spx
1534 } by {
1535         ;       Peephole 203    removed mov  r%1,_spx
1536         lcall   %2
1537 }
1538
1539 replace {
1540         mov     %1,a
1541         add     a,acc
1542         mov     %1,a
1543 } by {
1544         ;       Peephole 204    removed redundant mov
1545         add     a,acc
1546         mov     %1,a
1547 }
1548
1549 replace {
1550         djnz    %1,%2
1551         sjmp    %3
1552 %2:
1553         sjmp    %4
1554 %3:
1555 } by {
1556         ;       Peephole 205    optimized misc jump sequence
1557         djnz    %1,%4
1558 %2:
1559 %3:
1560 } if labelRefCount %2 1
1561
1562 replace {
1563         mov     %1,%1
1564 } by {
1565         ;       Peephole 206    removed redundant mov %1,%1
1566 }
1567
1568 replace {
1569         mov     a,_bp
1570         add     a,#0x00
1571         mov     %1,a
1572 } by {
1573         ;       Peephole 207    removed zero add (acc not set to %1, flags undefined)
1574         mov     %1,_bp
1575 }
1576
1577 replace {
1578         push    acc
1579         mov     r%1,_bp
1580         pop     acc
1581 } by {
1582         ;       Peephole 208    removed redundant push pop
1583         mov     r%1,_bp
1584 }
1585
1586 replace {
1587         mov     a,_bp
1588         add     a,#0x00
1589         inc     a
1590         mov     %1,a
1591 } by {
1592         ;       Peephole 209    optimized increment (acc not set to %1, flags undefined)
1593         mov     %1,_bp
1594         inc     %1
1595 }
1596
1597 replace {
1598         mov     dptr,#((((%1 >> 8)) <<8) + %1)
1599 } by {
1600         ;       Peephole 210    simplified expression
1601         mov     dptr,#%1
1602 }
1603
1604 replace {
1605         push    %1
1606         pop     %1
1607 } by {
1608         ;       Peephole 211    removed redundant push %1 pop %1  
1609
1610
1611 replace {
1612         mov     a,_bp
1613         add     a,#0x01
1614         mov     r%1,a
1615 } by {
1616         ;       Peephole 212    reduced add sequence to inc
1617         mov     r%1,_bp
1618         inc     r%1
1619 }
1620
1621 replace {
1622         mov     %1,#(( %2 >> 8 ) ^ 0x80)
1623 } by {
1624         ;       Peephole 213.a  inserted fix
1625         mov     %1,#(%2 >> 8)
1626         xrl     %1,#0x80
1627 }
1628
1629 replace {
1630         mov     %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1631 } by {
1632         ;       Peephole 213.b  inserted fix     
1633         mov     %1,#((%2 + %3) >> 8)
1634         xrl     %1,#0x80
1635 }
1636
1637 replace  {
1638         mov     %1,a
1639         mov     a,%2
1640         add     a,%1
1641 } by {
1642         ;       Peephole 214    reduced some extra moves
1643         mov     %1,a
1644         add     a,%2
1645 } if operandsNotSame
1646
1647 replace {
1648         mov     %1,a
1649         add     a,%2
1650         mov     %1,a
1651 } by {
1652         ;       Peephole 215    removed some moves
1653         add     a,%2
1654         mov     %1,a
1655 } if operandsNotSame
1656
1657 replace {
1658         mov     r%1,%2
1659         clr     a
1660         inc     r%1
1661         mov     @r%1,a
1662         dec     r%1
1663         mov     @r%1,a
1664 } by {
1665         ;       Peephole 216    simplified clear (2bytes)
1666         mov     r%1,%2
1667         clr     a
1668         mov     @r%1,a
1669         inc     r%1
1670         mov     @r%1,a
1671 }
1672
1673 replace {
1674         mov     r%1,%2
1675         clr     a
1676         inc     r%1
1677         inc     r%1
1678         mov     @r%1,a
1679         dec     r%1
1680         mov     @r%1,a
1681         dec     r%1
1682         mov     @r%1,a
1683 } by {
1684         ;       Peephole 217    simplified clear (3bytes)
1685         mov     r%1,%2
1686         clr     a
1687         mov     @r%1,a
1688         inc     r%1
1689         mov     @r%1,a
1690         inc     r%1
1691         mov     @r%1,a
1692 }
1693
1694 replace {
1695         mov     r%1,%2
1696         clr     a
1697         inc     r%1
1698         inc     r%1
1699         inc     r%1
1700         mov     @r%1,a
1701         dec     r%1
1702         mov     @r%1,a
1703         dec     r%1
1704         mov     @r%1,a
1705         dec     r%1
1706         mov     @r%1,a
1707 } by {
1708         ;       Peephole 218    simplified clear (4bytes)
1709         mov     r%1,%2
1710         clr     a
1711         mov     @r%1,a
1712         inc     r%1
1713         mov     @r%1,a
1714         inc     r%1
1715         mov     @r%1,a
1716         inc     r%1
1717         mov     @r%1,a
1718 }
1719
1720 replace {
1721         clr     a
1722         movx    @dptr,a
1723         mov     dptr,%1
1724         clr     a
1725         movx    @dptr,a
1726 } by {
1727         ;       Peephole 219    removed redundant clear
1728         clr     a
1729         movx    @dptr,a
1730         mov     dptr,%1
1731         movx    @dptr,a
1732 }
1733
1734 replace {
1735         clr     a
1736         movx    @dptr,a
1737         mov     dptr,%1
1738         movx    @dptr,a
1739         mov     dptr,%2
1740         clr     a
1741         movx    @dptr,a
1742 } by {
1743         ;       Peephole 219.a  removed redundant clear
1744         clr     a
1745         movx    @dptr,a
1746         mov     dptr,%1
1747         movx    @dptr,a
1748         mov     dptr,%2
1749         movx    @dptr,a
1750 }
1751
1752 replace {
1753         mov     dps,#0x00
1754         mov     dps,#0x01
1755 } by {
1756         ;       Peephole 220.a  removed bogus DPS set
1757         mov     dps,#0x01
1758 }
1759
1760 replace {
1761         mov     dps,#0x01
1762         mov     dps,#0x00
1763 } by {
1764         ;       Peephole 220.b  removed bogus DPS set
1765         mov     dps,#0x00
1766 }
1767
1768 replace {
1769         mov     %1 + %2,(%2 + %1)
1770 } by {
1771         ;       Peephole 221.a  remove redundant move
1772 }
1773
1774 replace {
1775         mov     (%1 + %2 + %3),((%2 + %1) + %3)
1776 } by {
1777         ;       Peephole 221.b  remove redundant move
1778 }
1779
1780 replace {
1781         dec     r%1
1782         inc     r%1
1783 } by {
1784         ;       Peephole 222    removed dec/inc pair
1785 }
1786
1787 replace {
1788         mov     %1,dpl
1789         mov     %2,dph
1790         mov     dpl,%1
1791         mov     dph,%2
1792 } by {
1793         ;       Peephole 223    removed redundant dph/dpl moves
1794         mov     %1,dpl
1795         mov     %2,dph
1796 }
1797
1798 replace {
1799         mov     %1,dpl
1800         mov     (%1 + 1),dph
1801         mov     dpl,%1
1802         mov     dph,(%1 + 1)
1803 } by {
1804         ;       Peephole 224    removed redundant dph/dpl moves
1805         mov     %1,dpl
1806         mov     (%1 + 1),dph
1807 }
1808
1809 replace {
1810         mov     a,%1
1811         movx    @dptr,a
1812         mov     dpl,%2
1813         mov     dph,%3
1814         mov     b,%4
1815         mov     a,%1
1816 } by {
1817         ;       Peephole 225    removed redundant move to acc
1818         mov     a,%1
1819         movx    @dptr,a
1820         mov     dpl,%2
1821         mov     dph,%3
1822         mov     b,%4
1823 }
1824
1825 replace {
1826         clr     a
1827         movx    @dptr,a
1828         inc     dptr
1829         movx    @dptr,a
1830         inc     dptr
1831         clr     a
1832 } by {
1833         ;       Peephole 226    removed unnecessary clr
1834         clr     a
1835         movx    @dptr,a
1836         inc     dptr
1837         movx    @dptr,a
1838         inc     dptr
1839 }
1840
1841 replace {
1842         mov     dptr,#%1
1843         clr     a
1844         inc     dptr
1845         inc     dptr
1846         inc     dptr
1847         movx    @dptr,a
1848         lcall   __decdptr
1849         movx    @dptr,a
1850         lcall   __decdptr
1851         movx    @dptr,a
1852         lcall   __decdptr
1853         movx    @dptr,a
1854 } by {
1855         ;       Peephole 227    replaced inefficient 32 bit clear
1856         mov     dptr,#%1
1857         clr     a
1858         movx    @dptr,a
1859         inc     dptr
1860         movx    @dptr,a
1861         inc     dptr
1862         movx    @dptr,a
1863         inc     dptr
1864         movx    @dptr,a
1865         mov     dptr,#%1
1866 }
1867
1868 replace {
1869         mov     dptr,#%1
1870         clr     a
1871         inc     dptr
1872         inc     dptr
1873         inc     dptr
1874         movx    @dptr,a
1875         lcall   __decdptr
1876         movx    @dptr,a
1877         lcall   __decdptr
1878         movx    @dptr,a
1879         lcall   __decdptr
1880         mov     a,#%2
1881         movx    @dptr,a
1882 } by {
1883         ;       Peephole 228    replaced inefficient 32 constant
1884         mov     dptr,#%1
1885         mov     a,#%2
1886         movx    @dptr,a
1887         inc     dptr
1888         clr     a
1889         movx    @dptr,a
1890         inc     dptr
1891         movx    @dptr,a
1892         inc     dptr
1893         movx    @dptr,a
1894         mov     dptr,#%1
1895 }
1896
1897 replace {
1898         mov     dptr,#%1
1899         clr     a
1900         inc     dptr
1901         movx    @dptr,a
1902         lcall   __decdptr
1903         movx    @dptr,a
1904 } by {
1905         ;       Peephole 229    replaced inefficient 16 bit clear
1906         mov     dptr,#%1
1907         clr     a
1908         movx    @dptr,a
1909         inc     dptr
1910         movx    @dptr,a
1911         mov     dptr,#%1
1912 }
1913
1914 replace {
1915         mov     dptr,#%1
1916         clr     a
1917         inc     dptr
1918         movx    @dptr,a
1919         lcall   __decdptr
1920         mov     a,#%2
1921         movx    @dptr,a
1922 } by {
1923         ;       Peephole 230    replaced inefficient 16 constant
1924         mov     dptr,#%1
1925         mov     a,#%2
1926         movx    @dptr,a
1927         inc     dptr
1928         clr     a
1929         movx    @dptr,a
1930         mov     dptr,#%1
1931 }
1932
1933 // this last peephole often removes the last mov from 227-230
1934 replace {
1935         mov     dptr,#%1
1936         mov     dptr,#%2
1937 } by {
1938         ;       Peephole 231    removed redundant mov to dptr
1939         mov     dptr,#%2
1940 }
1941
1942 replace {
1943         movx    a,@dptr
1944 } by {
1945         ;       Peephole 232    using movc to read xdata (--xram-movc)
1946         clr     a
1947         movc    a,@a+dptr
1948 } if xramMovcOption
1949
1950 replace {
1951         lcall   _gptrget
1952 } by {
1953         ;       Peephole 233    using _gptrgetc instead of _gptrget (--xram-movc)
1954         lcall   _gptrgetc
1955 } if xramMovcOption
1956
1957 replace {
1958         mov     r%1,a
1959         mov     dpl,r%1
1960 %2:
1961         ret
1962 } by {
1963         ;       Peephole 234    loading dpl directly from a(ccumulator), r%1 not set
1964         mov     dpl,a
1965 %2:
1966         ret
1967 }
1968
1969 replace {
1970         mov     r%1,a
1971         mov     dpl,r%2
1972         mov     dph,r%1
1973 %3:
1974         ret
1975 } by {
1976         ;       Peephole 235    loading dph directly from a(ccumulator), r%1 not set
1977         mov     dpl,r%2
1978         mov     dph,a
1979 %3:
1980         ret
1981 }
1982
1983 // 14 rules by Fiorenzo D. Ramaglia <fd.ramaglia@tin.it>
1984
1985 replace {
1986         add     a,ar%1
1987 } by {
1988         ;       Peephole 236.a  used r%1 instead of ar%1
1989         add     a,r%1
1990 }
1991
1992 replace {
1993         addc    a,ar%1
1994 } by {
1995         ;       Peephole 236.b  used r%1 instead of ar%1
1996         addc    a,r%1
1997 }
1998
1999 replace {
2000         anl     a,ar%1
2001 } by {
2002         ;       Peephole 236.c  used r%1 instead of ar%1
2003         anl     a,r%1
2004 }
2005
2006 replace {
2007         dec     ar%1
2008 } by {
2009         ;       Peephole 236.d  used r%1 instead of ar%1
2010         dec     r%1
2011 }
2012
2013 replace {
2014         djnz    ar%1,%2
2015 } by {
2016         ;       Peephole 236.e  used r%1 instead of ar%1
2017         djnz    r%1,%2
2018 }
2019
2020 replace {
2021         inc     ar%1
2022 } by {
2023         ;       Peephole 236.f  used r%1 instead of ar%1
2024         inc     r%1
2025 }
2026
2027 replace {
2028         mov     a,ar%1
2029 } by {
2030         ;       Peephole 236.g  used r%1 instead of ar%1
2031         mov     a,r%1
2032 }
2033
2034 replace {
2035         mov     ar%1,#%2
2036 } by {
2037         ;       Peephole 236.h  used r%1 instead of ar%1
2038         mov     r%1,#%2
2039 }
2040
2041 replace {
2042         mov     ar%1,a
2043 } by {
2044         ;       Peephole 236.i  used r%1 instead of ar%1
2045         mov     r%1,a
2046 }
2047
2048 replace {
2049         mov     ar%1,ar%2
2050 } by {
2051         ;       Peephole 236.j  used r%1 instead of ar%1
2052         mov     r%1,ar%2
2053 }
2054
2055 replace {
2056         orl     a,ar%1
2057 } by {
2058         ;       Peephole 236.k  used r%1 instead of ar%1
2059         orl     a,r%1
2060 }
2061
2062 replace {
2063         subb    a,ar%1
2064 } by {
2065         ;       Peephole 236.l  used r%1 instead of ar%1
2066         subb    a,r%1
2067 }
2068
2069 replace {
2070         xch     a,ar%1
2071 } by {
2072         ;       Peephole 236.m  used r%1 instead of ar%1
2073         xch     a,r%1
2074 }
2075
2076 replace {
2077         xrl     a,ar%1
2078 } by {
2079         ;       Peephole 236.n  used r%1 instead of ar%1
2080         xrl     a,r%1
2081 }
2082
2083 replace {
2084         sjmp    %1
2085 %2:
2086         mov     %3,%4
2087 %1:
2088         ret
2089 } by {
2090         ;       Peephole 237.a  removed sjmp to ret
2091         ret
2092 %2:
2093         mov     %3,%4
2094 %1:
2095         ret
2096 }
2097
2098 replace {
2099         sjmp    %1
2100 %2:
2101         mov     %3,%4
2102         mov     dpl,%5
2103         mov     dph,%6
2104 %1:
2105         ret
2106 } by {
2107         ;       Peephole 237.b  removed sjmp to ret
2108         ret
2109 %2:
2110         mov     %3,%4
2111         mov     dpl,%5
2112         mov     dph,%6
2113 %1:
2114         ret
2115 }
2116
2117 // applies to f.e. device/lib/log10f.c
2118 replace {
2119         mov     %1,%9
2120         mov     %2,%10
2121         mov     %3,%11
2122         mov     %4,%12
2123         
2124         mov     %5,%13
2125         mov     %6,%14
2126         mov     %7,%15
2127         mov     %8,%16
2128
2129         mov     %9,%1
2130         mov     %10,%2
2131         mov     %11,%3
2132         mov     %12,%4
2133 } by {
2134         mov     %1,%9
2135         mov     %2,%10
2136         mov     %3,%11
2137         mov     %4,%12
2138         
2139         mov     %5,%13
2140         mov     %6,%14
2141         mov     %7,%15
2142         mov     %8,%16
2143         ;       Peephole 238.a  removed 4 redundant moves
2144 } if operandsNotSame8 %1 %2 %3 %4 %5 %6 %7 %8
2145
2146 // applies to device/lib/log10f.c
2147 replace {
2148         mov     %1,%5
2149         mov     %2,%6
2150         mov     %3,%7
2151         mov     %4,%8
2152         
2153         mov     %5,%1
2154         mov     %6,%2
2155         mov     %7,%3
2156 } by {
2157         mov     %1,%5
2158         mov     %2,%6
2159         mov     %3,%7
2160         mov     %4,%8
2161         ;       Peephole 238.b  removed 3 redundant moves
2162 } if operandsNotSame7 %1 %2 %3 %4 %5 %6 %7
2163
2164 // applies to f.e. device/lib/time.c
2165 replace {
2166         mov     %1,%5
2167         mov     %2,%6
2168         
2169         mov     %3,%7
2170         mov     %4,%8
2171
2172         mov     %5,%1
2173         mov     %6,%2
2174 } by {
2175         mov     %1,%5
2176         mov     %2,%6
2177         
2178         mov     %3,%7
2179         mov     %4,%8
2180         ;       Peephole 238.c  removed 2 redundant moves
2181 } if operandsNotSame4 %1 %2 %3 %4
2182
2183 // applies to f.e. support/regression/tests/bug-524209.c
2184 replace {
2185         mov     %1,%4
2186         mov     %2,%5
2187         mov     %3,%6
2188
2189         mov     %4,%1
2190         mov     %5,%2
2191         mov     %6,%3
2192 } by {
2193         mov     %1,%4
2194         mov     %2,%5
2195         mov     %3,%6
2196         ;       Peephole 238.d  removed 3 redundant moves
2197 } if operandsNotSame6 %1 %2 %3 %4 %5 %6 
2198
2199 // applies to f.e. ser_ir.asm
2200 replace {
2201         mov     r%1,acc
2202 } by {
2203         ;       Peephole 239    used a instead of acc
2204         mov     r%1,a
2205 }
2206
2207 replace restart {
2208         mov     a,%1
2209         addc    a,#0x00
2210 } by {
2211         ;       Peephole 240    use clr instead of addc a,#0
2212         clr     a
2213         addc    a,%1
2214 }
2215