../m
[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 replace restart {
61         mov     a,#0
62 } by {
63         ; Peephole 3.d   changed mov to clr
64         clr     a
65 }
66
67 replace {
68         mov  %1,a
69         mov  dptr,#%2
70         mov  a,%1
71         movx @dptr,a
72 } by {
73         ; Peephole 100   removed redundant mov
74         mov  %1,a
75         mov  dptr,#%2
76         movx @dptr,a
77 }
78
79 replace {
80         mov  a,acc
81 } by {
82         ;  Peephole 100.a   removed redundant mov
83 }
84
85 replace {
86         mov  a,%1
87         movx @dptr,a
88         inc  dptr
89         mov  a,%1
90         movx @dptr,a
91 } by {
92         ; Peephole 101   removed redundant mov
93         mov  a,%1
94         movx @dptr,a
95         inc  dptr
96         movx @dptr,a
97 }
98
99 replace {
100         mov  %1,%2
101         ljmp %3
102 %4:
103         mov  %1,%5
104 %3:
105         mov  dpl,%1
106 %7:
107         mov  sp,bp
108         pop  bp
109 } by {
110         ; Peephole 102   removed redundant mov
111         mov  dpl,%2
112         ljmp %3
113 %4:
114         mov  dpl,%5
115 %3:
116 %7:
117         mov  sp,bp
118         pop  bp
119 }
120
121 replace {
122         mov  %1,%2
123         ljmp %3
124 %4:
125         mov  a%1,%5
126 %3:
127         mov  dpl,%1
128 %7:
129         mov  sp,bp
130         pop  bp
131 } by {
132         ; Peephole 103   removed redundant mov
133         mov  dpl,%2
134         ljmp %3
135 %4:
136         mov  dpl,%5
137 %3:
138 %7:
139         mov  sp,bp
140         pop  bp
141 }
142
143 replace {
144         mov  a,bp
145         clr  c
146         add  a,#0x01
147         mov  r%1,a
148 } by {
149         ; Peephole 104   optimized increment (acc not set to r%1, flags undefined)
150         mov  r%1,bp
151         inc  r%1
152 }
153
154 replace {
155         mov  %1,a
156         mov  a,%1
157 } by {
158         ; Peephole 105   removed redundant mov
159         mov  %1,a
160 }
161
162 replace {
163         mov  %1,a
164         clr  c
165         mov  a,%1
166 } by {
167         ; Peephole 106   removed redundant mov 
168         mov  %1,a
169         clr  c
170 }
171
172 replace {
173         ljmp %1
174 %1:
175 } by {
176         ; Peephole 107   removed redundant ljmp
177 %1:
178 }
179
180 replace {
181         jc   %1
182         ljmp %5
183 %1:
184 } by {
185         ; Peephole 108   removed ljmp by inverse jump logic
186         jnc  %5
187 %1:
188 } if labelInRange
189
190 replace {
191         jz   %1
192         ljmp %5
193 %1:
194 } by {
195         ; Peephole 109   removed ljmp by inverse jump logic
196         jnz  %5
197 %1:
198 } if labelInRange
199
200 replace {
201         jnz  %1
202         ljmp %5
203 %1:
204 } by {
205         ; Peephole 110   removed ljmp by inverse jump logic
206         jz  %5
207 %1:
208 } if labelInRange
209
210 replace {
211         jb   %1,%2
212         ljmp %5
213 %2:
214 } by {
215         ; Peephole 111   removed ljmp by inverse jump logic
216         jnb  %1,%5
217 %2:
218 } if labelInRange
219
220 replace {
221         jnb  %1,%2
222         ljmp %5
223 %2:
224 } by {
225        ; Peephole 112   removed ljmp by inverse jump logic
226         jb   %1,%5
227 %2:
228 } if labelInRange
229
230 replace {
231         ljmp %5
232 %1:
233 } by {
234         ; Peephole 132   changed ljmp to sjmp
235         sjmp %5
236 %1:
237 } if labelInRange
238
239
240 replace {
241         clr  a
242         cjne %1,%2,%3
243         cpl  a
244 %3:
245         rrc  a
246         mov  %4,c
247 } by {
248         ; Peephole 113   optimized misc sequence
249         clr  %4
250         cjne %1,%2,%3
251         setb %4
252 %3:
253 } if labelRefCount %3 1
254
255 replace {
256         clr  a
257         cjne %1,%2,%3
258         cjne %10,%11,%3
259         cpl  a
260 %3:
261         rrc  a
262         mov  %4,c
263 } by {
264         ; Peephole 114   optimized misc sequence
265         clr  %4
266         cjne %1,%2,%3
267         cjne %10,%11,%3
268         setb %4
269 %3:
270 } if labelRefCount %3 2
271
272 replace {
273         clr  a
274         cjne %1,%2,%3
275         cpl  a
276 %3:
277         jnz  %4
278 } by {
279         ; Peephole 115   jump optimization 
280         cjne %1,%2,%3
281         sjmp %4
282 %3:
283 } if labelRefCount %3 1
284
285 replace {
286         clr  a
287         cjne %1,%2,%3
288         cjne %9,%10,%3
289         cpl  a
290 %3:
291         jnz  %4
292 } by {
293         ; Peephole 116   jump optimization
294         cjne %1,%2,%3
295         cjne %9,%10,%3
296         sjmp %4
297 %3:
298 } if labelRefCount %3 2
299
300 replace {
301         clr  a
302         cjne %1,%2,%3
303         cjne %9,%10,%3
304         cjne %11,%12,%3
305         cpl  a
306 %3:
307         jnz %4
308 } by {
309         ; Peephole 117   jump optimization
310         cjne %1,%2,%3
311         cjne %9,%10,%3
312         cjne %11,%12,%3
313         sjmp %4
314 %3:
315 } if labelRefCount %3 3
316
317 replace {
318         clr  a
319         cjne %1,%2,%3
320         cjne %9,%10,%3
321         cjne %11,%12,%3
322         cjne %13,%14,%3
323         cpl  a
324 %3:
325         jnz %4
326 } by {
327         ; Peephole 118   jump optimization
328         cjne %1,%2,%3
329         cjne %9,%10,%3
330         cjne %11,%12,%3
331         cjne %13,%14,%3
332         sjmp %4
333 %3:
334 } if labelRefCount %3 4
335
336 replace {
337         mov  a,#0x01
338         cjne %1,%2,%3
339         clr  a
340 %3:
341         jnz  %4
342 } by {
343         ; Peephole 119   jump optimization
344         cjne %1,%2,%4
345 %3:
346 } if labelRefCount %3 1
347
348 replace {
349         mov  a,#0x01
350         cjne %1,%2,%3
351         cjne %10,%11,%3
352         clr  a
353 %3:
354         jnz  %4
355 } by {
356         ; Peephole 120   jump optimization
357         cjne %1,%2,%4
358         cjne %10,%11,%4
359 %3:
360 } if labelRefCount %3 2
361
362 replace {
363         mov  a,#0x01
364         cjne %1,%2,%3
365         cjne %10,%11,%3
366         cjne %12,%13,%3
367         clr  a
368 %3:
369         jnz  %4
370 } by {
371         ; Peephole 121   jump optimization
372         cjne %1,%2,%4
373         cjne %10,%11,%4
374         cjne %12,%13,%4
375 %3:
376 } if labelRefCount %3 3
377
378 replace {
379         mov  a,#0x01
380         cjne %1,%2,%3
381         cjne %10,%11,%3
382         cjne %12,%13,%3
383         cjne %14,%15,%3
384         clr  a
385 %3:
386         jnz  %4
387 } by {
388         ; Peephole 122   jump optimization
389         cjne %1,%2,%4
390         cjne %10,%11,%4
391         cjne %12,%13,%4
392         cjne %14,%15,%4
393 %3:
394 } if labelRefCount %3 4
395
396 replace {
397         mov  a,#0x01
398         cjne %1,%2,%3
399         clr  a
400 %3:
401         jz   %4
402 } by {
403         ; Peephole 123   jump optimization
404         cjne %1,%2,%3
405         smp  %4
406 %3:
407 } if labelRefCount %3 1
408
409 replace {
410         mov  a,#0x01
411         cjne %1,%2,%3
412         cjne %10,%11,%3
413         clr  a
414 %3:
415         jz   %4
416 } by {
417         ; Peephole 124   jump optimization
418         cjne %1,%2,%3
419         cjne %10,%11,%3
420         sjmp  %4
421 %3:
422 } if labelRefCount %3 2
423
424 replace {
425         mov  a,#0x01
426         cjne %1,%2,%3
427         cjne %10,%11,%3
428         cjne %12,%13,%3
429         clr  a
430 %3:
431         jz   %4
432 } by {
433         ; Peephole 125   jump optimization
434         cjne %1,%2,%3
435         cjne %10,%11,%3
436         cjne %12,%13,%3
437         sjmp %4
438 %3:
439 } if labelRefCount %3 3
440
441 replace {
442         mov  a,#0x01
443         cjne %1,%2,%3
444         cjne %10,%11,%3
445         cjne %12,%13,%3
446         cjne %14,%15,%3
447         clr  a
448 %3:
449         jz   %4
450 } by {
451         ; Peephole 126   jump optimization
452         cjne %1,%2,%3
453         cjne %10,%11,%3
454         cjne %12,%13,%3
455         cjne %14,%15,%3
456         sjmp %4
457 %3:
458 } if labelRefCount %3 4
459
460 replace {
461         push psw
462         mov  psw,%1
463         push bp
464         mov  bp,%2
465 %3:
466         mov  %2,bp
467         pop  bp
468         pop  psw
469         ret
470 } by {
471         ; Peephole 127   removed misc sequence
472         ret
473 } if labelRefCount %3 0
474
475 replace {
476         clr  a
477         rlc  a
478         jz   %1
479 } by {
480         ; Peephole 128   jump optimization
481         jnc  %1
482 }
483
484 replace {
485         clr  a
486         rlc  a
487         jnz  %1
488 } by {
489         ; Peephole 129   jump optimization
490         jc   %1
491 }
492
493 replace { 
494         mov  r%1,@r%2
495 } by {
496         ; Peephole 130   changed target address mode r%1 to ar%1
497         mov  ar%1,@r%2
498 }
499
500 replace { 
501         mov  a,%1
502         subb a,#0x01
503         mov  %2,a
504         mov  %1,%2
505 } by {
506         ; Peephole 131   optimized decrement (not caring for c)
507         dec  %1         
508         mov  %2,%1      
509 }
510
511 replace {
512         mov  r%1,%2
513         mov  ar%3,@r%1
514         inc  r%3
515         mov  r%4,%2
516         mov  @r%4,ar%3
517 } by {
518         ; Peephole 133   removed redundant moves
519         mov  r%1,%2
520         inc  @r%1
521         mov  ar%3,@r%1
522 }
523
524 replace {
525         mov  r%1,%2
526         mov  ar%3,@r%1
527         dec  r%3
528         mov  r%4,%2
529         mov  @r%4,ar%3
530 } by {
531         ; Peephole 134   removed redundant moves
532         mov  r%1,%2
533         dec  @r%1
534         mov  ar%3,@r%1
535 }
536
537 replace {
538         mov  r%1,a
539         mov  a,r%2
540         orl  a,r%1
541 } by {
542         ; Peephole 135   removed redundant mov
543         mov  r%1,a
544         orl  a,r%2
545 }
546
547 replace {
548         mov  %1,a
549         mov  dpl,%2
550         mov  dph,%3
551         mov  dpx,%4
552         mov  a,%1
553 } by {
554         ; Peephole 136a   removed redundant moves
555         mov  %1,a
556         mov  dpl,%2
557         mov  dph,%3
558         mov  dpx,%4
559 } if 24bitMode
560
561 replace {
562         mov  %1,a
563         mov  dpl,%2
564         mov  dph,%3
565         mov  a,%1
566 } by {
567         ; Peephole 136   removed redundant moves
568         mov  %1,a
569         mov  dpl,%2
570         mov  dph,%3
571 }
572
573 // WTF? Doesn't look sensible to me...
574 //replace {
575 //        mov  b,#0x00
576 //        mov  a,%1
577 //        cjne %2,%3,%4
578 //        mov  b,#0x01
579 //%4:
580 //        mov  a,b
581 //        jz   %5
582 //} by {
583 //        ; Peephole 137   optimized misc jump sequence
584 //        mov  a,%1
585 //        cjne %2,%3,%5
586 //%4:
587 //} if labelRefCount %4 1
588 //
589 //replace {
590 //        mov  b,#0x00
591 //        mov  a,%1
592 //        cjne %2,%3,%4
593 //        mov  b,#0x01
594 //%4:
595 //        mov  a,b
596 //        jnz  %5
597 //} by {
598 //        ; Peephole 138   optimized misc jump sequence
599 //        mov  a,%1
600 //        cjne %2,%3,%4
601 //        sjmp %5
602 //%4:
603 //} if labelRefCount %4 1
604
605 replace {
606         mov  r%1,a
607         anl  ar%1,%2
608         mov  a,r%1
609 } by {
610         ; Peephole 139   removed redundant mov
611         anl  a,%2
612         mov  r%1,a
613 }
614
615 replace {
616         mov  r%1,a
617         orl  ar%1,%2
618         mov  a,r%1
619 } by {
620         ; Peephole 140   removed redundant mov
621         orl  a,%2
622         mov  r%1,a }
623
624 replace {
625         mov  r%1,a
626         xrl  ar%1,%2
627         mov  a,r%1
628 } by {
629         ; Peephole 141   removed redundant mov
630         xrl  a,%2
631         mov  r%1,a
632 }
633
634 replace {
635         mov  r%1,a
636         mov  r%2,ar%1
637         mov  ar%1,@r%2
638 } by {
639         ; Peephole 142   removed redundant moves
640         mov  r%2,a
641         mov  ar%1,@r%2
642 }
643
644 replace {
645         rlc  a
646         mov  acc.0,c
647 } by {
648         ; Peephole 143   converted rlc to rl
649         rl   a
650 }
651
652 replace {
653         rrc  a
654         mov  acc.7,c
655 } by {
656         ; Peephole 144   converted rrc to rc
657         rr   a
658 }
659
660 replace {
661         clr  c
662         addc a,%1
663 } by {
664         ; Peephole 145   changed to add without carry  
665         add  a,%1
666 }
667
668 replace {
669         clr  c
670         mov  a,%1
671         addc a,%2
672 } by {
673         ; Peephole 146   changed to add without carry
674         mov  a,%1
675         add  a,%2
676 }
677
678 replace {
679         orl  r%1,a
680 } by {
681         ; Peephole 147   changed target address mode r%1 to ar%1
682         orl  ar%1,a
683 }
684
685 replace {
686         anl  r%1,a
687 } by {
688         ; Peephole 148   changed target address mode r%1 to ar%1
689         anl  ar%1,a
690 }
691
692 replace {
693         xrl  r%1,a
694 } by {
695         ; Peephole 149   changed target address mode r%1 to ar%1
696         xrl  ar%1,a
697 }
698
699 replace {
700         mov  %1,dpl
701         mov  dpl,%1
702 %9:
703         ret
704 } by {
705         ; Peephole 150   removed misc moves via dpl before return
706 %9:
707         ret
708 }
709
710 replace {
711         mov  %1,dpl
712         mov  %2,dph
713         mov  dpl,%1
714         mov  dph,%2
715 %9:
716         ret
717 } by {
718         ; Peephole 151   removed misc moves via dph, dpl before return
719 %9:
720         ret
721 }
722
723 replace {
724         mov  %1,dpl
725         mov  %2,dph
726         mov  dpl,%1
727 %9:
728         ret
729 } by {
730         ; Peephole 152   removed misc moves via dph, dpl before return
731 %9:
732         ret
733 }
734
735 replace {
736         mov  %1,dpl
737         mov  %2,dph
738         mov  %3,b
739         mov  dpl,%1
740         mov  dph,%2
741         mov  b,%3
742 %9:
743         ret
744 } by {
745         ; Peephole 153   removed misc moves via dph, dpl, b before return
746 %9:
747         ret
748 }
749
750 replace {
751         mov  %1,dpl
752         mov  %2,dph
753         mov  %3,b
754         mov  dpl,%1
755 %9:
756         ret
757 } by {
758         ; Peephole 154   removed misc moves via dph, dpl, b before return
759 %9:
760         ret
761 }
762
763 replace {
764         mov  %1,dpl
765         mov  %2,dph
766         mov  %3,b
767         mov  dpl,%1
768         mov  dph,%2
769 %9:
770         ret
771 } by {
772         ; Peephole 155   removed misc moves via dph, dpl, b before return
773 %9:
774         ret
775 }
776
777 replace {
778         mov  %1,dpl
779         mov  %2,dph
780         mov  %3,b
781         mov  %4,a
782         mov  dpl,%1
783         mov  dph,%2
784         mov  b,%3
785         mov  a,%4
786 %9:
787         ret
788 } by {
789         ; Peephole 156   removed misc moves via dph, dpl, b, a before return
790 %9:
791         ret
792 }
793
794 replace {
795         mov  %1,dpl
796         mov  %2,dph
797         mov  %3,b
798         mov  %4,a
799         mov  dpl,%1
800         mov  dph,%2
801 %9:
802         ret
803 } by {
804         ; Peephole 157   removed misc moves via dph, dpl, b, a before return
805 %9:
806         ret
807 }
808
809 replace {
810         mov  %1,dpl
811         mov  %2,dph
812         mov  %3,b
813         mov  %4,a
814         mov  dpl,%1
815 %9:
816         ret } by {
817         ; Peephole 158   removed misc moves via dph, dpl, b, a before return
818 %9:
819         ret }
820
821 replace {
822         mov  %1,#%2
823         xrl  %1,#0x80
824 } by {
825         ; Peephole 159   avoided xrl during execution
826         mov  %1,#(%2 ^ 0x80)
827 }
828
829 replace {
830         jnc  %1
831         sjmp %2
832 %1:
833 } by {
834         ; Peephole 160   removed sjmp by inverse jump logic
835         jc   %2
836 %1:}
837
838 replace {
839         jc   %1
840         sjmp %2
841 %1:
842 } by {
843         ; Peephole 161   removed sjmp by inverse jump logic
844         jnc  %2
845 %1:}
846
847 replace {
848         jnz  %1
849         sjmp %2
850 %1:
851 } by {
852         ; Peephole 162   removed sjmp by inverse jump logic
853         jz   %2
854 %1:}
855
856 replace {
857         jz   %1
858         sjmp %2
859 %1:
860 } by {
861         ; Peephole 163   removed sjmp by inverse jump logic
862         jnz  %2
863 %1:}
864
865 replace {
866         jnb  %3,%1
867         sjmp %2
868 %1:
869 } by {
870         ; Peephole 164   removed sjmp by inverse jump logic
871         jb   %3,%2
872 %1:
873 }
874
875 replace {
876         jb   %3,%1
877         sjmp %2
878 %1:
879 } by {
880         ; Peephole 165   removed sjmp by inverse jump logic
881         jnb  %3,%2
882 %1:
883 }
884
885 replace {
886         mov  %1,%2
887         mov  %3,%1
888         mov  %2,%1
889 } by {
890         ; Peephole 166   removed redundant mov
891         mov  %1,%2
892         mov  %3,%1 }
893
894 replace {
895         mov  c,%1
896         cpl  c
897         mov  %1,c
898 } by {
899         ; Peephole 167   removed redundant bit moves (c not set to %1)
900         cpl  %1 }
901
902 replace {
903         jnb  %1,%2
904         sjmp %3
905 %2:} by {
906         ; Peephole 168   jump optimization
907         jb   %1,%3
908 %2:}
909
910 replace {
911         jb   %1,%2
912         sjmp %3
913 %2:} by {
914         ; Peephole 169   jump optimization
915         jnb  %1,%3
916 %2:}
917
918 replace {
919         clr  a
920         cjne %1,%2,%3
921         cpl  a
922 %3:
923         jz   %4
924 } by {
925         ; Peephole 170   jump optimization
926         cjne %1,%2,%4
927 %3:
928 } if labelRefCount %3 1
929
930 replace {
931         clr  a
932         cjne %1,%2,%3
933         cjne %9,%10,%3
934         cpl  a
935 %3:
936         jz   %4
937 } by {
938         ; Peephole 171   jump optimization
939         cjne %1,%2,%4
940         cjne %9,%10,%4
941 %3:
942 } if labelRefCount %3 2
943
944 replace {
945         clr  a
946         cjne %1,%2,%3
947         cjne %9,%10,%3
948         cjne %11,%12,%3
949         cpl  a
950 %3:
951         jz   %4
952 } by {
953         ; Peephole 172   jump optimization
954         cjne %1,%2,%4
955         cjne %9,%10,%4
956         cjne %11,%12,%4
957 %3:
958 } if labelRefCount %3 3
959
960 replace {
961         clr  a
962         cjne %1,%2,%3
963         cjne %9,%10,%3
964         cjne %11,%12,%3
965         cjne %13,%14,%3
966         cpl  a
967 %3:
968         jz   %4
969 } by {
970         ; Peephole 173   jump optimization
971         cjne %1,%2,%4
972         cjne %9,%10,%4
973         cjne %11,%12,%4
974         cjne %13,%14,%4
975 %3:
976 } if labelRefCount %3 4
977
978 replace {
979         mov  r%1,%2
980         clr  c
981         mov  a,r%1
982         subb a,#0x01
983         mov  %2,a
984 } by {
985         ; Peephole 174   optimized decrement (acc not set to %2, flags undefined)
986         mov  r%1,%2
987         dec  %2
988 }
989
990
991 replace {
992         mov  r%1,%2
993         mov  a,r%1
994         add  a,#0x01
995         mov  %2,a
996 } by {
997         ; Peephole 175   optimized increment (acc not set to %2, flags undefined)
998         mov  r%1,%2
999         inc  %2
1000 }
1001
1002 replace {
1003         mov  %1,@r%2
1004         inc  %1
1005         mov  @r%2,%1
1006 } by {
1007         ; Peephole 176   optimized increment, removed redundant mov
1008         inc  @r%2
1009         mov  %1,@r%2
1010 }
1011
1012 // this one will screw assignes to volatile/sfr's
1013 //replace {
1014 //        mov  %1,%2
1015 //        mov  %2,%1
1016 //} by {
1017 //        ; Peephole 177   removed redundant mov
1018 //        mov  %1,%2
1019 //}
1020
1021 replace {
1022         mov  a,%1
1023         mov  b,a
1024         mov  a,%2
1025 } by {
1026         ; Peephole 178   removed redundant mov
1027         mov  b,%1
1028         mov  a,%2
1029 }
1030
1031 // rules 179-182 provided by : Frieder <fe@lake.iup.uni-heidelberg.de>
1032 // saving 2 byte, 1 cycle
1033 replace {
1034         mov  b,#0x00
1035         mov  a,#0x00
1036 } by {
1037         ; Peephole 179   changed mov to clr
1038         clr  a
1039         mov  b,a
1040 }
1041
1042 // saving 1 byte, 0 cycles
1043 replace {
1044         mov  a,#0x00
1045 } by {
1046         ; Peephole 180   changed mov to clr
1047         clr  a
1048 }
1049
1050 replace {
1051         mov  dpl,#0x00
1052         mov  dph,#0x00
1053         mov  dpx,#0x00
1054 } by {
1055         ; Peephole 181a   used 24 bit load of dptr
1056         mov  dptr,#0x0000
1057 } if 24bitMode
1058
1059 // saving 3 byte, 2 cycles, return(NULL) profits here
1060 replace {
1061         mov  dpl,#0x00
1062         mov  dph,#0x00
1063 } by {
1064         ; Peephole 181   used 16 bit load of dptr
1065         mov  dptr,#0x0000
1066 }
1067
1068 replace {
1069         mov dpl,#%1
1070         mov dph,#(%1 >> 8)
1071         mov dpx,#(%1 >> 16)
1072 } by {
1073         ; Peephole 182b used 24 bit load of DPTR
1074         mov dptr,#%1
1075 }
1076
1077 // saves 2 bytes, ?? cycles.
1078 replace {
1079         mov  dpl,#0x%1
1080         mov  dph,#0x%2
1081         mov  dpx,#0x%3
1082 } by {
1083         ; Peephole 182a   used 24 bit load of dptr
1084         mov     dptr,#0x%3%2%1
1085 } if 24bitModeAndPortDS390
1086
1087 // saves 2 bytes, ?? cycles.
1088 replace {
1089         mov  dpl,#%1
1090         mov  dph,#%2
1091         mov  dpx,#%3
1092 } by {
1093         ; Peephole 182b   used 24 bit load of dptr
1094         mov  dptr,#((%3 << 16) + (%2 << 8) + %1)
1095 } if 24bitModeAndPortDS390
1096
1097 // saving 3 byte, 2 cycles, return(float_constant) profits here
1098 replace {
1099         mov  dpl,#0x%1
1100         mov  dph,#0x%2
1101 } by {
1102         ; Peephole 182c   used 16 bit load of dptr
1103         mov  dptr,#0x%2%1
1104 }
1105
1106 // saving 3 byte, 2 cycles, return(float_constant) profits here
1107 replace {
1108         mov  dpl,#%1
1109         mov  dph,#%2
1110 } by {
1111         ; Peephole 182   used 16 bit load of dptr
1112         mov  dptr,#(((%2)<<8) + %1)
1113 }
1114
1115 replace {
1116         anl  %1,#%2
1117         anl  %1,#%3
1118 } by {
1119         ; Peephole 183   avoided anl during execution
1120         anl  %1,#(%2 & %3)
1121 }
1122
1123 replace {
1124         mov  %1,a
1125         cpl  a
1126         mov  %1,a
1127 } by {
1128         ; Peephole 184   removed redundant mov
1129         cpl  a
1130         mov  %1,a
1131 }
1132
1133 replace {
1134 // acc being incremented might cause problems
1135         mov  %1,a
1136         inc  %1
1137 } by {
1138         ; Peephole 185   changed order of increment (acc incremented also!)
1139         inc  a
1140         mov  %1,a
1141 }
1142
1143 replace {
1144         add  a,#%1
1145         mov  dpl,a
1146         clr  a
1147         addc a,#(%1 >> 8)
1148         mov  dph,a
1149         clr  a
1150         movc a,@a+dptr
1151         mov  %2,a
1152         inc  dptr
1153         clr  a
1154         movc a,@a+dptr
1155         mov  %3,a
1156         inc  dptr
1157         clr  a
1158         movc a,@a+dptr
1159         mov  %4,a
1160         inc  dptr
1161         clr  a  
1162 } by {
1163         ; Peephole 186.a   optimized movc sequence
1164         mov  dptr,#%1
1165         mov  b,acc
1166         movc a,@a+dptr
1167         mov  %2,a
1168         mov  acc,b
1169         inc  dptr       
1170         movc a,@a+dptr
1171         mov  %3,a
1172         mov  acc,b
1173         inc  dptr
1174         mov  %4,a
1175         mov  acc,b
1176         inc  dptr
1177 }
1178
1179 replace {
1180         add  a,#%1
1181         mov  dpl,a
1182         clr  a
1183         addc a,#(%1 >> 8)
1184         mov  dph,a
1185         clr  a
1186         movc a,@a+dptr
1187         mov  %2,a
1188         inc  dptr
1189         clr  a
1190         movc a,@a+dptr
1191         mov  %3,a
1192         inc  dptr
1193         clr  a
1194 } by {
1195         ; Peephole 186.b   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         movc a,@a+dptr
1203         mov  %3,a
1204         mov  acc,b
1205         inc  dptr       
1206 }
1207
1208 replace {
1209         add  a,#%1
1210         mov  dpl,a
1211         clr  a
1212         addc a,#(%1 >> 8)
1213         mov  dph,a
1214         clr  a
1215         movc a,@a+dptr
1216         mov  %2,a
1217         inc  dptr
1218         clr  a
1219 } by {
1220         ; Peephole 186.c   optimized movc sequence
1221         mov  dptr,#%1
1222         mov  b,acc
1223         movc a,@a+dptr
1224         mov  %2,a
1225         mov  acc,b
1226         inc  dptr
1227 }
1228
1229 replace {
1230         add  a,#%1
1231         mov  dpl,a
1232         clr  a
1233         addc a,#(%1 >> 8)
1234         mov  dph,a
1235         clr  a
1236         movc a,@a+dptr
1237 } by {
1238         ; Peephole 186   optimized movc sequence
1239         mov  dptr,#%1
1240         movc a,@a+dptr
1241 }
1242
1243 replace {
1244         mov  r%1,%2
1245         anl  ar%1,#%3
1246         mov  a,r%1
1247 } by {
1248         ; Peephole 187   used a instead of ar%1 for anl
1249         mov  a,%2
1250         anl  a,#%3
1251         mov  r%1,a
1252 }
1253
1254 replace {
1255         mov  %1,a
1256         mov  dptr,%2
1257         movc a,@a+dptr
1258         mov  %1,a
1259 } by {
1260         ; Peephole 188   removed redundant mov
1261         mov  dptr,%2
1262         movc a,@a+dptr
1263         mov  %1,a
1264 }
1265
1266 replace {
1267         anl  a,#0x0f
1268         mov  %1,a
1269         mov  a,#0x0f
1270         anl  a,%1
1271 } by {
1272         ; Peephole 189   removed redundant mov and anl
1273         anl  a,#0x0f
1274         mov  %1,a
1275 }
1276
1277 // rules 190 & 191 need to be in order
1278 replace {
1279         mov  a,%1
1280         lcall __gptrput
1281         mov  a,%1
1282 } by {
1283         ; Peephole 190   removed redundant mov
1284         mov  a,%1
1285         lcall __gptrput
1286 }
1287
1288 replace {
1289         mov  %1,a
1290         mov  dpl,%2
1291         mov  dph,%3
1292         mov  b,%4
1293         mov  a,%1
1294 } by {
1295         ; Peephole 191   removed redundant mov
1296         mov  %1,a
1297         mov  dpl,%2
1298         mov  dph,%3
1299         mov  b,%4
1300 }
1301
1302 replace {
1303         mov  r%1,a
1304         mov  @r%2,ar%1
1305 } by {
1306         ; Peephole 192   used a instead of ar%1 as source
1307         mov  r%1,a
1308         mov  @r%2,a
1309 }
1310
1311 replace {
1312         jnz  %3
1313         mov  a,%4
1314         jnz  %3
1315         mov  a,%9
1316         jnz  %3
1317         mov  a,%12
1318         cjne %13,%14,%3
1319         sjmp %7
1320 %3:
1321         sjmp %8
1322 } by {
1323         ; Peephole 193.a optimized misc jump sequence
1324         jnz  %8
1325         mov  a,%4
1326         jnz  %8
1327         mov  a,%9
1328         jnz  %8
1329         mov  a,%12
1330         cjne %13,%14,%8
1331         sjmp %7
1332 ;%3:
1333 } if labelRefCount %3 4
1334
1335 replace {
1336         cjne %1,%2,%3
1337         mov  a,%4
1338         cjne %5,%6,%3
1339         mov  a,%9
1340         cjne %10,%11,%3
1341         mov  a,%12
1342         cjne %13,%14,%3
1343         sjmp %7
1344 %3:
1345         sjmp %8
1346 } by {
1347         ; Peephole 193   optimized misc jump sequence
1348         cjne %1,%2,%8
1349         mov  a,%4
1350         cjne %5,%6,%8
1351         mov  a,%9
1352         cjne %10,%11,%8
1353         mov  a,%12
1354         cjne %13,%14,%8
1355         sjmp %7
1356 ;%3:
1357 } if labelRefCount %3 4
1358
1359 replace {
1360         cjne @%1,%2,%3
1361         inc  %1
1362         cjne @%1,%6,%3
1363         inc  %1
1364         cjne @%1,%11,%3
1365         inc  %1
1366         cjne @%1,%14,%3
1367         sjmp %7
1368 %3:
1369         sjmp %8
1370 } by {
1371         ; Peephole 193.a   optimized misc jump sequence
1372         cjne @%1,%2,%8
1373         inc  %1
1374         cjne @%1,%6,%8
1375         inc  %1
1376         cjne @%1,%11,%8
1377         inc  %1
1378         cjne @%1,%14,%8
1379         sjmp %7
1380 ;%3:
1381 } if labelRefCount %3 4
1382
1383 replace {
1384         cjne %1,%2,%3
1385         cjne %5,%6,%3
1386         cjne %10,%11,%3
1387         cjne %13,%14,%3
1388         sjmp %7
1389 %3:
1390         sjmp %8
1391 } by {
1392         ; Peephole 194   optimized misc jump sequence
1393         cjne %1,%2,%8
1394         cjne %5,%6,%8
1395         cjne %10,%11,%8
1396         cjne %13,%14,%8
1397         sjmp %7
1398 ;%3:
1399 } if labelRefCount %3 4
1400
1401 replace {
1402         jnz  %3
1403         mov  a,%4
1404         jnz  %3
1405         mov  a,%9
1406         cjne %10,%11,%3
1407         sjmp %7
1408 %3:
1409         sjmp %8
1410 } by {
1411         ; Peephole 195.a optimized misc jump sequence
1412         jnz  %8
1413         mov  a,%4
1414         jnz  %8
1415         mov  a,%9
1416         cjne %10,%11,%8
1417         sjmp %7
1418 ;%3:
1419 } if labelRefCount %3 3
1420
1421 replace {
1422         cjne %1,%2,%3
1423         mov  a,%4
1424         cjne %5,%6,%3
1425         mov  a,%9
1426         cjne %10,%11,%3
1427         sjmp %7
1428 %3:
1429         sjmp %8
1430 } by {
1431         ; Peephole 195   optimized misc jump sequence
1432         cjne %1,%2,%8
1433         mov  a,%4
1434         cjne %5,%6,%8
1435         mov  a,%9
1436         cjne %10,%11,%8
1437         sjmp %7
1438 ;%3:
1439 } if labelRefCount %3 3
1440
1441 replace {
1442         cjne @%1,%2,%3
1443         inc  %1
1444         cjne @%1,%6,%3
1445         inc  %1
1446         cjne @%1,%11,%3
1447         sjmp %7
1448 %3:
1449         sjmp %8
1450 } by {
1451         ; Peephole 195.a   optimized misc jump sequence
1452         cjne @%1,%2,%8
1453         inc  %1
1454         cjne @%1,%6,%8
1455         inc  %1
1456         cjne @%1,%11,%8
1457         sjmp %7
1458 ;%3:
1459 } if labelRefCount %3 3
1460
1461 replace {
1462         cjne %1,%2,%3
1463         cjne %5,%6,%3
1464         cjne %10,%11,%3
1465         sjmp %7
1466 %3:
1467         sjmp %8
1468 } by {
1469         ; Peephole 196   optimized misc jump sequence
1470         cjne %1,%2,%8
1471         cjne %5,%6,%8
1472         cjne %10,%11,%8
1473         sjmp %7
1474 ;%3:
1475 } if labelRefCount %3 3
1476
1477 replace {
1478         jnz  %3
1479         mov  a,%4
1480         cjne %5,%6,%3
1481         sjmp %7
1482 %3:
1483         sjmp %8 
1484 } by {
1485         ; Peephole 197.a optimized misc jump sequence
1486         jnz  %8
1487         mov  a,%4
1488         cjne %5,%6,%8
1489         sjmp %7
1490 ;%3:     
1491 } if labelRefCount %3 2
1492
1493 replace {
1494         cjne %1,%2,%3
1495         mov  a,%4
1496         cjne %5,%6,%3
1497         sjmp %7
1498 %3:
1499         sjmp %8
1500 } by {
1501         ; Peephole 197   optimized misc jump sequence
1502         cjne %1,%2,%8
1503         mov  a,%4
1504         cjne %5,%6,%8
1505         sjmp %7
1506 ;%3:
1507 } if labelRefCount %3 2
1508
1509 replace {
1510         cjne @%1,%2,%3
1511         inc  %1
1512         cjne @%1,%6,%3
1513         sjmp %7
1514 %3:
1515         sjmp %8
1516 } by {
1517         ; Peephole 197.a   optimized misc jump sequence
1518         cjne @%1,%2,%8
1519         inc   %1
1520         cjne @%1,%6,%8
1521         sjmp %7
1522 ;%3:
1523 } if labelRefCount %3 2
1524
1525 replace {
1526         cjne %1,%2,%3
1527         cjne %5,%6,%3
1528         sjmp %7
1529 %3:
1530         sjmp %8
1531 } by {
1532         ; Peephole 198   optimized misc jump sequence
1533         cjne %1,%2,%8
1534         cjne %5,%6,%8
1535         sjmp %7
1536 ;%3:
1537 } if labelRefCount %3 2
1538
1539 replace {
1540         cjne %1,%2,%3
1541         sjmp %4
1542 %3:
1543         sjmp %5
1544 } by {
1545         ; Peephole 199   optimized misc jump sequence
1546         cjne %1,%2,%5
1547         sjmp %4
1548 ;%3:
1549 } if labelRefCount %3 1
1550
1551 replace {
1552         sjmp %1
1553 %1:
1554 } by {
1555         ; Peephole 200   removed redundant sjmp
1556 %1:
1557 }
1558
1559 replace {
1560         sjmp %1
1561 %2:
1562 %1:
1563 } by {
1564         ; Peephole 201   removed redundant sjmp
1565 %2:
1566 %1:
1567 }
1568
1569 replace {
1570         push  acc
1571         mov   dptr,%1
1572         pop   acc
1573 } by {
1574         ; Peephole 202   removed redundant push pop
1575         mov   dptr,%1
1576 }
1577
1578 replace {
1579         mov  r%1,_spx
1580         lcall %2
1581         mov  r%1,_spx
1582 } by {
1583         ; Peephole 203   removed mov  r%1,_spx
1584         lcall %2
1585 }
1586
1587 replace {
1588         mov  %1,a
1589         add  a,acc
1590         mov  %1,a
1591 } by {
1592         ; Peephole 204   removed redundant mov
1593         add  a,acc
1594         mov  %1,a
1595 }
1596
1597 replace {
1598         djnz %1,%2
1599         sjmp  %3
1600 %2:
1601         sjmp  %4
1602 %3:
1603 } by {
1604         ; Peephole 205   optimized misc jump sequence
1605         djnz %1,%4
1606 %2:
1607 %3:
1608 } if labelRefCount %2 1
1609
1610 replace {
1611         mov  %1,%1
1612 } by {
1613         ; Peephole 206   removed redundant mov %1,%1
1614 }
1615
1616 replace {
1617         mov  a,_bp
1618         add  a,#0x00
1619         mov  %1,a
1620 } by {
1621         ; Peephole 207   removed zero add (acc not set to %1, flags undefined)
1622         mov  %1,_bp
1623 }
1624
1625 replace {
1626         push  acc
1627         mov   r%1,_bp
1628         pop   acc
1629 } by {
1630         ; Peephole 208   removed redundant push pop
1631         mov   r%1,_bp
1632 }
1633
1634 replace {
1635         mov  a,_bp
1636         add  a,#0x00
1637         inc  a
1638         mov  %1,a
1639 } by {
1640         ; Peephole 209   optimized increment (acc not set to %1, flags undefined)
1641         mov  %1,_bp
1642         inc  %1
1643 }
1644
1645 replace {
1646         mov  dptr,#((((%1 >> 16)) <<16) + (((%1 >> 8)) <<8) + %1)
1647 } by {
1648         ; Peephole 210a   simplified expression
1649         mov  dptr,#%1
1650 } if 24bitMode
1651
1652 replace {
1653         mov  dptr,#((((%1 >> 8)) <<8) + %1)
1654 } by {
1655         ; Peephole 210   simplified expression
1656         mov  dptr,#%1
1657 }
1658
1659 replace restart {
1660         push ar%1
1661         pop  ar%1
1662 } by {
1663         ; Peephole 211   removed redundant push r%1 pop r%1  
1664
1665
1666 replace {
1667         mov  a,_bp
1668         add  a,#0x01
1669         mov  r%1,a
1670 } by {
1671         ; Peephole 212  reduced add sequence to inc
1672         mov  r%1,_bp
1673         inc  r%1
1674 }
1675
1676 replace {
1677         mov  %1,#(( %2 >> 8 ) ^ 0x80)
1678 } by {  
1679         mov  %1,#(%2 >> 8)
1680         xrl  %1,#0x80
1681 } if portIsDS390
1682
1683 replace {
1684         mov  %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1685 } by {  
1686         mov  %1,#((%2 + %3) >> 8)
1687         xrl  %1,#0x80
1688 } if portIsDS390
1689
1690 replace  {
1691         mov  %1,a
1692         mov  a,%2
1693         add  a,%1
1694 } by {
1695         ; Peephole 214 reduced some extra movs
1696         mov  %1,a
1697         add  a,%2       
1698 } if operandsNotSame
1699
1700 replace {
1701         mov  %1,a
1702         add  a,%2
1703         mov  %1,a
1704 } by {
1705         ; Peephole 215 removed some movs
1706         add  a,%2
1707         mov  %1,a
1708 } if operandsNotSame
1709
1710 replace {
1711         mov   r%1,%2
1712         clr   a
1713         inc   r%1
1714         mov   @r%1,a
1715         dec   r%1
1716         mov   @r%1,a
1717 } by {
1718         ; Peephole 216 simplified clear (2bytes)
1719         mov   r%1,%2
1720         clr   a
1721         mov   @r%1,a
1722         inc   r%1
1723         mov   @r%1,a
1724 }
1725
1726 replace {
1727         mov   r%1,%2
1728         clr   a
1729         inc   r%1
1730         inc   r%1
1731         mov   @r%1,a
1732         dec   r%1
1733         mov   @r%1,a
1734         dec   r%1
1735         mov   @r%1,a
1736 } by {
1737         ; Peephole 217 simplified clear (3bytes)
1738         mov   r%1,%2
1739         clr   a
1740         mov   @r%1,a
1741         inc   r%1
1742         mov   @r%1,a
1743         inc   r%1
1744         mov   @r%1,a
1745 }
1746
1747 replace {
1748         mov   r%1,%2
1749         clr   a
1750         inc   r%1
1751         inc   r%1
1752         inc   r%1
1753         mov   @r%1,a
1754         dec   r%1
1755         mov   @r%1,a
1756         dec   r%1
1757         mov   @r%1,a
1758         dec   r%1
1759         mov   @r%1,a
1760 } by {
1761         ; Peephole 218 simplified clear (4bytes)
1762         mov   r%1,%2
1763         clr   a
1764         mov   @r%1,a
1765         inc   r%1
1766         mov   @r%1,a
1767         inc   r%1
1768         mov   @r%1,a
1769         inc   r%1
1770         mov   @r%1,a
1771 }
1772
1773 replace {
1774         clr   a
1775         movx  @dptr,a
1776         mov   dptr,%1
1777         clr   a
1778         movx  @dptr,a
1779 } by {
1780         ; Peephole 219 removed redundant clear
1781         clr   a
1782         movx  @dptr,a
1783         mov   dptr,%1
1784         movx  @dptr,a
1785 }
1786
1787 replace {
1788         clr   a
1789         movx  @dptr,a
1790         mov   dptr,%1
1791         movx  @dptr,a
1792         mov   dptr,%2
1793         clr   a
1794         movx  @dptr,a
1795 } by {
1796         ; Peephole 219a removed redundant clear
1797         clr   a
1798         movx  @dptr,a
1799         mov   dptr,%1
1800         movx  @dptr,a
1801         mov   dptr,%2
1802         movx  @dptr,a
1803 }
1804
1805 replace {
1806         mov     dps, #0
1807         mov     dps, #1
1808 } by {
1809         ; Peephole 220a removed bogus DPS set
1810         mov     dps, #1
1811 }
1812
1813 replace {
1814         mov     dps, #1
1815         mov     dps, #0
1816 } by {
1817         ; Peephole 220b removed bogus DPS set
1818         mov     dps, #0
1819 }
1820
1821 replace {
1822         mov     dps, #0
1823         mov     dps, #0x01
1824 } by {
1825         ; Peephole 220c removed bogus DPS set
1826 }
1827
1828 replace {
1829         mov     dps,#1
1830         inc     dptr
1831         mov     dps,#1
1832 } by {
1833         ; Peephole 220d removed bogus DPS set
1834         mov     dps,#1
1835         inc     dptr
1836 }
1837
1838 replace {
1839         mov     %1 + %2,(%2 + %1)
1840 } by {
1841         ; Peephole 221a remove redundant move
1842 }
1843
1844 replace {
1845         mov     (%1 + %2 + %3),((%2 + %1) + %3)
1846 } by {
1847         ; Peephole 221b remove redundant move
1848 }
1849
1850 replace {
1851         dec     r%1
1852         inc     r%1
1853 } by {
1854         ; removed dec/inc pair
1855 }
1856
1857 replace {
1858         mov     dps, #0
1859         mov     %1,a
1860         mov     dps, #1
1861 } by {
1862         ; Peephole 222 removed DPS abuse.
1863         mov     %1,a
1864         mov     dps, #1
1865 }
1866
1867 replace {
1868         mov     dps, #0
1869         xch     a, ap
1870         mov     %1, ap
1871         mov     dps, #1
1872 } by {
1873         ; Peephole 222a removed DPS abuse.
1874         xch     a, ap
1875         mov     %1, ap
1876         mov     dps, #1
1877 }
1878
1879 replace {
1880         mov     dps, #%1
1881         inc     dptr
1882         movx    a,@dptr
1883         mov     %2,a
1884         mov     dps, #%1
1885 } by {
1886         mov     dps, #%1
1887         inc     dptr
1888         movx    a,@dptr
1889         mov     %2,a
1890 ; Peephole 223: yet more DPS abuse removed.
1891 }
1892
1893 replace {
1894         mov     dps, #0
1895         inc     dps
1896 } by {
1897         mov     dps, #1
1898 }
1899
1900 replace {
1901         mov     dps, #%1
1902         mov     dptr, %2
1903         mov     dps, #%1
1904 } by {
1905         mov     dps, #%1
1906         mov     dptr, %2
1907 }
1908
1909 replace {
1910         mov     dps, #1
1911         mov     dptr, %1
1912         mov     dps, #0
1913         mov     dptr, %2
1914         inc     dps
1915 } by {
1916         mov     dps, #0
1917         mov     dptr, %2
1918         inc     dps
1919         mov     dptr, %1
1920 ; Peephole 224a: DPS usage re-arranged.
1921 }
1922
1923 replace {
1924         mov     dps, #%1
1925         mov     dptr, %2
1926         mov     dps, #%3
1927         mov     dptr, %4
1928         mov     dps, #%1
1929 } by {
1930         mov     dps, #%3
1931         mov     dptr, %4
1932         mov     dps, #%1
1933         mov     dptr, %2
1934 ; Peephole 224: DPS usage re-arranged.
1935 }
1936
1937 replace {
1938         mov     dps, #1
1939         mov     dptr, %1
1940         mov     dps, #0
1941 } by {
1942         mov     dps, #1
1943         mov     dptr, %1
1944         dec     dps
1945 }
1946
1947 replace {
1948         xch     a, ap
1949         add     a, ap
1950 } by {
1951         add     a, ap
1952 }
1953
1954 replace {
1955         xch     a, ap
1956         addc    a, ap
1957 } by {
1958         addc    a, ap
1959 }
1960
1961 replace {
1962         inc     dps
1963         mov     dps, #%1
1964 } by {
1965         mov     dps, #%1
1966 }
1967
1968 replace {
1969         dec     dps
1970         mov     dps, #%1
1971 } by {
1972         mov     dps, #%1
1973 }
1974
1975
1976 replace {
1977         add     a,#%2
1978         mov     dpl,a
1979         clr  a
1980         addc    a,#(%2 >> 8)
1981         mov     dph,a
1982         clr  a
1983         addc    a,#(%2 >> 16)
1984         mov     dpx,a
1985         clr     a
1986         movc    a,@a+dptr
1987 } by {
1988         ; Peephole 227.a movc optimize
1989         mov     dptr,#%2
1990         movc    a,@a+dptr
1991 }
1992
1993 replace {
1994         mov     r%1,%2
1995         mov     ar%1,%3
1996 } by {
1997         ; Peephole 228 redundant move
1998         mov     ar%1,%3
1999 }
2000
2001 replace {
2002         mov     r%1,a
2003         dec     r%1
2004         mov     a,r%1
2005 } by {
2006         ; Peephole 229.a redundant move
2007         dec     a
2008         mov     r%1,a
2009 }
2010
2011 replace {
2012         mov     r%1,a
2013         mov     r%2,b
2014         mov     a,r%1
2015 } by {
2016         ; Peephole 229.b redundant move
2017         mov     r%1,a
2018         mov     r%2,b
2019 }
2020
2021 replace {
2022         mov     r%1,a
2023         mov     r%2,b
2024         add     a,#%3
2025         mov     r%1,a
2026         mov     a,r%2
2027         addc    a,#(%3 >> 8)
2028         mov     r%2,a
2029 } by {
2030         ; Peephole 229.c redundant move
2031         add     a,#%3
2032         mov     r%1,a
2033         mov     a,b
2034         addc    a,#(%3 >> 8)
2035         mov     r%2,a
2036 }
2037
2038 replace {
2039         mov     a,%1
2040         mov     b,a
2041         movx    a,%2
2042 } by {
2043         ; Peephole 229.d redundant move
2044         mov     b,%1
2045         movx    a,%2
2046 }
2047
2048 replace {
2049         mov     dpl,r%1
2050         mov     dph,r%2
2051         mov     dpx,r%3
2052         movx    a,@dptr
2053         mov     r%4,a
2054         add     a,#0x01 
2055         mov     r%5,a
2056         mov     dpl,r%1
2057         mov     dph,r%2
2058         mov     dpx,r%3
2059         movx    @dptr,a
2060 } by {
2061         ; Peephole 230.a save reload dptr
2062         mov     dpl,r%1
2063         mov     dph,r%2
2064         mov     dpx,r%3
2065         movx    a,@dptr
2066         mov     r%4,a
2067         add     a,#0x01 
2068         mov     r%5,a
2069         movx    @dptr,a
2070 }
2071
2072 replace {
2073         mov     dpl,r%1
2074         mov     dph,r%2
2075         mov     dpx,r%3
2076         movx    a,@dptr
2077         mov     r%4,a
2078         dec     r%4
2079         mov     dpl,r%1
2080         mov     dph,r%2
2081         mov     dpx,r%3
2082         mov     a,r%4
2083         movx    @dptr,a
2084 } by {
2085         ; Peephole 230.b save reload dptr
2086         mov     dpl,r%1
2087         mov     dph,r%2
2088         mov     dpx,r%3
2089         movx    a,@dptr
2090         dec     a
2091         mov     r%4,a
2092         movx    @dptr,a
2093 }
2094
2095 replace {
2096         mov     dpl,r%1
2097         mov     dph,r%2
2098         mov     dpx,r%3
2099         movx    a,@dptr
2100         inc     a
2101         mov     r%4,a
2102         mov     dpl,r%1
2103         mov     dph,r%2
2104         mov     dpx,r%3
2105         mov     a,r%4
2106         movx    @dptr,a
2107 } by {
2108         ; Peephole 230.c save reload dptr
2109         mov     dpl,r%1
2110         mov     dph,r%2
2111         mov     dpx,r%3
2112         movx    a,@dptr
2113         inc     a
2114         mov     r%4,a
2115         movx    @dptr,a
2116 }
2117         
2118 replace {
2119         mov     r%1,dpl
2120         mov     r%2,dph
2121         mov     r%3,dpx
2122         mov     dpl,r%1
2123         mov     dph,r%2
2124         mov     dpx,r%3
2125 } by {
2126         ; Peephole 230.d save reload dptr
2127         mov     r%1,dpl
2128         mov     r%2,dph
2129         mov     r%3,dpx
2130 }
2131
2132 replace {
2133         mov     dpl,r%1
2134         mov     dph,r%2
2135         mov     dpx,r%3
2136         movx    a,@dptr
2137         mov     r%4,a
2138         orl     ar%4,#%5
2139         mov     dpl,r%1
2140         mov     dph,r%2
2141         mov     dpx,r%3
2142         mov     a,r1
2143         movx    @dptr,a
2144 } by {
2145         ; Peephole 230.e save reload dptr
2146         mov     dpl,r%1
2147         mov     dph,r%2
2148         mov     dpx,r%3
2149         movx    a,@dptr
2150         orl     a,#%5
2151         mov     r%4,a
2152         movx    @dptr,a
2153 }
2154         
2155 replace {
2156         mov     dpl,r%1
2157         mov     dph,r%2
2158         mov     dpx,r%3
2159         movx    a,@dptr
2160         mov     r%4,a
2161         anl     ar%4,#%5
2162         mov     dpl,r%1
2163         mov     dph,r%2
2164         mov     dpx,r%3
2165         mov     a,r1
2166         movx    @dptr,a
2167 } by {
2168         ; Peephole 230.e save reload dptr
2169         mov     dpl,r%1
2170         mov     dph,r%2
2171         mov     dpx,r%3
2172         movx    a,@dptr
2173         anl     a,#%5
2174         mov     r%4,a
2175         movx    @dptr,a
2176 }
2177
2178 replace {
2179         mov     r%1,dpl
2180         mov     r%2,dph
2181         mov     r%3,dpx
2182         mov     a,r%4
2183         inc     dps
2184         movx    @dptr,a
2185         inc     dptr
2186         mov     dps,#0
2187         mov     dpl,r%1
2188         mov     dph,r%2
2189         mov     dpx,r%3
2190 } by {
2191         ; Peephole 230.f save reload dptr
2192         mov     r%1,dpl
2193         mov     r%2,dph
2194         mov     r%3,dpx
2195         mov     a,r%4
2196         inc     dps
2197         movx    @dptr,a
2198         inc     dptr
2199         mov     dps,#0
2200 }
2201         
2202 replace {
2203         mov     ar%1,r%2
2204         mov     ar%3,r%1
2205         mov     r%1,#0x00
2206         mov     ar%2,r%4
2207         mov     r3,#0x00
2208 } by {
2209         ; Peephole 231.a simplified moves
2210         mov     ar%3,r%2
2211         mov     ar%2,r%4
2212         mov     r%4,#0
2213         mov     r%1,#0
2214 }
2215
2216 replace {
2217         mov     r%1,#0
2218         mov     r%2,#0
2219         mov     a,r%2
2220         orl     a,r%3
2221         mov     %4,a
2222         mov     a,r%5
2223         orl     a,r%1
2224         mov     %6,a
2225 } by {
2226         ; Peephole 231.b simplified or
2227         mov     r%1,#0
2228         mov     r%2,#0
2229         mov     a,r%3
2230         mov     %4,a
2231         mov     a,r%5
2232         mov     %6,a
2233 }
2234
2235 replace {
2236         mov     a,r%1
2237         mov     b,r%2
2238         mov     r%1,b
2239         mov     r%2,a
2240 } by {
2241         ; Peehole 232.a simplified xch
2242         mov     a,r%1
2243         xch     a,r%2
2244         mov     r%1,a
2245 }
2246
2247 replace {
2248         mov     a,#%1
2249         mov     b,#%2
2250         mov     r%3,b
2251         mov     r%4,a
2252 } by {
2253         ; Peehole 232.b simplified xch
2254         mov     r%3,#%2
2255         mov     r%4,#%1
2256 }
2257
2258 replace {
2259         mov     dpl1,#%1
2260         mov     dph1,#(%1 >> 8)
2261         mov     dpx1,#(%1 >> 16)
2262 } by {
2263         ; Peephole 233 24 bit load of dptr1
2264         inc     dps
2265         mov     dptr,#%1
2266         dec     dps
2267
2268
2269 // 14 rules by Fiorenzo D. Ramaglia <fd.ramaglia@tin.it>
2270
2271 replace {
2272         add  a,ar%1
2273 } by {
2274         ; Peephole 236a
2275         add  a,r%1
2276 }
2277
2278 replace {
2279         addc  a,ar%1
2280 } by {
2281         ; Peephole 236b
2282         addc  a,r%1
2283 }
2284
2285 replace {
2286         anl  a,ar%1
2287 } by {
2288         ; Peephole 236c
2289         anl  a,r%1
2290 }
2291
2292 replace {
2293         dec  ar%1
2294 } by {
2295         ; Peephole 236d
2296         dec  r%1
2297 }
2298
2299 replace {
2300         djnz  ar%1,%2
2301 } by {
2302         ; Peephole 236e
2303         djnz  r%1,%2
2304 }
2305
2306 replace {
2307         inc  ar%1
2308 } by {
2309         ; Peephole 236f
2310         inc  r%1
2311 }
2312
2313 replace {
2314         mov  a,ar%1
2315 } by {
2316         ; Peephole 236g
2317         mov  a,r%1
2318 }
2319
2320 replace {
2321         mov  ar%1,#%2
2322 } by {
2323         ; Peephole 236h
2324         mov  r%1,#%2
2325 }
2326
2327 replace {
2328         mov  ar%1,a
2329 } by {
2330         ; Peephole 236i
2331         mov  r%1,a
2332 }
2333
2334 replace {
2335         mov  ar%1,ar%2
2336 } by {
2337         ; Peephole 236j
2338         mov  r%1,ar%2
2339 }
2340
2341 replace {
2342         orl  a,ar%1
2343 } by {
2344         ; Peephole 236k
2345         orl  a,r%1
2346 }
2347
2348 replace {
2349         subb  a,ar%1
2350 } by {
2351         ; Peephole 236l
2352         subb  a,r%1
2353 }
2354
2355 replace {
2356         xch  a,ar%1
2357 } by {
2358         ; Peephole 236m
2359         xch  a,r%1
2360 }
2361
2362 replace {
2363         xrl  a,ar%1
2364 } by {
2365         ; Peephole 236n
2366         xrl  a,r%1
2367 }
2368
2369 replace {
2370         sjmp    %1
2371 %2:
2372         mov     %3,%4
2373 %5:
2374         ret
2375 } by {
2376         ; Peephole 237a  removed sjmp to ret
2377         ret
2378 %2:
2379         mov     %3,%4
2380 %1:
2381         ret
2382 }
2383
2384 replace {
2385         sjmp    %1
2386 %2:
2387         mov     %3,%4
2388         mov     dpl,%6
2389         mov     dph,%7
2390 %5:
2391         ret
2392 } by {
2393         ; Peephole 237b  removed sjmp to ret
2394         ret
2395 %2:
2396         mov     %3,%4
2397         mov     dpl,%6
2398         mov     dph,%7
2399 %1:
2400         ret
2401 }