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