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