DPTR abuse by 182a fixed by adding 182b
[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 replace {
1063         mov dpl,#%1
1064         mov dph,#(%1 >> 8)
1065         mov dpx,#(%1 >> 16)
1066 } by {
1067         ; Peephole 182b used 24 bit load of DPTR
1068         mov dptr,#%1
1069 }
1070
1071 // saves 2 bytes, ?? cycles.
1072 replace {
1073         mov  dpl,#%1
1074         mov  dph,#%2
1075         mov  dpx,#%3
1076 } by {
1077         ; Peephole 182a   used 24 bit load of dptr
1078         mov  dptr,#((%3 << 16) + (%2 << 8) + %1)
1079 } if 24bitMode
1080
1081 // saving 3 byte, 2 cycles, return(float_constant) profits here
1082 replace {
1083         mov  dpl,#%1
1084         mov  dph,#%2
1085 } by {
1086         ; Peephole 182   used 16 bit load of dptr
1087         mov  dptr,#(((%2)<<8) + %1)
1088 }
1089
1090 replace {
1091         anl  %1,#%2
1092         anl  %1,#%3
1093 } by {
1094         ; Peephole 183   avoided anl during execution
1095         anl  %1,#(%2 & %3)
1096 }
1097
1098 replace {
1099         mov  %1,a
1100         cpl  a
1101         mov  %1,a
1102 } by {
1103         ; Peephole 184   removed redundant mov
1104         cpl  a
1105         mov  %1,a
1106 }
1107
1108 replace {
1109 // acc being incremented might cause problems
1110         mov  %1,a
1111         inc  %1
1112 } by {
1113         ; Peephole 185   changed order of increment (acc incremented also!)
1114         inc  a
1115         mov  %1,a
1116 }
1117
1118 replace {
1119         add  a,#%1
1120         mov  dpl,a
1121         clr  a
1122         addc a,#(%1 >> 8)
1123         mov  dph,a
1124         clr  a
1125         movc a,@a+dptr
1126         mov  %2,a
1127         inc  dptr
1128         clr  a
1129         movc a,@a+dptr
1130         mov  %3,a
1131         inc  dptr
1132         clr  a
1133         movc a,@a+dptr
1134         mov  %4,a
1135         inc  dptr
1136         clr  a  
1137 } by {
1138         ; Peephole 186.a   optimized movc sequence
1139         mov  dptr,#%1
1140         mov  b,acc
1141         movc a,@a+dptr
1142         mov  %2,a
1143         mov  acc,b
1144         inc  dptr       
1145         movc a,@a+dptr
1146         mov  %3,a
1147         mov  acc,b
1148         inc  dptr
1149         mov  %4,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         mov  %2,a
1163         inc  dptr
1164         clr  a
1165         movc a,@a+dptr
1166         mov  %3,a
1167         inc  dptr
1168         clr  a
1169 } by {
1170         ; Peephole 186.b   optimized movc sequence
1171         mov  dptr,#%1
1172         mov  b,acc
1173         movc a,@a+dptr
1174         mov  %2,a
1175         mov  acc,b
1176         inc  dptr       
1177         movc a,@a+dptr
1178         mov  %3,a
1179         mov  acc,b
1180         inc  dptr       
1181 }
1182
1183 replace {
1184         add  a,#%1
1185         mov  dpl,a
1186         clr  a
1187         addc a,#(%1 >> 8)
1188         mov  dph,a
1189         clr  a
1190         movc a,@a+dptr
1191         mov  %2,a
1192         inc  dptr
1193         clr  a
1194 } by {
1195         ; Peephole 186.c   optimized movc sequence
1196         mov  dptr,#%1
1197         mov  b,acc
1198         movc a,@a+dptr
1199         mov  %2,a
1200         mov  acc,b
1201         inc  dptr
1202 }
1203
1204 replace {
1205         add  a,#%1
1206         mov  dpl,a
1207         clr  a
1208         addc a,#(%1 >> 8)
1209         mov  dph,a
1210         clr  a
1211         movc a,@a+dptr
1212 } by {
1213         ; Peephole 186   optimized movc sequence
1214         mov  dptr,#%1
1215         movc a,@a+dptr
1216 }
1217
1218 replace {
1219         mov  r%1,%2
1220         anl  ar%1,#%3
1221         mov  a,r%1
1222 } by {
1223         ; Peephole 187   used a instead of ar%1 for anl
1224         mov  a,%2
1225         anl  a,#%3
1226         mov  r%1,a
1227 }
1228
1229 replace {
1230         mov  %1,a
1231         mov  dptr,%2
1232         movc a,@a+dptr
1233         mov  %1,a
1234 } by {
1235         ; Peephole 188   removed redundant mov
1236         mov  dptr,%2
1237         movc a,@a+dptr
1238         mov  %1,a
1239 }
1240
1241 replace {
1242         anl  a,#0x0f
1243         mov  %1,a
1244         mov  a,#0x0f
1245         anl  a,%1
1246 } by {
1247         ; Peephole 189   removed redundant mov and anl
1248         anl  a,#0x0f
1249         mov  %1,a
1250 }
1251
1252 // rules 190 & 191 need to be in order
1253 replace {
1254         mov  a,%1
1255         lcall __gptrput
1256         mov  a,%1
1257 } by {
1258         ; Peephole 190   removed redundant mov
1259         mov  a,%1
1260         lcall __gptrput
1261 }
1262
1263 replace {
1264         mov  %1,a
1265         mov  dpl,%2
1266         mov  dph,%3
1267         mov  b,%4
1268         mov  a,%1
1269 } by {
1270         ; Peephole 191   removed redundant mov
1271         mov  %1,a
1272         mov  dpl,%2
1273         mov  dph,%3
1274         mov  b,%4
1275 }
1276
1277 replace {
1278         mov  r%1,a
1279         mov  @r%2,ar%1
1280 } by {
1281         ; Peephole 192   used a instead of ar%1 as source
1282         mov  r%1,a
1283         mov  @r%2,a
1284 }
1285
1286 replace {
1287         jnz  %3
1288         mov  a,%4
1289         jnz  %3
1290         mov  a,%9
1291         jnz  %3
1292         mov  a,%12
1293         cjne %13,%14,%3
1294         sjmp %7
1295 %3:
1296         sjmp %8
1297 } by {
1298         ; Peephole 193.a optimized misc jump sequence
1299         jnz  %8
1300         mov  a,%4
1301         jnz  %8
1302         mov  a,%9
1303         jnz  %8
1304         mov  a,%12
1305         cjne %13,%14,%8
1306         sjmp %7
1307 ;%3:
1308 } if labelRefCount %3 4
1309
1310 replace {
1311         cjne %1,%2,%3
1312         mov  a,%4
1313         cjne %5,%6,%3
1314         mov  a,%9
1315         cjne %10,%11,%3
1316         mov  a,%12
1317         cjne %13,%14,%3
1318         sjmp %7
1319 %3:
1320         sjmp %8
1321 } by {
1322         ; Peephole 193   optimized misc jump sequence
1323         cjne %1,%2,%8
1324         mov  a,%4
1325         cjne %5,%6,%8
1326         mov  a,%9
1327         cjne %10,%11,%8
1328         mov  a,%12
1329         cjne %13,%14,%8
1330         sjmp %7
1331 ;%3:
1332 } if labelRefCount %3 4
1333
1334 replace {
1335         cjne @%1,%2,%3
1336         inc  %1
1337         cjne @%1,%6,%3
1338         inc  %1
1339         cjne @%1,%11,%3
1340         inc  %1
1341         cjne @%1,%14,%3
1342         sjmp %7
1343 %3:
1344         sjmp %8
1345 } by {
1346         ; Peephole 193.a   optimized misc jump sequence
1347         cjne @%1,%2,%8
1348         inc  %1
1349         cjne @%1,%6,%8
1350         inc  %1
1351         cjne @%1,%11,%8
1352         inc  %1
1353         cjne @%1,%14,%8
1354         sjmp %7
1355 ;%3:
1356 } if labelRefCount %3 4
1357
1358 replace {
1359         cjne %1,%2,%3
1360         cjne %5,%6,%3
1361         cjne %10,%11,%3
1362         cjne %13,%14,%3
1363         sjmp %7
1364 %3:
1365         sjmp %8
1366 } by {
1367         ; Peephole 194   optimized misc jump sequence
1368         cjne %1,%2,%8
1369         cjne %5,%6,%8
1370         cjne %10,%11,%8
1371         cjne %13,%14,%8
1372         sjmp %7
1373 ;%3:
1374 } if labelRefCount %3 4
1375
1376 replace {
1377         jnz  %3
1378         mov  a,%4
1379         jnz  %3
1380         mov  a,%9
1381         cjne %10,%11,%3
1382         sjmp %7
1383 %3:
1384         sjmp %8
1385 } by {
1386         ; Peephole 195.a optimized misc jump sequence
1387         jnz  %8
1388         mov  a,%4
1389         jnz  %8
1390         mov  a,%9
1391         cjne %10,%11,%8
1392         sjmp %7
1393 ;%3:
1394 } if labelRefCount %3 3
1395
1396 replace {
1397         cjne %1,%2,%3
1398         mov  a,%4
1399         cjne %5,%6,%3
1400         mov  a,%9
1401         cjne %10,%11,%3
1402         sjmp %7
1403 %3:
1404         sjmp %8
1405 } by {
1406         ; Peephole 195   optimized misc jump sequence
1407         cjne %1,%2,%8
1408         mov  a,%4
1409         cjne %5,%6,%8
1410         mov  a,%9
1411         cjne %10,%11,%8
1412         sjmp %7
1413 ;%3:
1414 } if labelRefCount %3 3
1415
1416 replace {
1417         cjne @%1,%2,%3
1418         inc  %1
1419         cjne @%1,%6,%3
1420         inc  %1
1421         cjne @%1,%11,%3
1422         sjmp %7
1423 %3:
1424         sjmp %8
1425 } by {
1426         ; Peephole 195.a   optimized misc jump sequence
1427         cjne @%1,%2,%8
1428         inc  %1
1429         cjne @%1,%6,%8
1430         inc  %1
1431         cjne @%1,%11,%8
1432         sjmp %7
1433 ;%3:
1434 } if labelRefCount %3 3
1435
1436 replace {
1437         cjne %1,%2,%3
1438         cjne %5,%6,%3
1439         cjne %10,%11,%3
1440         sjmp %7
1441 %3:
1442         sjmp %8
1443 } by {
1444         ; Peephole 196   optimized misc jump sequence
1445         cjne %1,%2,%8
1446         cjne %5,%6,%8
1447         cjne %10,%11,%8
1448         sjmp %7
1449 ;%3:
1450 } if labelRefCount %3 3
1451
1452 replace {
1453         jnz  %3
1454         mov  a,%4
1455         cjne %5,%6,%3
1456         sjmp %7
1457 %3:
1458         sjmp %8 
1459 } by {
1460         ; Peephole 197.a optimized misc jump sequence
1461         jnz  %8
1462         mov  a,%4
1463         cjne %5,%6,%8
1464         sjmp %7
1465 ;%3:     
1466 } if labelRefCount %3 2
1467
1468 replace {
1469         cjne %1,%2,%3
1470         mov  a,%4
1471         cjne %5,%6,%3
1472         sjmp %7
1473 %3:
1474         sjmp %8
1475 } by {
1476         ; Peephole 197   optimized misc jump sequence
1477         cjne %1,%2,%8
1478         mov  a,%4
1479         cjne %5,%6,%8
1480         sjmp %7
1481 ;%3:
1482 } if labelRefCount %3 2
1483
1484 replace {
1485         cjne @%1,%2,%3
1486         inc  %1
1487         cjne @%1,%6,%3
1488         sjmp %7
1489 %3:
1490         sjmp %8
1491 } by {
1492         ; Peephole 197.a   optimized misc jump sequence
1493         cjne @%1,%2,%8
1494         inc   %1
1495         cjne @%1,%6,%8
1496         sjmp %7
1497 ;%3:
1498 } if labelRefCount %3 2
1499
1500 replace {
1501         cjne %1,%2,%3
1502         cjne %5,%6,%3
1503         sjmp %7
1504 %3:
1505         sjmp %8
1506 } by {
1507         ; Peephole 198   optimized misc jump sequence
1508         cjne %1,%2,%8
1509         cjne %5,%6,%8
1510         sjmp %7
1511 ;%3:
1512 } if labelRefCount %3 2
1513
1514 replace {
1515         cjne %1,%2,%3
1516         sjmp %4
1517 %3:
1518         sjmp %5
1519 } by {
1520         ; Peephole 199   optimized misc jump sequence
1521         cjne %1,%2,%5
1522         sjmp %4
1523 ;%3:
1524 } if labelRefCount %3 1
1525
1526 replace {
1527         sjmp %1
1528 %1:
1529 } by {
1530         ; Peephole 200   removed redundant sjmp
1531 %1:
1532 }
1533
1534 replace {
1535         sjmp %1
1536 %2:
1537 %1:
1538 } by {
1539         ; Peephole 201   removed redundant sjmp
1540 %2:
1541 %1:
1542 }
1543
1544 replace {
1545         push  acc
1546         mov   dptr,%1
1547         pop   acc
1548 } by {
1549         ; Peephole 202   removed redundant push pop
1550         mov   dptr,%1
1551 }
1552
1553 replace {
1554         mov  r%1,_spx
1555         lcall %2
1556         mov  r%1,_spx
1557 } by {
1558         ; Peephole 203   removed mov  r%1,_spx
1559         lcall %2
1560 }
1561
1562 replace {
1563         mov  %1,a
1564         add  a,acc
1565         mov  %1,a
1566 } by {
1567         ; Peephole 204   removed redundant mov
1568         add  a,acc
1569         mov  %1,a
1570 }
1571
1572 replace {
1573         djnz %1,%2
1574         sjmp  %3
1575 %2:
1576         sjmp  %4
1577 %3:
1578 } by {
1579         ; Peephole 205   optimized misc jump sequence
1580         djnz %1,%4
1581 %2:
1582 %3:
1583 } if labelRefCount %2 1
1584
1585 replace {
1586         mov  %1,%1
1587 } by {
1588         ; Peephole 206   removed redundant mov %1,%1
1589 }
1590
1591 replace {
1592         mov  a,_bp
1593         add  a,#0x00
1594         mov  %1,a
1595 } by {
1596         ; Peephole 207   removed zero add (acc not set to %1, flags undefined)
1597         mov  %1,_bp
1598 }
1599
1600 replace {
1601         push  acc
1602         mov   r%1,_bp
1603         pop   acc
1604 } by {
1605         ; Peephole 208   removed redundant push pop
1606         mov   r%1,_bp
1607 }
1608
1609 replace {
1610         mov  a,_bp
1611         add  a,#0x00
1612         inc  a
1613         mov  %1,a
1614 } by {
1615         ; Peephole 209   optimized increment (acc not set to %1, flags undefined)
1616         mov  %1,_bp
1617         inc  %1
1618 }
1619
1620 replace {
1621         mov  dptr,#((((%1 >> 16)) <<16) + (((%1 >> 8)) <<8) + %1)
1622 } by {
1623         ; Peephole 210a   simplified expression
1624         mov  dptr,#%1
1625 } if 24bitMode
1626
1627 replace {
1628         mov  dptr,#((((%1 >> 8)) <<8) + %1)
1629 } by {
1630         ; Peephole 210   simplified expression
1631         mov  dptr,#%1
1632 }
1633
1634 replace {
1635         push %1
1636         pop  %1
1637 } by {
1638         ; Peephole 211   removed redundant push %1 pop %1  
1639
1640
1641 replace {
1642         mov  a,_bp
1643         add  a,#0x01
1644         mov  r%1,a
1645 } by {
1646         ; Peephole 212  reduced add sequence to inc
1647         mov  r%1,_bp
1648         inc  r%1
1649 }
1650
1651 replace {
1652         mov  %1,#(( %2 >> 8 ) ^ 0x80)
1653 } by {  
1654         mov  %1,#(%2 >> 8)
1655         xrl  %1,#0x80
1656 }
1657
1658 replace {
1659         mov  %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1660 } by {  
1661         mov  %1,#((%2 + %3) >> 8)
1662         xrl  %1,#0x80
1663 }
1664
1665 replace  {
1666         mov  %1,a
1667         mov  a,%2
1668         add  a,%1
1669 } by {
1670         ; Peephole 214 reduced some extra movs
1671         mov  %1,a
1672         add  a,%2       
1673 } if operandsNotSame
1674
1675 replace {
1676         mov  %1,a
1677         add  a,%2
1678         mov  %1,a
1679 } by {
1680         ; Peephole 215 removed some movs
1681         add  a,%2
1682         mov  %1,a
1683 } if operandsNotSame
1684
1685 replace {
1686         mov   r%1,%2
1687         clr   a
1688         inc   r%1
1689         mov   @r%1,a
1690         dec   r%1
1691         mov   @r%1,a
1692 } by {
1693         ; Peephole 216 simplified clear (2bytes)
1694         mov   r%1,%2
1695         clr   a
1696         mov   @r%1,a
1697         inc   r%1
1698         mov   @r%1,a
1699 }
1700
1701 replace {
1702         mov   r%1,%2
1703         clr   a
1704         inc   r%1
1705         inc   r%1
1706         mov   @r%1,a
1707         dec   r%1
1708         mov   @r%1,a
1709         dec   r%1
1710         mov   @r%1,a
1711 } by {
1712         ; Peephole 217 simplified clear (3bytes)
1713         mov   r%1,%2
1714         clr   a
1715         mov   @r%1,a
1716         inc   r%1
1717         mov   @r%1,a
1718         inc   r%1
1719         mov   @r%1,a
1720 }
1721
1722 replace {
1723         mov   r%1,%2
1724         clr   a
1725         inc   r%1
1726         inc   r%1
1727         inc   r%1
1728         mov   @r%1,a
1729         dec   r%1
1730         mov   @r%1,a
1731         dec   r%1
1732         mov   @r%1,a
1733         dec   r%1
1734         mov   @r%1,a
1735 } by {
1736         ; Peephole 218 simplified clear (4bytes)
1737         mov   r%1,%2
1738         clr   a
1739         mov   @r%1,a
1740         inc   r%1
1741         mov   @r%1,a
1742         inc   r%1
1743         mov   @r%1,a
1744         inc   r%1
1745         mov   @r%1,a
1746 }
1747
1748 replace {
1749         clr   a
1750         movx  @dptr,a
1751         mov   dptr,%1
1752         clr   a
1753         movx  @dptr,a
1754 } by {
1755         ; Peephole 219 removed redundant clear
1756         clr   a
1757         movx  @dptr,a
1758         mov   dptr,%1
1759         movx  @dptr,a
1760 }
1761
1762 replace {
1763         clr   a
1764         movx  @dptr,a
1765         mov   dptr,%1
1766         movx  @dptr,a
1767         mov   dptr,%2
1768         clr   a
1769         movx  @dptr,a
1770 } by {
1771         ; Peephole 219a removed redundant clear
1772         clr   a
1773         movx  @dptr,a
1774         mov   dptr,%1
1775         movx  @dptr,a
1776         mov   dptr,%2
1777         movx  @dptr,a
1778 }
1779
1780 replace {
1781         mov     dps, #0x00
1782         mov     dps, #0x01
1783 } by {
1784         ; Peephole 220a removed bogus DPS set
1785         mov     dps, #0x01
1786 }
1787
1788 replace {
1789         mov     dps, #0x01
1790         mov     dps, #0x00
1791 } by {
1792         ; Peephole 220b removed bogus DPS set
1793         mov     dps, #0x00
1794 }
1795
1796 replace {
1797         mov     %1 + %2,(%2 + %1)
1798 } by {
1799         ; Peephole 221a remove redundant move
1800 }
1801
1802 replace {
1803         mov     (%1 + %2 + %3),((%2 + %1) + %3)
1804 } by {
1805         ; Peephole 221b remove redundant move
1806 }
1807
1808 replace {
1809         dec     r%1
1810         inc     r%1
1811 } by {
1812         ; removed dec/inc pair
1813 }
1814
1815 replace {
1816         mov     dps, #0x00
1817         mov     %1,a
1818         mov     dps, #0x01
1819 } by {
1820         ; Peephole 222 removed DPS abuse.
1821         mov     %1,a
1822         mov     dps, #0x01
1823 }
1824
1825 replace {
1826         mov     dps, #0x00
1827         xch     a, ap
1828         mov     %1, ap
1829         mov     dps, #0x01
1830 } by {
1831         ; Peephole 222a removed DPS abuse.
1832         xch     a, ap
1833         mov     %1, ap
1834         mov     dps, #0x01
1835 }
1836
1837 replace {
1838         mov     dps, #0x%1
1839         inc     dptr
1840         movx    a,@dptr
1841         mov     %2,a
1842         mov     dps, #0x%1
1843 } by {
1844         mov     dps, #0x%1
1845         inc     dptr
1846         movx    a,@dptr
1847         mov     %2,a
1848 ; Peephole 223: yet more DPS abuse removed.
1849 }
1850
1851 replace {
1852         mov     dps, #0x00
1853         inc     dps
1854 } by {
1855         mov     dps, #0x01
1856 }
1857
1858 replace {
1859         mov     dps, #0x0%1
1860         mov     dptr, %2
1861         mov     dps, #0x0%1
1862 } by {
1863         mov     dps, #0x0%1
1864         mov     dptr, %2
1865 }
1866
1867 replace {
1868         mov     dps, #0x01
1869         mov     dptr, %1
1870         mov     dps, #0x00
1871         mov     dptr, %2
1872         inc     dps
1873 } by {
1874         mov     dps, #0x00
1875         mov     dptr, %2
1876         inc     dps
1877         mov     dptr, %1
1878 ; Peephole 224a: DPS usage re-arranged.
1879 }
1880
1881 replace {
1882         mov     dps, #0x0%1
1883         mov     dptr, %2
1884         mov     dps, #0x0%3
1885         mov     dptr, %4
1886         mov     dps, #0x0%1
1887 } by {
1888         mov     dps, #0x0%3
1889         mov     dptr, %4
1890         mov     dps, #0x0%1
1891         mov     dptr, %2
1892 ; Peephole 224: DPS usage re-arranged.
1893 }
1894
1895 replace {
1896         mov     dps, #0x01
1897         mov     dptr, %1
1898         mov     dps, #0x00
1899 } by {
1900         mov     dps, #0x01
1901         mov     dptr, %1
1902         dec     dps
1903 }