704380cac136d8b5afe50da7b61e3a130d457531
[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
61
62 replace {
63         mov  %1,a
64         mov  dptr,#%2
65         mov  a,%1
66         movx @dptr,a
67 } by {
68         ; Peephole 100   removed redundant mov
69         mov  %1,a
70         mov  dptr,#%2
71         movx @dptr,a
72 }
73 replace {
74         mov  a,acc
75 } by {
76         ;  Peephole 100.a   removed redundant mov
77 }
78
79 replace {
80         mov  a,%1
81         movx @dptr,a
82         inc  dptr
83         mov  a,%1
84         movx @dptr,a
85 } by {
86         ; Peephole 101   removed redundant mov
87         mov  a,%1
88         movx @dptr,a
89         inc  dptr
90         movx @dptr,a
91 }
92
93 replace {
94         mov  %1,%2
95         ljmp %3
96 %4:
97         mov  %1,%5
98 %3:
99         mov  dpl,%1
100 %7:
101         mov  sp,bp
102         pop  bp
103 } by {
104         ; Peephole 102   removed redundant mov
105         mov  dpl,%2
106         ljmp %3
107 %4:
108         mov  dpl,%5
109 %3:
110 %7:
111         mov  sp,bp
112         pop  bp
113 }
114
115 replace {
116         mov  %1,%2
117         ljmp %3
118 %4:
119         mov  a%1,%5
120 %3:
121         mov  dpl,%1
122 %7:
123         mov  sp,bp
124         pop  bp
125 } by {
126         ; Peephole 103   removed redundant mov
127         mov  dpl,%2
128         ljmp %3
129 %4:
130         mov  dpl,%5
131 %3:
132 %7:
133         mov  sp,bp
134         pop  bp
135 }
136
137 replace {
138         mov  a,bp
139         clr  c
140         add  a,#0x01
141         mov  r%1,a
142 } by {
143         ; Peephole 104   optimized increment (acc not set to r%1, flags undefined)
144         mov  r%1,bp
145         inc  r%1
146 }
147
148 replace {
149         mov  %1,a
150         mov  a,%1
151 } by {
152         ; Peephole 105   removed redundant mov
153         mov  %1,a
154 }
155
156 replace {
157         mov  %1,a
158         clr  c
159         mov  a,%1
160 } by {
161         ; Peephole 106   removed redundant mov 
162         mov  %1,a
163         clr  c
164 }
165
166 replace {
167         ljmp %1
168 %1:
169 } by {
170         ; Peephole 107   removed redundant ljmp
171 %1:
172 }
173
174 replace {
175         jc   %1
176         ljmp %5
177 %1:
178 } by {
179         ; Peephole 108   removed ljmp by inverse jump logic
180         jnc  %5
181 %1:
182 } if labelInRange
183
184 replace {
185         jz   %1
186         ljmp %5
187 %1:
188 } by {
189         ; Peephole 109   removed ljmp by inverse jump logic
190         jnz  %5
191 %1:
192 } if labelInRange
193
194 replace {
195         jnz  %1
196         ljmp %5
197 %1:
198 } by {
199         ; Peephole 110   removed ljmp by inverse jump logic
200         jz  %5
201 %1:
202 } if labelInRange
203
204 replace {
205         jb   %1,%2
206         ljmp %5
207 %2:
208 } by {
209         ; Peephole 111   removed ljmp by inverse jump logic
210         jnb  %1,%5
211 %2:
212 } if labelInRange
213
214 replace {
215         jnb  %1,%2
216         ljmp %5
217 %2:
218 } by {
219        ; Peephole 112   removed ljmp by inverse jump logic
220         jb   %1,%5
221 %2:
222 } if labelInRange
223
224 replace {
225         ljmp %5
226 %1:
227 } by {
228         ; Peephole 132   changed ljmp to sjmp
229         sjmp %5
230 %1:
231 } if labelInRange
232
233
234 replace {
235         clr  a
236         cjne %1,%2,%3
237         cpl  a
238 %3:
239         rrc  a
240         mov  %4,c
241 } by {
242         ; Peephole 113   optimized misc sequence
243         clr  %4
244         cjne %1,%2,%3
245         setb %4
246 %3:
247 } if labelRefCount %3 1
248
249 replace {
250         clr  a
251         cjne %1,%2,%3
252         cjne %10,%11,%3
253         cpl  a
254 %3:
255         rrc  a
256         mov  %4,c
257 } by {
258         ; Peephole 114   optimized misc sequence
259         clr  %4
260         cjne %1,%2,%3
261         cjne %10,%11,%3
262         setb %4
263 %3:
264 } if labelRefCount %3 2
265
266 replace {
267         clr  a
268         cjne %1,%2,%3
269         cpl  a
270 %3:
271         jnz  %4
272 } by {
273         ; Peephole 115   jump optimization 
274         cjne %1,%2,%3
275         sjmp %4
276 %3:
277 } if labelRefCount %3 1
278
279 replace {
280         clr  a
281         cjne %1,%2,%3
282         cjne %9,%10,%3
283         cpl  a
284 %3:
285         jnz  %4
286 } by {
287         ; Peephole 116   jump optimization
288         cjne %1,%2,%3
289         cjne %9,%10,%3
290         sjmp %4
291 %3:
292 } if labelRefCount %3 2
293
294 replace {
295         clr  a
296         cjne %1,%2,%3
297         cjne %9,%10,%3
298         cjne %11,%12,%3
299         cpl  a
300 %3:
301         jnz %4
302 } by {
303         ; Peephole 117   jump optimization
304         cjne %1,%2,%3
305         cjne %9,%10,%3
306         cjne %11,%12,%3
307         sjmp %4
308 %3:
309 } if labelRefCount %3 3
310
311 replace {
312         clr  a
313         cjne %1,%2,%3
314         cjne %9,%10,%3
315         cjne %11,%12,%3
316         cjne %13,%14,%3
317         cpl  a
318 %3:
319         jnz %4
320 } by {
321         ; Peephole 118   jump optimization
322         cjne %1,%2,%3
323         cjne %9,%10,%3
324         cjne %11,%12,%3
325         cjne %13,%14,%3
326         sjmp %4
327 %3:
328 } if labelRefCount %3 4
329
330 replace {
331         mov  a,#0x01
332         cjne %1,%2,%3
333         clr  a
334 %3:
335         jnz  %4
336 } by {
337         ; Peephole 119   jump optimization
338         cjne %1,%2,%4
339 %3:
340 } if labelRefCount %3 1
341
342 replace {
343         mov  a,#0x01
344         cjne %1,%2,%3
345         cjne %10,%11,%3
346         clr  a
347 %3:
348         jnz  %4
349 } by {
350         ; Peephole 120   jump optimization
351         cjne %1,%2,%4
352         cjne %10,%11,%4
353 %3:
354 } if labelRefCount %3 2
355
356 replace {
357         mov  a,#0x01
358         cjne %1,%2,%3
359         cjne %10,%11,%3
360         cjne %12,%13,%3
361         clr  a
362 %3:
363         jnz  %4
364 } by {
365         ; Peephole 121   jump optimization
366         cjne %1,%2,%4
367         cjne %10,%11,%4
368         cjne %12,%13,%4
369 %3:
370 } if labelRefCount %3 3
371
372 replace {
373         mov  a,#0x01
374         cjne %1,%2,%3
375         cjne %10,%11,%3
376         cjne %12,%13,%3
377         cjne %14,%15,%3
378         clr  a
379 %3:
380         jnz  %4
381 } by {
382         ; Peephole 122   jump optimization
383         cjne %1,%2,%4
384         cjne %10,%11,%4
385         cjne %12,%13,%4
386         cjne %14,%15,%4
387 %3:
388 } if labelRefCount %3 4
389
390 replace {
391         mov  a,#0x01
392         cjne %1,%2,%3
393         clr  a
394 %3:
395         jz   %4
396 } by {
397         ; Peephole 123   jump optimization
398         cjne %1,%2,%3
399         smp  %4
400 %3:
401 } if labelRefCount %3 1
402
403 replace {
404         mov  a,#0x01
405         cjne %1,%2,%3
406         cjne %10,%11,%3
407         clr  a
408 %3:
409         jz   %4
410 } by {
411         ; Peephole 124   jump optimization
412         cjne %1,%2,%3
413         cjne %10,%11,%3
414         sjmp  %4
415 %3:
416 } if labelRefCount %3 2
417
418 replace {
419         mov  a,#0x01
420         cjne %1,%2,%3
421         cjne %10,%11,%3
422         cjne %12,%13,%3
423         clr  a
424 %3:
425         jz   %4
426 } by {
427         ; Peephole 125   jump optimization
428         cjne %1,%2,%3
429         cjne %10,%11,%3
430         cjne %12,%13,%3
431         sjmp %4
432 %3:
433 } if labelRefCount %3 3
434
435 replace {
436         mov  a,#0x01
437         cjne %1,%2,%3
438         cjne %10,%11,%3
439         cjne %12,%13,%3
440         cjne %14,%15,%3
441         clr  a
442 %3:
443         jz   %4
444 } by {
445         ; Peephole 126   jump optimization
446         cjne %1,%2,%3
447         cjne %10,%11,%3
448         cjne %12,%13,%3
449         cjne %14,%15,%3
450         sjmp %4
451 %3:
452 } if labelRefCount %3 4
453
454 replace {
455         push psw
456         mov  psw,%1
457         push bp
458         mov  bp,%2
459 %3:
460         mov  %2,bp
461         pop  bp
462         pop  psw
463         ret
464 } by {
465         ; Peephole 127   removed misc sequence
466         ret
467 } if labelRefCount %3 0
468
469 replace {
470         clr  a
471         rlc  a
472         jz   %1
473 } by {
474         ; Peephole 128   jump optimization
475         jnc  %1
476 }
477
478 replace {
479         clr  a
480         rlc  a
481         jnz  %1
482 } by {
483         ; Peephole 129   jump optimization
484         jc   %1
485 }
486
487 replace { 
488         mov  r%1,@r%2
489 } by {
490         ; Peephole 130   changed target address mode r%1 to ar%1
491         mov  ar%1,@r%2
492 }
493
494 replace { 
495         mov  a,%1
496         subb a,#0x01
497         mov  %2,a
498         mov  %1,%2
499 } by {
500         ; Peephole 131   optimized decrement (not caring for c)
501         dec  %1         
502         mov  %2,%1      
503 }
504
505 replace {
506         mov  r%1,%2
507         mov  ar%3,@r%1
508         inc  r%3
509         mov  r%4,%2
510         mov  @r%4,ar%3
511 } by {
512         ; Peephole 133   removed redundant moves
513         mov  r%1,%2
514         inc  @r%1
515         mov  ar%3,@r%1
516 }
517
518 replace {
519         mov  r%1,%2
520         mov  ar%3,@r%1
521         dec  r%3
522         mov  r%4,%2
523         mov  @r%4,ar%3
524 } by {
525         ; Peephole 134   removed redundant moves
526         mov  r%1,%2
527         dec  @r%1
528         mov  ar%3,@r%1
529 }
530
531 replace {
532         mov  r%1,a
533         mov  a,r%2
534         orl  a,r%1
535 } by {
536         ; Peephole 135   removed redundant mov
537         mov  r%1,a
538         orl  a,r%2
539 }
540
541 replace {
542         mov  %1,a
543         mov  dpl,%2
544         mov  dph,%3
545         mov  a,%1
546 } by {
547         ; Peephole 136   removed redundant moves
548         mov  %1,a
549         mov  dpl,%2
550         mov  dph,%3
551 }
552
553 // WTF? Doesn't look sensible to me...
554 //replace {
555 //        mov  b,#0x00
556 //        mov  a,%1
557 //        cjne %2,%3,%4
558 //        mov  b,#0x01
559 //%4:
560 //        mov  a,b
561 //        jz   %5
562 //} by {
563 //        ; Peephole 137   optimized misc jump sequence
564 //        mov  a,%1
565 //        cjne %2,%3,%5
566 //%4:
567 //} if labelRefCount %4 1
568 //
569 //replace {
570 //        mov  b,#0x00
571 //        mov  a,%1
572 //        cjne %2,%3,%4
573 //        mov  b,#0x01
574 //%4:
575 //        mov  a,b
576 //        jnz  %5
577 //} by {
578 //        ; Peephole 138   optimized misc jump sequence
579 //        mov  a,%1
580 //        cjne %2,%3,%4
581 //        sjmp %5
582 //%4:
583 //} if labelRefCount %4 1
584
585 replace {
586         mov  r%1,a
587         anl  ar%1,%2
588         mov  a,r%1
589 } by {
590         ; Peephole 139   removed redundant mov
591         anl  a,%2
592         mov  r%1,a
593 }
594
595 replace {
596         mov  r%1,a
597         orl  ar%1,%2
598         mov  a,r%1
599 } by {
600         ; Peephole 140   removed redundant mov
601         orl  a,%2
602         mov  r%1,a }
603
604 replace {
605         mov  r%1,a
606         xrl  ar%1,%2
607         mov  a,r%1
608 } by {
609         ; Peephole 141   removed redundant mov
610         xrl  a,%2
611         mov  r%1,a
612 }
613
614 replace {
615         mov  r%1,a
616         mov  r%2,ar%1
617         mov  ar%1,@r%2
618 } by {
619         ; Peephole 142   removed redundant moves
620         mov  r%2,a
621         mov  ar%1,@r%2
622 }
623
624 replace {
625         rlc  a
626         mov  acc.0,c
627 } by {
628         ; Peephole 143   converted rlc to rl
629         rl   a
630 }
631
632 replace {
633         rrc  a
634         mov  acc.7,c
635 } by {
636         ; Peephole 144   converted rrc to rc
637         rr   a
638 }
639
640 replace {
641         clr  c
642         addc a,%1
643 } by {
644         ; Peephole 145   changed to add without carry  
645         add  a,%1
646 }
647
648 replace {
649         clr  c
650         mov  a,%1
651         addc a,%2
652 } by {
653         ; Peephole 146   changed to add without carry
654         mov  a,%1
655         add  a,%2
656 }
657
658 replace {
659         orl  r%1,a
660 } by {
661         ; Peephole 147   changed target address mode r%1 to ar%1
662         orl  ar%1,a
663 }
664
665 replace {
666         anl  r%1,a
667 } by {
668         ; Peephole 148   changed target address mode r%1 to ar%1
669         anl  ar%1,a
670 }
671
672 replace {
673         xrl  r%1,a
674 } by {
675         ; Peephole 149   changed target address mode r%1 to ar%1
676         xrl  ar%1,a
677 }
678
679 replace {
680         mov  %1,dpl
681         mov  dpl,%1
682 %9:
683         ret
684 } by {
685         ; Peephole 150   removed misc moves via dpl before return
686 %9:
687         ret
688 }
689
690 replace {
691         mov  %1,dpl
692         mov  %2,dph
693         mov  dpl,%1
694         mov  dph,%2
695 %9:
696         ret
697 } by {
698         ; Peephole 151   removed misc moves via dph, dpl before return
699 %9:
700         ret
701 }
702
703 replace {
704         mov  %1,dpl
705         mov  %2,dph
706         mov  dpl,%1
707 %9:
708         ret
709 } by {
710         ; Peephole 152   removed misc moves via dph, dpl before return
711 %9:
712         ret
713 }
714
715 replace {
716         mov  %1,dpl
717         mov  %2,dph
718         mov  %3,b
719         mov  dpl,%1
720         mov  dph,%2
721         mov  b,%3
722 %9:
723         ret
724 } by {
725         ; Peephole 153   removed misc moves via dph, dpl, b before return
726 %9:
727         ret
728 }
729
730 replace {
731         mov  %1,dpl
732         mov  %2,dph
733         mov  %3,b
734         mov  dpl,%1
735 %9:
736         ret
737 } by {
738         ; Peephole 154   removed misc moves via dph, dpl, b before return
739 %9:
740         ret
741 }
742
743 replace {
744         mov  %1,dpl
745         mov  %2,dph
746         mov  %3,b
747         mov  dpl,%1
748         mov  dph,%2
749 %9:
750         ret
751 } by {
752         ; Peephole 155   removed misc moves via dph, dpl, b before return
753 %9:
754         ret
755 }
756
757 replace {
758         mov  %1,dpl
759         mov  %2,dph
760         mov  %3,b
761         mov  %4,a
762         mov  dpl,%1
763         mov  dph,%2
764         mov  b,%3
765         mov  a,%4
766 %9:
767         ret
768 } by {
769         ; Peephole 156   removed misc moves via dph, dpl, b, a before return
770 %9:
771         ret
772 }
773
774 replace {
775         mov  %1,dpl
776         mov  %2,dph
777         mov  %3,b
778         mov  %4,a
779         mov  dpl,%1
780         mov  dph,%2
781 %9:
782         ret
783 } by {
784         ; Peephole 157   removed misc moves via dph, dpl, b, a before return
785 %9:
786         ret
787 }
788
789 replace {
790         mov  %1,dpl
791         mov  %2,dph
792         mov  %3,b
793         mov  %4,a
794         mov  dpl,%1
795 %9:
796         ret } by {
797         ; Peephole 158   removed misc moves via dph, dpl, b, a before return
798 %9:
799         ret }
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 replace {
819         jc   %1
820         sjmp %2
821 %1:
822 } by {
823         ; Peephole 161   removed sjmp by inverse jump logic
824         jnc  %2
825 %1:}
826
827 replace {
828         jnz  %1
829         sjmp %2
830 %1:
831 } by {
832         ; Peephole 162   removed sjmp by inverse jump logic
833         jz   %2
834 %1:}
835
836 replace {
837         jz   %1
838         sjmp %2
839 %1:
840 } by {
841         ; Peephole 163   removed sjmp by inverse jump logic
842         jnz  %2
843 %1:}
844
845 replace {
846         jnb  %3,%1
847         sjmp %2
848 %1:
849 } by {
850         ; Peephole 164   removed sjmp by inverse jump logic
851         jb   %3,%2
852 %1:
853 }
854
855 replace {
856         jb   %3,%1
857         sjmp %2
858 %1:
859 } by {
860         ; Peephole 165   removed sjmp by inverse jump logic
861         jnb  %3,%2
862 %1:
863 }
864
865 replace {
866         mov  %1,%2
867         mov  %3,%1
868         mov  %2,%1
869 } by {
870         ; Peephole 166   removed redundant mov
871         mov  %1,%2
872         mov  %3,%1 }
873
874 replace {
875         mov  c,%1
876         cpl  c
877         mov  %1,c
878 } by {
879         ; Peephole 167   removed redundant bit moves (c not set to %1)
880         cpl  %1 }
881
882 replace {
883         jnb  %1,%2
884         sjmp %3
885 %2:} by {
886         ; Peephole 168   jump optimization
887         jb   %1,%3
888 %2:}
889
890 replace {
891         jb   %1,%2
892         sjmp %3
893 %2:} by {
894         ; Peephole 169   jump optimization
895         jnb  %1,%3
896 %2:}
897
898 replace {
899         clr  a
900         cjne %1,%2,%3
901         cpl  a
902 %3:
903         jz   %4
904 } by {
905         ; Peephole 170   jump optimization
906         cjne %1,%2,%4
907 %3:
908 } if labelRefCount %3 1
909
910 replace {
911         clr  a
912         cjne %1,%2,%3
913         cjne %9,%10,%3
914         cpl  a
915 %3:
916         jz   %4
917 } by {
918         ; Peephole 171   jump optimization
919         cjne %1,%2,%4
920         cjne %9,%10,%4
921 %3:
922 } if labelRefCount %3 2
923
924 replace {
925         clr  a
926         cjne %1,%2,%3
927         cjne %9,%10,%3
928         cjne %11,%12,%3
929         cpl  a
930 %3:
931         jz   %4
932 } by {
933         ; Peephole 172   jump optimization
934         cjne %1,%2,%4
935         cjne %9,%10,%4
936         cjne %11,%12,%4
937 %3:
938 } if labelRefCount %3 3
939
940 replace {
941         clr  a
942         cjne %1,%2,%3
943         cjne %9,%10,%3
944         cjne %11,%12,%3
945         cjne %13,%14,%3
946         cpl  a
947 %3:
948         jz   %4
949 } by {
950         ; Peephole 173   jump optimization
951         cjne %1,%2,%4
952         cjne %9,%10,%4
953         cjne %11,%12,%4
954         cjne %13,%14,%4
955 %3:
956 } if labelRefCount %3 4
957
958 replace {
959         mov  r%1,%2
960         clr  c
961         mov  a,r%1
962         subb a,#0x01
963         mov  %2,a
964 } by {
965         ; Peephole 174   optimized decrement (acc not set to %2, flags undefined)
966         mov  r%1,%2
967         dec  %2
968 }
969
970
971 replace {
972         mov  r%1,%2
973         mov  a,r%1
974         add  a,#0x01
975         mov  %2,a
976 } by {
977         ; Peephole 175   optimized increment (acc not set to %2, flags undefined)
978         mov  r%1,%2
979         inc  %2
980 }
981
982 replace {
983         mov  %1,@r%2
984         inc  %1
985         mov  @r%2,%1
986 } by {
987         ; Peephole 176   optimized increment, removed redundant mov
988         inc  @r%2
989         mov  %1,@r%2
990 }
991
992 // this one will screw assignes to volatile/sfr's
993 //replace {
994 //        mov  %1,%2
995 //        mov  %2,%1
996 //} by {
997 //        ; Peephole 177   removed redundant mov
998 //        mov  %1,%2
999 //}
1000
1001 replace {
1002         mov  a,%1
1003         mov  b,a
1004         mov  a,%2
1005 } by {
1006         ; Peephole 178   removed redundant mov
1007         mov  b,%1
1008         mov  a,%2
1009 }
1010
1011 // rules 179-182 provided by : Frieder <fe@lake.iup.uni-heidelberg.de>
1012 // saving 2 byte, 1 cycle
1013 replace {
1014         mov  b,#0x00
1015         mov  a,#0x00
1016 } by {
1017         ; Peephole 179   changed mov to clr
1018         clr  a
1019         mov  b,a
1020 }
1021
1022 // saving 1 byte, 0 cycles
1023 replace {
1024         mov  a,#0x00
1025 } by {
1026         ; Peephole 180   changed mov to clr
1027         clr  a
1028 }
1029
1030 // saving 3 byte, 2 cycles, return(NULL) profits here
1031 replace {
1032         mov  dpl,#0x00
1033         mov  dph,#0x00
1034 } by {
1035         ; Peephole 181   used 16 bit load of dptr
1036         mov  dptr,#0x0000
1037 }
1038
1039 // saving 3 byte, 2 cycles, return(float_constant) profits here
1040 replace {
1041         mov  dpl,#%1
1042         mov  dph,#%2
1043 } by {
1044         ; Peephole 182   used 16 bit load of dptr
1045         mov  dptr,#(((%2)<<8) + %1)
1046 }
1047
1048 replace {
1049         anl  %1,#%2
1050         anl  %1,#%3
1051 } by {
1052         ; Peephole 183   avoided anl during execution
1053         anl  %1,#(%2 & %3)
1054 }
1055
1056 replace {
1057         mov  %1,a
1058         cpl  a
1059         mov  %1,a
1060 } by {
1061         ; Peephole 184   removed redundant mov
1062         cpl  a
1063         mov  %1,a
1064 }
1065
1066 replace {
1067 // acc being incremented might cause problems
1068         mov  %1,a
1069         inc  %1
1070 } by {
1071         ; Peephole 185   changed order of increment (acc incremented also!)
1072         inc  a
1073         mov  %1,a
1074 }
1075
1076 replace {
1077         add  a,#%1
1078         mov  dpl,a
1079         clr  a
1080         addc a,#(%1 >> 8)
1081         mov  dph,a
1082         clr  a
1083         movc a,@a+dptr
1084         mov  %2,a
1085         inc  dptr
1086         clr  a
1087         movc a,@a+dptr
1088         mov  %3,a
1089         inc  dptr
1090         clr  a
1091         movc a,@a+dptr
1092         mov  %4,a
1093         inc  dptr
1094         clr  a  
1095 } by {
1096         ; Peephole 186.a   optimized movc sequence
1097         mov  dptr,#%1
1098         mov  b,acc
1099         movc a,@a+dptr
1100         mov  %2,a
1101         mov  acc,b
1102         inc  dptr       
1103         movc a,@a+dptr
1104         mov  %3,a
1105         mov  acc,b
1106         inc  dptr
1107         mov  %4,a
1108         mov  acc,b
1109         inc  dptr
1110 }
1111
1112 replace {
1113         add  a,#%1
1114         mov  dpl,a
1115         clr  a
1116         addc a,#(%1 >> 8)
1117         mov  dph,a
1118         clr  a
1119         movc a,@a+dptr
1120         mov  %2,a
1121         inc  dptr
1122         clr  a
1123         movc a,@a+dptr
1124         mov  %3,a
1125         inc  dptr
1126         clr  a
1127 } by {
1128         ; Peephole 186.b   optimized movc sequence
1129         mov  dptr,#%1
1130         mov  b,acc
1131         movc a,@a+dptr
1132         mov  %2,a
1133         mov  acc,b
1134         inc  dptr       
1135         movc a,@a+dptr
1136         mov  %3,a
1137         mov  acc,b
1138         inc  dptr       
1139 }
1140
1141 replace {
1142         add  a,#%1
1143         mov  dpl,a
1144         clr  a
1145         addc a,#(%1 >> 8)
1146         mov  dph,a
1147         clr  a
1148         movc a,@a+dptr
1149         mov  %2,a
1150         inc  dptr
1151         clr  a
1152 } by {
1153         ; Peephole 186.c   optimized movc sequence
1154         mov  dptr,#%1
1155         mov  b,acc
1156         movc a,@a+dptr
1157         mov  %2,a
1158         mov  acc,b
1159         inc  dptr
1160 }
1161
1162 replace {
1163         add  a,#%1
1164         mov  dpl,a
1165         clr  a
1166         addc a,#(%1 >> 8)
1167         mov  dph,a
1168         clr  a
1169         movc a,@a+dptr
1170 } by {
1171         ; Peephole 186   optimized movc sequence
1172         mov  dptr,#%1
1173         movc a,@a+dptr
1174 }
1175
1176 replace {
1177         mov  r%1,%2
1178         anl  ar%1,#%3
1179         mov  a,r%1
1180 } by {
1181         ; Peephole 187   used a instead of ar%1 for anl
1182         mov  a,%2
1183         anl  a,#%3
1184         mov  r%1,a
1185 }
1186
1187 replace {
1188         mov  %1,a
1189         mov  dptr,%2
1190         movc a,@a+dptr
1191         mov  %1,a
1192 } by {
1193         ; Peephole 188   removed redundant mov
1194         mov  dptr,%2
1195         movc a,@a+dptr
1196         mov  %1,a
1197 }
1198
1199 replace {
1200         anl  a,#0x0f
1201         mov  %1,a
1202         mov  a,#0x0f
1203         anl  a,%1
1204 } by {
1205         ; Peephole 189   removed redundant mov and anl
1206         anl  a,#0x0f
1207         mov  %1,a
1208 }
1209
1210 // rules 190 & 191 need to be in order
1211 replace {
1212         mov  a,%1
1213         lcall __gptrput
1214         mov  a,%1
1215 } by {
1216         ; Peephole 190   removed redundant mov
1217         mov  a,%1
1218         lcall __gptrput
1219 }
1220
1221 replace {
1222         mov  %1,a
1223         mov  dpl,%2
1224         mov  dph,%3
1225         mov  b,%4
1226         mov  a,%1
1227 } by {
1228         ; Peephole 191   removed redundant mov
1229         mov  %1,a
1230         mov  dpl,%2
1231         mov  dph,%3
1232         mov  b,%4
1233 }
1234
1235 replace {
1236         mov  r%1,a
1237         mov  @r%2,ar%1
1238 } by {
1239         ; Peephole 192   used a instead of ar%1 as source
1240         mov  r%1,a
1241         mov  @r%2,a
1242 }
1243
1244 replace {
1245         jnz  %3
1246         mov  a,%4
1247         jnz  %3
1248         mov  a,%9
1249         jnz  %3
1250         mov  a,%12
1251         cjne %13,%14,%3
1252         sjmp %7
1253 %3:
1254         sjmp %8
1255 } by {
1256         ; Peephole 193.a optimized misc jump sequence
1257         jnz  %8
1258         mov  a,%4
1259         jnz  %8
1260         mov  a,%9
1261         jnz  %8
1262         mov  a,%12
1263         cjne %13,%14,%8
1264         sjmp %7
1265 ;%3:
1266 } if labelRefCount %3 4
1267
1268 replace {
1269         cjne %1,%2,%3
1270         mov  a,%4
1271         cjne %5,%6,%3
1272         mov  a,%9
1273         cjne %10,%11,%3
1274         mov  a,%12
1275         cjne %13,%14,%3
1276         sjmp %7
1277 %3:
1278         sjmp %8
1279 } by {
1280         ; Peephole 193   optimized misc jump sequence
1281         cjne %1,%2,%8
1282         mov  a,%4
1283         cjne %5,%6,%8
1284         mov  a,%9
1285         cjne %10,%11,%8
1286         mov  a,%12
1287         cjne %13,%14,%8
1288         sjmp %7
1289 ;%3:
1290 } if labelRefCount %3 4
1291
1292 replace {
1293         cjne @%1,%2,%3
1294         inc  %1
1295         cjne @%1,%6,%3
1296         inc  %1
1297         cjne @%1,%11,%3
1298         inc  %1
1299         cjne @%1,%14,%3
1300         sjmp %7
1301 %3:
1302         sjmp %8
1303 } by {
1304         ; Peephole 193.a   optimized misc jump sequence
1305         cjne @%1,%2,%8
1306         inc  %1
1307         cjne @%1,%6,%8
1308         inc  %1
1309         cjne @%1,%11,%8
1310         inc  %1
1311         cjne @%1,%14,%8
1312         sjmp %7
1313 ;%3:
1314 } if labelRefCount %3 4
1315
1316 replace {
1317         cjne %1,%2,%3
1318         cjne %5,%6,%3
1319         cjne %10,%11,%3
1320         cjne %13,%14,%3
1321         sjmp %7
1322 %3:
1323         sjmp %8
1324 } by {
1325         ; Peephole 194   optimized misc jump sequence
1326         cjne %1,%2,%8
1327         cjne %5,%6,%8
1328         cjne %10,%11,%8
1329         cjne %13,%14,%8
1330         sjmp %7
1331 ;%3:
1332 } if labelRefCount %3 4
1333
1334 replace {
1335         jnz  %3
1336         mov  a,%4
1337         jnz  %3
1338         mov  a,%9
1339         cjne %10,%11,%3
1340         sjmp %7
1341 %3:
1342         sjmp %8
1343 } by {
1344         ; Peephole 195.a optimized misc jump sequence
1345         jnz  %8
1346         mov  a,%4
1347         jnz  %8
1348         mov  a,%9
1349         cjne %10,%11,%8
1350         sjmp %7
1351 ;%3:
1352 } if labelRefCount %3 3
1353
1354 replace {
1355         cjne %1,%2,%3
1356         mov  a,%4
1357         cjne %5,%6,%3
1358         mov  a,%9
1359         cjne %10,%11,%3
1360         sjmp %7
1361 %3:
1362         sjmp %8
1363 } by {
1364         ; Peephole 195   optimized misc jump sequence
1365         cjne %1,%2,%8
1366         mov  a,%4
1367         cjne %5,%6,%8
1368         mov  a,%9
1369         cjne %10,%11,%8
1370         sjmp %7
1371 ;%3:
1372 } if labelRefCount %3 3
1373
1374 replace {
1375         cjne @%1,%2,%3
1376         inc  %1
1377         cjne @%1,%6,%3
1378         inc  %1
1379         cjne @%1,%11,%3
1380         sjmp %7
1381 %3:
1382         sjmp %8
1383 } by {
1384         ; Peephole 195.a   optimized misc jump sequence
1385         cjne @%1,%2,%8
1386         inc  %1
1387         cjne @%1,%6,%8
1388         inc  %1
1389         cjne @%1,%11,%8
1390         sjmp %7
1391 ;%3:
1392 } if labelRefCount %3 3
1393
1394 replace {
1395         cjne %1,%2,%3
1396         cjne %5,%6,%3
1397         cjne %10,%11,%3
1398         sjmp %7
1399 %3:
1400         sjmp %8
1401 } by {
1402         ; Peephole 196   optimized misc jump sequence
1403         cjne %1,%2,%8
1404         cjne %5,%6,%8
1405         cjne %10,%11,%8
1406         sjmp %7
1407 ;%3:
1408 } if labelRefCount %3 3
1409
1410 replace {
1411         jnz  %3
1412         mov  a,%4
1413         cjne %5,%6,%3
1414         sjmp %7
1415 %3:
1416         sjmp %8 
1417 } by {
1418         ; Peephole 197.a optimized misc jump sequence
1419         jnz  %8
1420         mov  a,%4
1421         cjne %5,%6,%8
1422         sjmp %7
1423 ;%3:     
1424 } if labelRefCount %3 2
1425
1426 replace {
1427         cjne %1,%2,%3
1428         mov  a,%4
1429         cjne %5,%6,%3
1430         sjmp %7
1431 %3:
1432         sjmp %8
1433 } by {
1434         ; Peephole 197   optimized misc jump sequence
1435         cjne %1,%2,%8
1436         mov  a,%4
1437         cjne %5,%6,%8
1438         sjmp %7
1439 ;%3:
1440 } if labelRefCount %3 2
1441
1442 replace {
1443         cjne @%1,%2,%3
1444         inc  %1
1445         cjne @%1,%6,%3
1446         sjmp %7
1447 %3:
1448         sjmp %8
1449 } by {
1450         ; Peephole 197.a   optimized misc jump sequence
1451         cjne @%1,%2,%8
1452         inc   %1
1453         cjne @%1,%6,%8
1454         sjmp %7
1455 ;%3:
1456 } if labelRefCount %3 2
1457
1458 replace {
1459         cjne %1,%2,%3
1460         cjne %5,%6,%3
1461         sjmp %7
1462 %3:
1463         sjmp %8
1464 } by {
1465         ; Peephole 198   optimized misc jump sequence
1466         cjne %1,%2,%8
1467         cjne %5,%6,%8
1468         sjmp %7
1469 ;%3:
1470 } if labelRefCount %3 2
1471
1472 replace {
1473         cjne %1,%2,%3
1474         sjmp %4
1475 %3:
1476         sjmp %5
1477 } by {
1478         ; Peephole 199   optimized misc jump sequence
1479         cjne %1,%2,%5
1480         sjmp %4
1481 ;%3:
1482 } if labelRefCount %3 1
1483
1484 replace {
1485         sjmp %1
1486 %1:
1487 } by {
1488         ; Peephole 200   removed redundant sjmp
1489 %1:
1490 }
1491
1492 replace {
1493         sjmp %1
1494 %2:
1495 %1:
1496 } by {
1497         ; Peephole 201   removed redundant sjmp
1498 %2:
1499 %1:
1500 }
1501
1502 replace {
1503         push  acc
1504         mov   dptr,%1
1505         pop   acc
1506 } by {
1507         ; Peephole 202   removed redundant push pop
1508         mov   dptr,%1
1509 }
1510
1511 replace {
1512         mov  r%1,_spx
1513         lcall %2
1514         mov  r%1,_spx
1515 } by {
1516         ; Peephole 203   removed mov  r%1,_spx
1517         lcall %2
1518 }
1519
1520 replace {
1521         mov  %1,a
1522         add  a,acc
1523         mov  %1,a
1524 } by {
1525         ; Peephole 204   removed redundant mov
1526         add  a,acc
1527         mov  %1,a
1528 }
1529
1530 replace {
1531         djnz %1,%2
1532         sjmp  %3
1533 %2:
1534         sjmp  %4
1535 %3:
1536 } by {
1537         ; Peephole 205   optimized misc jump sequence
1538         djnz %1,%4
1539 %2:
1540 %3:
1541 } if labelRefCount %2 1
1542
1543 replace {
1544         mov  %1,%1
1545 } by {
1546         ; Peephole 206   removed redundant mov %1,%1
1547 }
1548
1549 replace {
1550         mov  a,_bp
1551         add  a,#0x00
1552         mov  %1,a
1553 } by {
1554         ; Peephole 207   removed zero add (acc not set to %1, flags undefined)
1555         mov  %1,_bp
1556 }
1557
1558 replace {
1559         push  acc
1560         mov   r%1,_bp
1561         pop   acc
1562 } by {
1563         ; Peephole 208   removed redundant push pop
1564         mov   r%1,_bp
1565 }
1566
1567 replace {
1568         mov  a,_bp
1569         add  a,#0x00
1570         inc  a
1571         mov  %1,a
1572 } by {
1573         ; Peephole 209   optimized increment (acc not set to %1, flags undefined)
1574         mov  %1,_bp
1575         inc  %1
1576 }
1577
1578 replace {
1579         mov  dptr,#((((%1 >> 8)) <<8) + %1)
1580 } by {
1581         ; Peephole 210   simplified expression
1582         mov  dptr,#%1
1583 }
1584
1585 replace {
1586         push %1
1587         pop  %1
1588 } by {
1589         ; Peephole 211   removed redundant push %1 pop %1  
1590
1591
1592 replace {
1593         mov  a,_bp
1594         add  a,#0x01
1595         mov  r%1,a
1596 } by {
1597         ; Peephole 212  reduced add sequence to inc
1598         mov  r%1,_bp
1599         inc  r%1
1600 }
1601
1602 replace {
1603         mov  %1,#(( %2 >> 8 ) ^ 0x80)
1604 } by {  
1605         mov  %1,#(%2 >> 8)
1606         xrl  %1,#0x80
1607 }
1608
1609 replace {
1610         mov  %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1611 } by {  
1612         mov  %1,#((%2 + %3) >> 8)
1613         xrl  %1,#0x80
1614 }
1615
1616 replace  {
1617         mov  %1,a
1618         mov  a,%2
1619         add  a,%1
1620 } by {
1621         ; Peephole 214 reduced some extra movs
1622         mov  %1,a
1623         add  a,%2       
1624 } if operandsNotSame
1625
1626 replace {
1627         mov  %1,a
1628         add  a,%2
1629         mov  %1,a
1630 } by {
1631         ; Peephole 215 removed some movs
1632         add  a,%2
1633         mov  %1,a
1634 } if operandsNotSame
1635
1636 replace {
1637         mov   r%1,%2
1638         clr   a
1639         inc   r%1
1640         mov   @r%1,a
1641         dec   r%1
1642         mov   @r%1,a
1643 } by {
1644         ; Peephole 216 simplified clear (2bytes)
1645         mov   r%1,%2
1646         clr   a
1647         mov   @r%1,a
1648         inc   r%1
1649         mov   @r%1,a
1650 }
1651
1652 replace {
1653         mov   r%1,%2
1654         clr   a
1655         inc   r%1
1656         inc   r%1
1657         mov   @r%1,a
1658         dec   r%1
1659         mov   @r%1,a
1660         dec   r%1
1661         mov   @r%1,a
1662 } by {
1663         ; Peephole 217 simplified clear (3bytes)
1664         mov   r%1,%2
1665         clr   a
1666         mov   @r%1,a
1667         inc   r%1
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         inc   r%1
1679         mov   @r%1,a
1680         dec   r%1
1681         mov   @r%1,a
1682         dec   r%1
1683         mov   @r%1,a
1684         dec   r%1
1685         mov   @r%1,a
1686 } by {
1687         ; Peephole 218 simplified clear (4bytes)
1688         mov   r%1,%2
1689         clr   a
1690         mov   @r%1,a
1691         inc   r%1
1692         mov   @r%1,a
1693         inc   r%1
1694         mov   @r%1,a
1695         inc   r%1
1696         mov   @r%1,a
1697 }
1698
1699 replace {
1700         clr   a
1701         movx  @dptr,a
1702         mov   dptr,%1
1703         clr   a
1704         movx  @dptr,a
1705 } by {
1706         ; Peephole 219 removed redundant clear
1707         clr   a
1708         movx  @dptr,a
1709         mov   dptr,%1
1710         movx  @dptr,a
1711 }
1712
1713 replace {
1714         clr   a
1715         movx  @dptr,a
1716         mov   dptr,%1
1717         movx  @dptr,a
1718         mov   dptr,%2
1719         clr   a
1720         movx  @dptr,a
1721 } by {
1722         ; Peephole 219a removed redundant clear
1723         clr   a
1724         movx  @dptr,a
1725         mov   dptr,%1
1726         movx  @dptr,a
1727         mov   dptr,%2
1728         movx  @dptr,a
1729 }
1730
1731 replace {
1732         mov     dps, #0x00
1733         mov     dps, #0x01
1734 } by {
1735         ; Peephole 220a removed bogus DPS set
1736         mov     dps, #0x01
1737 }
1738
1739 replace {
1740         mov     dps, #0x01
1741         mov     dps, #0x00
1742 } by {
1743         ; Peephole 220b removed bogus DPS set
1744         mov     dps, #0x00
1745 }
1746
1747 replace {
1748         mov     %1 + %2,(%2 + %1)
1749 } by {
1750         ; Peephole 221a remove redundant move
1751 }
1752
1753 replace {
1754         mov     (%1 + %2 + %3),((%2 + %1) + %3)
1755 } by {
1756         ; Peephole 221b remove redundant move
1757 }
1758
1759 replace {
1760         dec     r%1
1761         inc     r%1
1762 } by {
1763         ; removed dec/inc pair
1764 }
1765
1766 replace {
1767         mov     dps, #0x00
1768         mov     dp%1,a
1769         mov     dps, #0x01
1770 } by {
1771         ; Peephole 222 removed DPS abuse.
1772         mov     dp%1,a
1773         mov     dps, #0x01
1774 }