fixed increment of struct element problem & added 2 peepholes
[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
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         inc  %1
1320         cjne @%1,%6,%3
1321         inc  %1
1322         cjne @%1,%11,%3
1323         inc  %1
1324         cjne @%1,%14,%3
1325         sjmp %7
1326 %3:
1327         sjmp %8
1328 } by {
1329         ; Peephole 193.a   optimized misc jump sequence
1330         cjne @%1,%2,%8
1331         inc  %1
1332         cjne @%1,%6,%8
1333         inc  %1
1334         cjne @%1,%11,%8
1335         inc  %1
1336         cjne @%1,%14,%8
1337         sjmp %7
1338 %3:
1339 }
1340
1341 replace {
1342         cjne %1,%2,%3
1343         cjne %5,%6,%3
1344         cjne %10,%11,%3
1345         cjne %13,%14,%3
1346         sjmp %7
1347 %3:
1348         sjmp %8
1349 } by {
1350         ; Peephole 194   optimized misc jump sequence
1351         cjne %1,%2,%8
1352         cjne %5,%6,%8
1353         cjne %10,%11,%8
1354         cjne %13,%14,%8
1355         sjmp %7
1356 %3:
1357 }
1358
1359 replace {
1360         jnz  %3
1361         mov  a,%4
1362         jnz  %3
1363         mov  a,%9
1364         cjne %10,%11,%3
1365         sjmp %7
1366 %3:
1367         sjmp %8
1368 } by {
1369         ; Peephole 195.a optimized misc jump sequence
1370         jnz  %8
1371         mov  a,%4
1372         jnz  %8
1373         mov  a,%9
1374         cjne %10,%11,%8
1375         sjmp %7
1376 %3:
1377 }
1378
1379 replace {
1380         cjne %1,%2,%3
1381         mov  a,%4
1382         cjne %5,%6,%3
1383         mov  a,%9
1384         cjne %10,%11,%3
1385         sjmp %7
1386 %3:
1387         sjmp %8
1388 } by {
1389         ; Peephole 195   optimized misc jump sequence
1390         cjne %1,%2,%8
1391         mov  a,%4
1392         cjne %5,%6,%8
1393         mov  a,%9
1394         cjne %10,%11,%8
1395         sjmp %7
1396 %3:
1397 }
1398
1399 replace {
1400         cjne @%1,%2,%3
1401         inc  %1
1402         cjne @%1,%6,%3
1403         inc  %1
1404         cjne @%1,%11,%3
1405         sjmp %7
1406 %3:
1407         sjmp %8
1408 } by {
1409         ; Peephole 195.a   optimized misc jump sequence
1410         cjne @%1,%2,%8
1411         inc  %1
1412         cjne @%1,%6,%8
1413         inc  %1
1414         cjne @%1,%11,%8
1415         sjmp %7
1416 %3:
1417 }
1418
1419 replace {
1420         cjne %1,%2,%3
1421         cjne %5,%6,%3
1422         cjne %10,%11,%3
1423         sjmp %7
1424 %3:
1425         sjmp %8
1426 } by {
1427         ; Peephole 196   optimized misc jump sequence
1428         cjne %1,%2,%8
1429         cjne %5,%6,%8
1430         cjne %10,%11,%8
1431         sjmp %7
1432 %3:
1433 }
1434
1435 replace {
1436         jnz  %3
1437         mov  a,%4
1438         cjne %5,%6,%3
1439         sjmp %7
1440 %3:
1441         sjmp %8 
1442 } by {
1443         ; Peephole 197.a optimized misc jump sequence
1444         jnz  %8
1445         mov  a,%4
1446         cjne %5,%6,%8
1447         sjmp %7
1448 %3:     
1449 }
1450
1451 replace {
1452         cjne %1,%2,%3
1453         mov  a,%4
1454         cjne %5,%6,%3
1455         sjmp %7
1456 %3:
1457         sjmp %8
1458 } by {
1459         ; Peephole 197   optimized misc jump sequence
1460         cjne %1,%2,%8
1461         mov  a,%4
1462         cjne %5,%6,%8
1463         sjmp %7
1464 %3:
1465 }
1466
1467 replace {
1468         cjne @%1,%2,%3
1469         inc  %1
1470         cjne @%1,%6,%3
1471         sjmp %7
1472 %3:
1473         sjmp %8
1474 } by {
1475         ; Peephole 197.a   optimized misc jump sequence
1476         cjne @%1,%2,%8
1477         inc   %1
1478         cjne @%1,%6,%8
1479         sjmp %7
1480 %3:
1481 }
1482
1483 replace {
1484         cjne %1,%2,%3
1485         cjne %5,%6,%3
1486         sjmp %7
1487 %3:
1488         sjmp %8
1489 } by {
1490         ; Peephole 198   optimized misc jump sequence
1491         cjne %1,%2,%8
1492         cjne %5,%6,%8
1493         sjmp %7
1494 %3:
1495 }
1496
1497 replace {
1498         cjne %1,%2,%3
1499         sjmp %4
1500 %3:
1501         sjmp %5
1502 } by {
1503         ; Peephole 199   optimized misc jump sequence
1504         cjne %1,%2,%5
1505         sjmp %4
1506 %3:
1507 }
1508
1509 replace {
1510         sjmp %1
1511 %1:
1512 } by {
1513         ; Peephole 200   removed redundant sjmp
1514 %1:
1515 }
1516
1517 replace {
1518         sjmp %1
1519 %2:
1520 %1:
1521 } by {
1522         ; Peephole 201   removed redundant sjmp
1523 %2:
1524 %1:
1525 }
1526
1527 replace {
1528         push  acc
1529         mov   dptr,%1
1530         pop   acc
1531 } by {
1532         ; Peephole 202   removed redundant push pop
1533         mov   dptr,%1
1534 }
1535
1536 replace {
1537         mov  r%1,_spx
1538         lcall %2
1539         mov  r%1,_spx
1540 } by {
1541         ; Peephole 203   removed mov  r%1,_spx
1542         lcall %2
1543 }
1544
1545 replace {
1546         mov  %1,a
1547         add  a,acc
1548         mov  %1,a
1549 } by {
1550         ; Peephole 204   removed redundant mov
1551         add  a,acc
1552         mov  %1,a
1553 }
1554
1555 replace {
1556         djnz %1,%2
1557         sjmp  %3
1558 %2:
1559         sjmp  %4
1560 %3:
1561 } by {
1562         ; Peephole 205   optimized misc jump sequence
1563         djnz %1,%4
1564 %2:
1565 %3:
1566 }
1567
1568 replace {
1569         mov  %1,%1
1570 } by {
1571         ; Peephole 206   removed redundant mov %1,%1
1572 }
1573
1574 replace {
1575         mov  a,_bp
1576         add  a,#0x00
1577         mov  %1,a
1578 } by {
1579         ; Peephole 207   removed zero add (acc not set to %1, flags undefined)
1580         mov  %1,_bp
1581 }
1582
1583 replace {
1584         push  acc
1585         mov   r%1,_bp
1586         pop   acc
1587 } by {
1588         ; Peephole 208   removed redundant push pop
1589         mov   r%1,_bp
1590 }
1591
1592 replace {
1593         mov  a,_bp
1594         add  a,#0x00
1595         inc  a
1596         mov  %1,a
1597 } by {
1598         ; Peephole 209   optimized increment (acc not set to %1, flags undefined)
1599         mov  %1,_bp
1600         inc  %1
1601 }
1602
1603 replace {
1604         mov  dptr,#((((%1 >> 16)) <<16) + (((%1 >> 8)) <<8) + %1)
1605 } by {
1606         ; Peephole 210a   simplified expression
1607         mov  dptr,#%1
1608 } if 24bitMode
1609
1610 replace {
1611         mov  dptr,#((((%1 >> 8)) <<8) + %1)
1612 } by {
1613         ; Peephole 210   simplified expression
1614         mov  dptr,#%1
1615 }
1616
1617 replace {
1618         push %1
1619         pop  %1
1620 } by {
1621         ; Peephole 211   removed redundant push %1 pop %1  
1622
1623
1624 replace {
1625         mov  a,_bp
1626         add  a,#0x01
1627         mov  r%1,a
1628 } by {
1629         ; Peephole 212  reduced add sequence to inc
1630         mov  r%1,_bp
1631         inc  r%1
1632 }
1633
1634 replace {
1635         mov  %1,#(( %2 >> 8 ) ^ 0x80)
1636 } by {  
1637         mov  %1,#(%2 >> 8)
1638         xrl  %1,#0x80
1639 }
1640
1641 replace {
1642         mov  %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1643 } by {  
1644         mov  %1,#((%2 + %3) >> 8)
1645         xrl  %1,#0x80
1646 }
1647
1648 replace  {
1649         mov  %1,a
1650         mov  a,%2
1651         add  a,%1
1652 } by {
1653         ; Peephole 214 reduced some extra movs
1654         mov  %1,a
1655         add  a,%2       
1656 } if operandsNotSame
1657
1658 replace {
1659         mov  %1,a
1660         add  a,%2
1661         mov  %1,a
1662 } by {
1663         ; Peephole 215 removed some movs
1664         add  a,%2
1665         mov  %1,a
1666 } if operandsNotSame
1667
1668 replace {
1669         mov   r%1,%2
1670         clr   a
1671         inc   r%1
1672         mov   @r%1,a
1673         dec   r%1
1674         mov   @r%1,a
1675 } by {
1676         ; Peephole 216 simplified clear (2bytes)
1677         mov   r%1,%2
1678         clr   a
1679         mov   @r%1,a
1680         inc   r%1
1681         mov   @r%1,a
1682 }
1683
1684 replace {
1685         mov   r%1,%2
1686         clr   a
1687         inc   r%1
1688         inc   r%1
1689         mov   @r%1,a
1690         dec   r%1
1691         mov   @r%1,a
1692         dec   r%1
1693         mov   @r%1,a
1694 } by {
1695         ; Peephole 217 simplified clear (3bytes)
1696         mov   r%1,%2
1697         clr   a
1698         mov   @r%1,a
1699         inc   r%1
1700         mov   @r%1,a
1701         inc   r%1
1702         mov   @r%1,a
1703 }
1704
1705 replace {
1706         mov   r%1,%2
1707         clr   a
1708         inc   r%1
1709         inc   r%1
1710         inc   r%1
1711         mov   @r%1,a
1712         dec   r%1
1713         mov   @r%1,a
1714         dec   r%1
1715         mov   @r%1,a
1716         dec   r%1
1717         mov   @r%1,a
1718 } by {
1719         ; Peephole 218 simplified clear (4bytes)
1720         mov   r%1,%2
1721         clr   a
1722         mov   @r%1,a
1723         inc   r%1
1724         mov   @r%1,a
1725         inc   r%1
1726         mov   @r%1,a
1727         inc   r%1
1728         mov   @r%1,a
1729 }
1730
1731 replace {
1732         clr   a
1733         movx  @dptr,a
1734         mov   dptr,%1
1735         clr   a
1736         movx  @dptr,a
1737 } by {
1738         ; Peephole 219 removed redundant clear
1739         clr   a
1740         movx  @dptr,a
1741         mov   dptr,%1
1742         movx  @dptr,a
1743 }
1744
1745 replace {
1746         clr   a
1747         movx  @dptr,a
1748         mov   dptr,%1
1749         movx  @dptr,a
1750         mov   dptr,%2
1751         clr   a
1752         movx  @dptr,a
1753 } by {
1754         ; Peephole 219a removed redundant clear
1755         clr   a
1756         movx  @dptr,a
1757         mov   dptr,%1
1758         movx  @dptr,a
1759         mov   dptr,%2
1760         movx  @dptr,a
1761 }
1762
1763 replace {
1764         mov     dps, #0x00
1765         mov     dps, #0x01
1766 } by {
1767         ; Peephole 220a removed bogus DPS set
1768         mov     dps, #0x01
1769 }
1770
1771 replace {
1772         mov     dps, #0x01
1773         mov     dps, #0x00
1774 } by {
1775         ; Peephole 220b removed bogus DPS set
1776         mov     dps, #0x00
1777 }
1778
1779 replace {
1780         mov     %1 + %2,(%2 + %1)
1781 } by {
1782         ; Peephole 221a remove redundant move
1783 }
1784
1785 replace {
1786         mov     (%1 + %2 + %3),((%2 + %1) + %3)
1787 } by {
1788         ; Peephole 221b remove redundant move
1789 }