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