a) fixed some aliasing problems
[fw/sdcc] / src / SDCCpeeph.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  a,%1
544 } by {
545         ; Peephole 136   removed redundant moves
546         mov  %1,a
547         mov  dpl,%2
548         mov  dph,%3
549 }
550
551 replace {
552         mov  b,#0x00
553         mov  a,%1
554         cjne %2,%3,%4
555         mov  b,#0x01
556 %4:
557         mov  a,b
558         jz   %5
559 } by {
560         ; Peephole 137   optimized misc jump sequence
561         mov  a,%1
562         cjne %2,%3,%5
563 %4:
564 }
565
566 replace {
567         mov  b,#0x00
568         mov  a,%1
569         cjne %2,%3,%4
570         mov  b,#0x01
571 %4:
572         mov  a,b
573         jnz  %5
574 } by {
575         ; Peephole 138   optimized misc jump sequence
576         mov  a,%1
577         cjne %2,%3,%4
578         sjmp %5
579 %4:
580 }
581
582 replace {
583         mov  r%1,a
584         anl  ar%1,%2
585         mov  a,r%1
586 } by {
587         ; Peephole 139   removed redundant mov
588         anl  a,%2
589         mov  r%1,a
590 }
591
592 replace {
593         mov  r%1,a
594         orl  ar%1,%2
595         mov  a,r%1
596 } by {
597         ; Peephole 140   removed redundant mov
598         orl  a,%2
599         mov  r%1,a }
600
601 replace {
602         mov  r%1,a
603         xrl  ar%1,%2
604         mov  a,r%1
605 } by {
606         ; Peephole 141   removed redundant mov
607         xrl  a,%2
608         mov  r%1,a
609 }
610
611 replace {
612         mov  r%1,a
613         mov  r%2,ar%1
614         mov  ar%1,@r%2
615 } by {
616         ; Peephole 142   removed redundant moves
617         mov  r%2,a
618         mov  ar%1,@r%2
619 }
620
621 replace {
622         rlc  a
623         mov  acc.0,c
624 } by {
625         ; Peephole 143   converted rlc to rl
626         rl   a
627 }
628
629 replace {
630         rrc  a
631         mov  acc.7,c
632 } by {
633         ; Peephole 144   converted rrc to rc
634         rr   a
635 }
636
637 replace {
638         clr  c
639         addc a,%1
640 } by {
641         ; Peephole 145   changed to add without carry  
642         add  a,%1
643 }
644
645 replace {
646         clr  c
647         mov  a,%1
648         addc a,%2
649 } by {
650         ; Peephole 146   changed to add without carry
651         mov  a,%1
652         add  a,%2
653 }
654
655 replace {
656         orl  r%1,a
657 } by {
658         ; Peephole 147   changed target address mode r%1 to ar%1
659         orl  ar%1,a
660 }
661
662 replace {
663         anl  r%1,a
664 } by {
665         ; Peephole 148   changed target address mode r%1 to ar%1
666         anl  ar%1,a
667 }
668
669 replace {
670         xrl  r%1,a
671 } by {
672         ; Peephole 149   changed target address mode r%1 to ar%1
673         xrl  ar%1,a
674 }
675
676 replace {
677         mov  %1,dpl
678         mov  dpl,%1
679 %9:
680         ret
681 } by {
682         ; Peephole 150   removed misc moves via dpl before return
683 %9:
684         ret
685 }
686
687 replace {
688         mov  %1,dpl
689         mov  %2,dph
690         mov  dpl,%1
691         mov  dph,%2
692 %9:
693         ret
694 } by {
695         ; Peephole 151   removed misc moves via dph, dpl before return
696 %9:
697         ret
698 }
699
700 replace {
701         mov  %1,dpl
702         mov  %2,dph
703         mov  dpl,%1
704 %9:
705         ret
706 } by {
707         ; Peephole 152   removed misc moves via dph, dpl before return
708 %9:
709         ret
710 }
711
712 replace {
713         mov  %1,dpl
714         mov  %2,dph
715         mov  %3,b
716         mov  dpl,%1
717         mov  dph,%2
718         mov  b,%3
719 %9:
720         ret
721 } by {
722         ; Peephole 153   removed misc moves via dph, dpl, b before return
723 %9:
724         ret
725 }
726
727 replace {
728         mov  %1,dpl
729         mov  %2,dph
730         mov  %3,b
731         mov  dpl,%1
732 %9:
733         ret
734 } by {
735         ; Peephole 154   removed misc moves via dph, dpl, b before return
736 %9:
737         ret
738 }
739
740 replace {
741         mov  %1,dpl
742         mov  %2,dph
743         mov  %3,b
744         mov  dpl,%1
745         mov  dph,%2
746 %9:
747         ret
748 } by {
749         ; Peephole 155   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  %4,a
759         mov  dpl,%1
760         mov  dph,%2
761         mov  b,%3
762         mov  a,%4
763 %9:
764         ret
765 } by {
766         ; Peephole 156   removed misc moves via dph, dpl, b, a before return
767 %9:
768         ret
769 }
770
771 replace {
772         mov  %1,dpl
773         mov  %2,dph
774         mov  %3,b
775         mov  %4,a
776         mov  dpl,%1
777         mov  dph,%2
778 %9:
779         ret
780 } by {
781         ; Peephole 157   removed misc moves via dph, dpl, b, a before return
782 %9:
783         ret
784 }
785
786 replace {
787         mov  %1,dpl
788         mov  %2,dph
789         mov  %3,b
790         mov  %4,a
791         mov  dpl,%1
792 %9:
793         ret } by {
794         ; Peephole 158   removed misc moves via dph, dpl, b, a before return
795 %9:
796         ret }
797
798 replace {
799         mov  %1,#%2
800         xrl  %1,#0x80
801 } by {
802         ; Peephole 159   avoided xrl during execution
803         mov  %1,#(%2 ^ 0x80)
804 }
805
806 replace {
807         jnc  %1
808         sjmp %2
809 %1:
810 } by {
811         ; Peephole 160   removed sjmp by inverse jump logic
812         jc   %2
813 %1:}
814
815 replace {
816         jc   %1
817         sjmp %2
818 %1:
819 } by {
820         ; Peephole 161   removed sjmp by inverse jump logic
821         jnc  %2
822 %1:}
823
824 replace {
825         jnz  %1
826         sjmp %2
827 %1:
828 } by {
829         ; Peephole 162   removed sjmp by inverse jump logic
830         jz   %2
831 %1:}
832
833 replace {
834         jz   %1
835         sjmp %2
836 %1:
837 } by {
838         ; Peephole 163   removed sjmp by inverse jump logic
839         jnz  %2
840 %1:}
841
842 replace {
843         jnb  %3,%1
844         sjmp %2
845 %1:
846 } by {
847         ; Peephole 164   removed sjmp by inverse jump logic
848         jb   %3,%2
849 %1:
850 }
851
852 replace {
853         jb   %3,%1
854         sjmp %2
855 %1:
856 } by {
857         ; Peephole 165   removed sjmp by inverse jump logic
858         jnb  %3,%2
859 %1:
860 }
861
862 replace {
863         mov  %1,%2
864         mov  %3,%1
865         mov  %2,%1
866 } by {
867         ; Peephole 166   removed redundant mov
868         mov  %1,%2
869         mov  %3,%1 }
870
871 replace {
872         mov  c,%1
873         cpl  c
874         mov  %1,c
875 } by {
876         ; Peephole 167   removed redundant bit moves (c not set to %1)
877         cpl  %1 }
878
879 replace {
880         jnb  %1,%2
881         sjmp %3
882 %2:} by {
883         ; Peephole 168   jump optimization
884         jb   %1,%3
885 %2:}
886
887 replace {
888         jb   %1,%2
889         sjmp %3
890 %2:} by {
891         ; Peephole 169   jump optimization
892         jnb  %1,%3
893 %2:}
894
895 replace {
896         clr  a
897         cjne %1,%2,%3
898         cpl  a
899 %3:
900         jz   %4
901 } by {
902         ; Peephole 170   jump optimization
903         cjne %1,%2,%4
904 %3:}
905
906 replace {
907         clr  a
908         cjne %1,%2,%3
909         cjne %9,%10,%3
910         cpl  a
911 %3:
912         jz   %4
913 } by {
914         ; Peephole 171   jump optimization
915         cjne %1,%2,%4
916         cjne %9,%10,%4
917 %3:}
918
919 replace {
920         clr  a
921         cjne %1,%2,%3
922         cjne %9,%10,%3
923         cjne %11,%12,%3
924         cpl  a
925 %3:
926         jz   %4
927 } by {
928         ; Peephole 172   jump optimization
929         cjne %1,%2,%4
930         cjne %9,%10,%4
931         cjne %11,%12,%4
932 %3:}
933
934 replace {
935         clr  a
936         cjne %1,%2,%3
937         cjne %9,%10,%3
938         cjne %11,%12,%3
939         cjne %13,%14,%3
940         cpl  a
941 %3:
942         jz   %4
943 } by {
944         ; Peephole 173   jump optimization
945         cjne %1,%2,%4
946         cjne %9,%10,%4
947         cjne %11,%12,%4
948         cjne %13,%14,%4
949 %3:}
950
951 replace {
952         mov  r%1,%2
953         clr  c
954         mov  a,r%1
955         subb a,#0x01
956         mov  %2,a
957 } by {
958         ; Peephole 174   optimized decrement (acc not set to %2, flags undefined)
959         mov  r%1,%2
960         dec  %2
961 }
962
963
964 replace {
965         mov  r%1,%2
966         mov  a,r%1
967         add  a,#0x01
968         mov  %2,a
969 } by {
970         ; Peephole 175   optimized increment (acc not set to %2, flags undefined)
971         mov  r%1,%2
972         inc  %2
973 }
974
975 replace {
976         mov  %1,@r%2
977         inc  %1
978         mov  @r%2,%1
979 } by {
980         ; Peephole 176   optimized increment, removed redundant mov
981         inc  @r%2
982         mov  %1,@r%2
983 }
984
985 replace {
986         mov  %1,%2
987         mov  %2,%1
988 } by {
989         ; Peephole 177   removed redundant mov
990         mov  %1,%2
991 }
992
993 replace {
994         mov  a,%1
995         mov  b,a
996         mov  a,%2
997 } by {
998         ; Peephole 178   removed redundant mov
999         mov  b,%1
1000         mov  a,%2
1001 }
1002
1003 // rules 179-182 provided by : Frieder <fe@lake.iup.uni-heidelberg.de>
1004 // saving 2 byte, 1 cycle
1005 replace {
1006         mov  b,#0x00
1007         mov  a,#0x00
1008 } by {
1009         ; Peephole 179   changed mov to clr
1010         clr  a
1011         mov  b,a
1012 }
1013
1014 // saving 1 byte, 0 cycles
1015 replace {
1016         mov  a,#0x00
1017 } by {
1018         ; Peephole 180   changed mov to clr
1019         clr  a
1020 }
1021
1022 // saving 3 byte, 2 cycles, return(NULL) profits here
1023 replace {
1024         mov  dpl,#0x00
1025         mov  dph,#0x00
1026 } by {
1027         ; Peephole 181   used 16 bit load of dptr
1028         mov  dptr,#0x0000
1029 }
1030
1031 // saving 3 byte, 2 cycles, return(float_constant) profits here
1032 replace {
1033         mov  dpl,#%1
1034         mov  dph,#%2
1035 } by {
1036         ; Peephole 182   used 16 bit load of dptr
1037         mov  dptr,#(((%2)<<8) + %1)
1038 }
1039
1040 replace {
1041         anl  %1,#%2
1042         anl  %1,#%3
1043 } by {
1044         ; Peephole 183   avoided anl during execution
1045         anl  %1,#(%2 & %3)
1046 }
1047
1048 replace {
1049         mov  %1,a
1050         cpl  a
1051         mov  %1,a
1052 } by {
1053         ; Peephole 184   removed redundant mov
1054         cpl  a
1055         mov  %1,a
1056 }
1057
1058 replace {
1059 // acc being incremented might cause problems
1060         mov  %1,a
1061         inc  %1
1062 } by {
1063         ; Peephole 185   changed order of increment (acc incremented also!)
1064         inc  a
1065         mov  %1,a
1066 }
1067
1068 replace {
1069         add  a,#%1
1070         mov  dpl,a
1071         clr  a
1072         addc a,#(%1 >> 8)
1073         mov  dph,a
1074         clr  a
1075         movc a,@a+dptr
1076         mov  %2,a
1077         inc  dptr
1078         clr  a
1079         movc a,@a+dptr
1080         mov  %3,a
1081         inc  dptr
1082         clr  a
1083         movc a,@a+dptr
1084         mov  %4,a
1085         inc  dptr
1086         clr  a  
1087 } by {
1088         ; Peephole 186.a   optimized movc sequence
1089         mov  dptr,#%1
1090         mov  b,acc
1091         movc a,@a+dptr
1092         mov  %2,a
1093         mov  acc,b
1094         inc  dptr       
1095         movc a,@a+dptr
1096         mov  %3,a
1097         mov  acc,b
1098         inc  dptr
1099         mov  %4,a
1100         mov  acc,b
1101         inc  dptr
1102 }
1103
1104 replace {
1105         add  a,#%1
1106         mov  dpl,a
1107         clr  a
1108         addc a,#(%1 >> 8)
1109         mov  dph,a
1110         clr  a
1111         movc a,@a+dptr
1112         mov  %2,a
1113         inc  dptr
1114         clr  a
1115         movc a,@a+dptr
1116         mov  %3,a
1117         inc  dptr
1118         clr  a
1119 } by {
1120         ; Peephole 186.b   optimized movc sequence
1121         mov  dptr,#%1
1122         mov  b,acc
1123         movc a,@a+dptr
1124         mov  %2,a
1125         mov  acc,b
1126         inc  dptr       
1127         movc a,@a+dptr
1128         mov  %3,a
1129         mov  acc,b
1130         inc  dptr       
1131 }
1132
1133 replace {
1134         add  a,#%1
1135         mov  dpl,a
1136         clr  a
1137         addc a,#(%1 >> 8)
1138         mov  dph,a
1139         clr  a
1140         movc a,@a+dptr
1141         mov  %2,a
1142         inc  dptr
1143         clr  a
1144 } by {
1145         ; Peephole 186.c   optimized movc sequence
1146         mov  dptr,#%1
1147         mov  b,acc
1148         movc a,@a+dptr
1149         mov  %2,a
1150         mov  acc,b
1151         inc  dptr
1152 }
1153
1154 replace {
1155         add  a,#%1
1156         mov  dpl,a
1157         clr  a
1158         addc a,#(%1 >> 8)
1159         mov  dph,a
1160         clr  a
1161         movc a,@a+dptr
1162 } by {
1163         ; Peephole 186   optimized movc sequence
1164         mov  dptr,#%1
1165         movc a,@a+dptr
1166 }
1167
1168 replace {
1169         mov  r%1,%2
1170         anl  ar%1,#%3
1171         mov  a,r%1
1172 } by {
1173         ; Peephole 187   used a instead of ar%1 for anl
1174         mov  a,%2
1175         anl  a,#%3
1176         mov  r%1,a
1177 }
1178
1179 replace {
1180         mov  %1,a
1181         mov  dptr,%2
1182         movc a,@a+dptr
1183         mov  %1,a
1184 } by {
1185         ; Peephole 188   removed redundant mov
1186         mov  dptr,%2
1187         movc a,@a+dptr
1188         mov  %1,a
1189 }
1190
1191 replace {
1192         anl  a,#0x0f
1193         mov  %1,a
1194         mov  a,#0x0f
1195         anl  a,%1
1196 } by {
1197         ; Peephole 189   removed redundant mov and anl
1198         anl  a,#0x0f
1199         mov  %1,a
1200 }
1201
1202 // rules 190 & 191 need to be in order
1203 replace {
1204         mov  a,%1
1205         lcall __gptrput
1206         mov  a,%1
1207 } by {
1208         ; Peephole 190   removed redundant mov
1209         mov  a,%1
1210         lcall __gptrput
1211 }
1212
1213 replace {
1214         mov  %1,a
1215         mov  dpl,%2
1216         mov  dph,%3
1217         mov  b,%4
1218         mov  a,%1
1219 } by {
1220         ; Peephole 191   removed redundant mov
1221         mov  %1,a
1222         mov  dpl,%2
1223         mov  dph,%3
1224         mov  b,%4
1225 }
1226
1227 replace {
1228         mov  r%1,a
1229         mov  @r%2,ar%1
1230 } by {
1231         ; Peephole 192   used a instead of ar%1 as source
1232         mov  r%1,a
1233         mov  @r%2,a
1234 }
1235
1236 replace {
1237         jnz  %3
1238         mov  a,%4
1239         jnz  %3
1240         mov  a,%9
1241         jnz  %3
1242         mov  a,%12
1243         cjne %13,%14,%3
1244         sjmp %7
1245 %3:
1246         sjmp %8
1247 } by {
1248         ; Peephole 193.a optimized misc jump sequence
1249         jnz  %8
1250         mov  a,%4
1251         jnz  %8
1252         mov  a,%9
1253         jnz  %8
1254         mov  a,%12
1255         cjne %13,%14,%8
1256         sjmp %7
1257 %3:
1258 }
1259
1260 replace {
1261         cjne %1,%2,%3
1262         mov  a,%4
1263         cjne %5,%6,%3
1264         mov  a,%9
1265         cjne %10,%11,%3
1266         mov  a,%12
1267         cjne %13,%14,%3
1268         sjmp %7
1269 %3:
1270         sjmp %8
1271 } by {
1272         ; Peephole 193   optimized misc jump sequence
1273         cjne %1,%2,%8
1274         mov  a,%4
1275         cjne %5,%6,%8
1276         mov  a,%9
1277         cjne %10,%11,%8
1278         mov  a,%12
1279         cjne %13,%14,%8
1280         sjmp %7
1281 %3:
1282 }
1283
1284 replace {
1285         cjne %1,%2,%3
1286         cjne %5,%6,%3
1287         cjne %10,%11,%3
1288         cjne %13,%14,%3
1289         sjmp %7
1290 %3:
1291         sjmp %8
1292 } by {
1293         ; Peephole 194   optimized misc jump sequence
1294         cjne %1,%2,%8
1295         cjne %5,%6,%8
1296         cjne %10,%11,%8
1297         cjne %13,%14,%8
1298         sjmp %7
1299 %3:
1300 }
1301
1302 replace {
1303         jnz  %3
1304         mov  a,%4
1305         jnz  %3
1306         mov  a,%9
1307         cjne %10,%11,%3
1308         sjmp %7
1309 %3:
1310         sjmp %8
1311 } by {
1312         ; Peephole 195.a optimized misc jump sequence
1313         jnz  %8
1314         mov  a,%4
1315         jnz  %8
1316         mov  a,%9
1317         cjne %10,%11,%8
1318         sjmp %7
1319 %3:
1320 }
1321
1322 replace {
1323         cjne %1,%2,%3
1324         mov  a,%4
1325         cjne %5,%6,%3
1326         mov  a,%9
1327         cjne %10,%11,%3
1328         sjmp %7
1329 %3:
1330         sjmp %8
1331 } by {
1332         ; Peephole 195   optimized misc jump sequence
1333         cjne %1,%2,%8
1334         mov  a,%4
1335         cjne %5,%6,%8
1336         mov  a,%9
1337         cjne %10,%11,%8
1338         sjmp %7
1339 %3:
1340 }
1341
1342 replace {
1343         cjne %1,%2,%3
1344         cjne %5,%6,%3
1345         cjne %10,%11,%3
1346         sjmp %7
1347 %3:
1348         sjmp %8
1349 } by {
1350         ; Peephole 196   optimized misc jump sequence
1351         cjne %1,%2,%8
1352         cjne %5,%6,%8
1353         cjne %10,%11,%8
1354         sjmp %7
1355 %3:
1356 }
1357
1358 replace {
1359         jnz  %3
1360         mov  a,%4
1361         cjne %5,%6,%3
1362         sjmp %7
1363 %3:
1364         sjmp %8 
1365 } by {
1366         ; Peephole 197.a optimized misc jump sequence
1367         jnz  %8
1368         mov  a,%4
1369         cjne %5,%6,%8
1370         sjmp %7
1371 %3:     
1372 }
1373
1374 replace {
1375         cjne %1,%2,%3
1376         mov  a,%4
1377         cjne %5,%6,%3
1378         sjmp %7
1379 %3:
1380         sjmp %8
1381 } by {
1382         ; Peephole 197   optimized misc jump sequence
1383         cjne %1,%2,%8
1384         mov  a,%4
1385         cjne %5,%6,%8
1386         sjmp %7
1387 %3:
1388 }
1389
1390 replace {
1391         cjne %1,%2,%3
1392         cjne %5,%6,%3
1393         sjmp %7
1394 %3:
1395         sjmp %8
1396 } by {
1397         ; Peephole 198   optimized misc jump sequence
1398         cjne %1,%2,%8
1399         cjne %5,%6,%8
1400         sjmp %7
1401 %3:
1402 }
1403
1404 replace {
1405         cjne %1,%2,%3
1406         sjmp %4
1407 %3:
1408         sjmp %5
1409 } by {
1410         ; Peephole 199   optimized misc jump sequence
1411         cjne %1,%2,%5
1412         sjmp %4
1413 %3:
1414 }
1415
1416 replace {
1417         sjmp %1
1418 %1:
1419 } by {
1420         ; Peephole 200   removed redundant sjmp
1421 %1:
1422 }
1423
1424 replace {
1425         sjmp %1
1426 %2:
1427 %1:
1428 } by {
1429         ; Peephole 201   removed redundant sjmp
1430 %2:
1431 %1:
1432 }
1433
1434 replace {
1435         push  acc
1436         mov   dptr,%1
1437         pop   acc
1438 } by {
1439         ; Peephole 202   removed redundant push pop
1440         mov   dptr,%1
1441 }
1442
1443 replace {
1444         mov  r%1,_spx
1445         lcall %2
1446         mov  r%1,_spx
1447 } by {
1448         ; Peephole 203   removed mov  r%1,_spx
1449         lcall %2
1450 }
1451
1452 replace {
1453         mov  %1,a
1454         add  a,acc
1455         mov  %1,a
1456 } by {
1457         ; Peephole 204   removed redundant mov
1458         add  a,acc
1459         mov  %1,a
1460 }
1461
1462 replace {
1463         djnz %1,%2
1464         sjmp  %3
1465 %2:
1466         sjmp  %4
1467 %3:
1468 } by {
1469         ; Peephole 205   optimized misc jump sequence
1470         djnz %1,%4
1471 %2:
1472 %3:
1473 }
1474
1475 replace {
1476         mov  %1,%1
1477 } by {
1478         ; Peephole 206   removed redundant mov %1,%1
1479 }
1480
1481 replace {
1482         mov  a,_bp
1483         add  a,#0x00
1484         mov  %1,a
1485 } by {
1486         ; Peephole 207   removed zero add (acc not set to %1, flags undefined)
1487         mov  %1,_bp
1488 }
1489
1490 replace {
1491         push  acc
1492         mov   r%1,_bp
1493         pop   acc
1494 } by {
1495         ; Peephole 208   removed redundant push pop
1496         mov   r%1,_bp
1497 }
1498
1499 replace {
1500         mov  a,_bp
1501         add  a,#0x00
1502         inc  a
1503         mov  %1,a
1504 } by {
1505         ; Peephole 209   optimized increment (acc not set to %1, flags undefined)
1506         mov  %1,_bp
1507         inc  %1
1508 }
1509
1510 replace {
1511         mov  dptr,#((((%1 >> 8)) <<8) + %1)
1512 } by {
1513         ; Peephole 210   simplified expression
1514         mov  dptr,#%1
1515 }
1516
1517 replace {
1518         push %1
1519         pop  %1
1520 } by {
1521         ; Peephole 211   removed redundant push %1 pop %1  
1522
1523
1524 replace {
1525         mov  a,_bp
1526         add  a,#0x01
1527         mov  r%1,a
1528 } by {
1529         ; Peephole 212  reduced add sequence to inc
1530         mov  r%1,_bp
1531         inc  r%1
1532 }
1533
1534 replace {
1535         mov  %1,#(( %2 >> 8 ) ^ 0x80)
1536 } by {  
1537         mov  %1,#(%2 >> 8)
1538         xrl  %1,#0x80
1539 }
1540
1541 replace {
1542         mov  %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1543 } by {  
1544         mov  %1,#((%2 + %3) >> 8)
1545         xrl  %1,#0x80
1546 }
1547
1548 replace  {
1549         mov  %1,a
1550         mov  a,%2
1551         add  a,%1
1552 } by {
1553         ; Peephole 214 reduced some extra movs
1554         mov  %1,a
1555         add  a,%2       
1556 } if operandsNotSame
1557
1558 replace {
1559         mov  %1,a
1560         add  a,%2
1561         mov  %1,a
1562 } by {
1563         ; Peephole 215 removed some movs
1564         add  a,%2
1565         mov  %1,a
1566 } if operandsNotSame
1567
1568 replace {
1569         mov   r%1,%2
1570         clr   a
1571         inc   r%1
1572         mov   @r%1,a
1573         dec   r%1
1574         mov   @r%1,a
1575 } by {
1576         ; Peephole 216 simplified clear (2bytes)
1577         mov   r%1,%2
1578         clr   a
1579         mov   @r%1,a
1580         inc   r%1
1581         mov   @r%1,a
1582 }
1583
1584 replace {
1585         mov   r%1,%2
1586         clr   a
1587         inc   r%1
1588         inc   r%1
1589         mov   @r%1,a
1590         dec   r%1
1591         mov   @r%1,a
1592         dec   r%1
1593         mov   @r%1,a
1594 } by {
1595         ; Peephole 217 simplified clear (3bytes)
1596         mov   r%1,%2
1597         clr   a
1598         mov   @r%1,a
1599         inc   r%1
1600         mov   @r%1,a
1601         inc   r%1
1602         mov   @r%1,a
1603 }
1604
1605 replace {
1606         mov   r%1,%2
1607         clr   a
1608         inc   r%1
1609         inc   r%1
1610         inc   r%1
1611         mov   @r%1,a
1612         dec   r%1
1613         mov   @r%1,a
1614         dec   r%1
1615         mov   @r%1,a
1616         dec   r%1
1617         mov   @r%1,a
1618 } by {
1619         ; Peephole 218 simplified clear (4bytes)
1620         mov   r%1,%2
1621         clr   a
1622         mov   @r%1,a
1623         inc   r%1
1624         mov   @r%1,a
1625         inc   r%1
1626         mov   @r%1,a
1627         inc   r%1
1628         mov   @r%1,a
1629 }