src/ds390/peeph.def: fix bug #704878: added rule 213.b suggested by Jan Rejlek
[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         ; Peephole 213.a inserted fix
1680         mov  %1,#(%2 >> 8)
1681         xrl  %1,#0x80
1682 } if portIsDS390
1683
1684 replace {
1685         mov  %1,#(( %2 >> 16 ) ^ 0x80)
1686 } by {
1687         ; Peephole 213.b inserted fix
1688         mov  %1,#(%2 >> 16)
1689         xrl  %1,#0x80
1690 } if portIsDS390
1691
1692 replace {
1693         mov  %1,#(( %2 + %3 >> 8 ) ^ 0x80)
1694 } by {  
1695         ; Peephole 213.c inserted fix
1696         mov  %1,#((%2 + %3) >> 8)
1697         xrl  %1,#0x80
1698 } if portIsDS390
1699
1700 replace  {
1701         mov  %1,a
1702         mov  a,%2
1703         add  a,%1
1704 } by {
1705         ; Peephole 214 reduced some extra movs
1706         mov  %1,a
1707         add  a,%2       
1708 } if operandsNotSame
1709
1710 replace {
1711         mov  %1,a
1712         add  a,%2
1713         mov  %1,a
1714 } by {
1715         ; Peephole 215 removed some movs
1716         add  a,%2
1717         mov  %1,a
1718 } if operandsNotSame
1719
1720 replace {
1721         mov   r%1,%2
1722         clr   a
1723         inc   r%1
1724         mov   @r%1,a
1725         dec   r%1
1726         mov   @r%1,a
1727 } by {
1728         ; Peephole 216 simplified clear (2bytes)
1729         mov   r%1,%2
1730         clr   a
1731         mov   @r%1,a
1732         inc   r%1
1733         mov   @r%1,a
1734 }
1735
1736 replace {
1737         mov   r%1,%2
1738         clr   a
1739         inc   r%1
1740         inc   r%1
1741         mov   @r%1,a
1742         dec   r%1
1743         mov   @r%1,a
1744         dec   r%1
1745         mov   @r%1,a
1746 } by {
1747         ; Peephole 217 simplified clear (3bytes)
1748         mov   r%1,%2
1749         clr   a
1750         mov   @r%1,a
1751         inc   r%1
1752         mov   @r%1,a
1753         inc   r%1
1754         mov   @r%1,a
1755 }
1756
1757 replace {
1758         mov   r%1,%2
1759         clr   a
1760         inc   r%1
1761         inc   r%1
1762         inc   r%1
1763         mov   @r%1,a
1764         dec   r%1
1765         mov   @r%1,a
1766         dec   r%1
1767         mov   @r%1,a
1768         dec   r%1
1769         mov   @r%1,a
1770 } by {
1771         ; Peephole 218 simplified clear (4bytes)
1772         mov   r%1,%2
1773         clr   a
1774         mov   @r%1,a
1775         inc   r%1
1776         mov   @r%1,a
1777         inc   r%1
1778         mov   @r%1,a
1779         inc   r%1
1780         mov   @r%1,a
1781 }
1782
1783 replace {
1784         clr   a
1785         movx  @dptr,a
1786         mov   dptr,%1
1787         clr   a
1788         movx  @dptr,a
1789 } by {
1790         ; Peephole 219 removed redundant clear
1791         clr   a
1792         movx  @dptr,a
1793         mov   dptr,%1
1794         movx  @dptr,a
1795 }
1796
1797 replace {
1798         clr   a
1799         movx  @dptr,a
1800         mov   dptr,%1
1801         movx  @dptr,a
1802         mov   dptr,%2
1803         clr   a
1804         movx  @dptr,a
1805 } by {
1806         ; Peephole 219a removed redundant clear
1807         clr   a
1808         movx  @dptr,a
1809         mov   dptr,%1
1810         movx  @dptr,a
1811         mov   dptr,%2
1812         movx  @dptr,a
1813 }
1814
1815 replace {
1816         mov     dps, #0
1817         mov     dps, #1
1818 } by {
1819         ; Peephole 220a removed bogus DPS set
1820         mov     dps, #1
1821 }
1822
1823 replace {
1824         mov     dps, #1
1825         mov     dps, #0
1826 } by {
1827         ; Peephole 220b removed bogus DPS set
1828         mov     dps, #0
1829 }
1830
1831 replace {
1832         mov     dps, #0
1833         mov     dps, #0x01
1834 } by {
1835         ; Peephole 220c removed bogus DPS set
1836 }
1837
1838 replace {
1839         mov     dps,#1
1840         inc     dptr
1841         mov     dps,#1
1842 } by {
1843         ; Peephole 220d removed bogus DPS set
1844         mov     dps,#1
1845         inc     dptr
1846 }
1847
1848 replace {
1849         mov     %1 + %2,(%2 + %1)
1850 } by {
1851         ; Peephole 221a remove redundant move
1852 }
1853
1854 replace {
1855         mov     (%1 + %2 + %3),((%2 + %1) + %3)
1856 } by {
1857         ; Peephole 221b remove redundant move
1858 }
1859
1860 replace {
1861         dec     r%1
1862         inc     r%1
1863 } by {
1864         ; removed dec/inc pair
1865 }
1866
1867 replace {
1868         mov     dps, #0
1869         mov     %1,a
1870         mov     dps, #1
1871 } by {
1872         ; Peephole 222 removed DPS abuse.
1873         mov     %1,a
1874         mov     dps, #1
1875 }
1876
1877 replace {
1878         mov     dps, #0
1879         xch     a, ap
1880         mov     %1, ap
1881         mov     dps, #1
1882 } by {
1883         ; Peephole 222a removed DPS abuse.
1884         xch     a, ap
1885         mov     %1, ap
1886         mov     dps, #1
1887 }
1888
1889 replace {
1890         mov     dps, #%1
1891         inc     dptr
1892         movx    a,@dptr
1893         mov     %2,a
1894         mov     dps, #%1
1895 } by {
1896         mov     dps, #%1
1897         inc     dptr
1898         movx    a,@dptr
1899         mov     %2,a
1900 ; Peephole 223: yet more DPS abuse removed.
1901 }
1902
1903 replace {
1904         mov     dps, #0
1905         inc     dps
1906 } by {
1907         mov     dps, #1
1908 }
1909
1910 replace {
1911         mov     dps, #%1
1912         mov     dptr, %2
1913         mov     dps, #%1
1914 } by {
1915         mov     dps, #%1
1916         mov     dptr, %2
1917 }
1918
1919 replace {
1920         mov     dps, #1
1921         mov     dptr, %1
1922         mov     dps, #0
1923         mov     dptr, %2
1924         inc     dps
1925 } by {
1926         mov     dps, #0
1927         mov     dptr, %2
1928         inc     dps
1929         mov     dptr, %1
1930 ; Peephole 224a: DPS usage re-arranged.
1931 }
1932
1933 replace {
1934         mov     dps, #%1
1935         mov     dptr, %2
1936         mov     dps, #%3
1937         mov     dptr, %4
1938         mov     dps, #%1
1939 } by {
1940         mov     dps, #%3
1941         mov     dptr, %4
1942         mov     dps, #%1
1943         mov     dptr, %2
1944 ; Peephole 224: DPS usage re-arranged.
1945 }
1946
1947 replace {
1948         mov     dps, #1
1949         mov     dptr, %1
1950         mov     dps, #0
1951 } by {
1952         mov     dps, #1
1953         mov     dptr, %1
1954         dec     dps
1955 }
1956
1957 replace {
1958         xch     a, ap
1959         add     a, ap
1960 } by {
1961         add     a, ap
1962 }
1963
1964 replace {
1965         xch     a, ap
1966         addc    a, ap
1967 } by {
1968         addc    a, ap
1969 }
1970
1971 replace {
1972         inc     dps
1973         mov     dps, #%1
1974 } by {
1975         mov     dps, #%1
1976 }
1977
1978 replace {
1979         dec     dps
1980         mov     dps, #%1
1981 } by {
1982         mov     dps, #%1
1983 }
1984
1985
1986 replace {
1987         add     a,#%2
1988         mov     dpl,a
1989         clr  a
1990         addc    a,#(%2 >> 8)
1991         mov     dph,a
1992         clr  a
1993         addc    a,#(%2 >> 16)
1994         mov     dpx,a
1995         clr     a
1996         movc    a,@a+dptr
1997 } by {
1998         ; Peephole 227.a movc optimize
1999         mov     dptr,#%2
2000         movc    a,@a+dptr
2001 }
2002
2003 replace {
2004         mov     r%1,%2
2005         mov     ar%1,%3
2006 } by {
2007         ; Peephole 228 redundant move
2008         mov     ar%1,%3
2009 }
2010
2011 replace {
2012         mov     r%1,a
2013         dec     r%1
2014         mov     a,r%1
2015 } by {
2016         ; Peephole 229.a redundant move
2017         dec     a
2018         mov     r%1,a
2019 }
2020
2021 replace {
2022         mov     r%1,a
2023         mov     r%2,b
2024         mov     a,r%1
2025 } by {
2026         ; Peephole 229.b redundant move
2027         mov     r%1,a
2028         mov     r%2,b
2029 }
2030
2031 replace {
2032         mov     r%1,a
2033         mov     r%2,b
2034         add     a,#%3
2035         mov     r%1,a
2036         mov     a,r%2
2037         addc    a,#(%3 >> 8)
2038         mov     r%2,a
2039 } by {
2040         ; Peephole 229.c redundant move
2041         add     a,#%3
2042         mov     r%1,a
2043         mov     a,b
2044         addc    a,#(%3 >> 8)
2045         mov     r%2,a
2046 }
2047
2048 replace {
2049         mov     a,%1
2050         mov     b,a
2051         movx    a,%2
2052 } by {
2053         ; Peephole 229.d redundant move
2054         mov     b,%1
2055         movx    a,%2
2056 }
2057
2058 replace {
2059         mov     dpl,r%1
2060         mov     dph,r%2
2061         mov     dpx,r%3
2062         movx    a,@dptr
2063         mov     r%4,a
2064         add     a,#0x01 
2065         mov     r%5,a
2066         mov     dpl,r%1
2067         mov     dph,r%2
2068         mov     dpx,r%3
2069         movx    @dptr,a
2070 } by {
2071         ; Peephole 230.a save reload dptr
2072         mov     dpl,r%1
2073         mov     dph,r%2
2074         mov     dpx,r%3
2075         movx    a,@dptr
2076         mov     r%4,a
2077         add     a,#0x01 
2078         mov     r%5,a
2079         movx    @dptr,a
2080 }
2081
2082 replace {
2083         mov     dpl,r%1
2084         mov     dph,r%2
2085         mov     dpx,r%3
2086         movx    a,@dptr
2087         mov     r%4,a
2088         dec     r%4
2089         mov     dpl,r%1
2090         mov     dph,r%2
2091         mov     dpx,r%3
2092         mov     a,r%4
2093         movx    @dptr,a
2094 } by {
2095         ; Peephole 230.b save reload dptr
2096         mov     dpl,r%1
2097         mov     dph,r%2
2098         mov     dpx,r%3
2099         movx    a,@dptr
2100         dec     a
2101         mov     r%4,a
2102         movx    @dptr,a
2103 }
2104
2105 replace {
2106         mov     dpl,r%1
2107         mov     dph,r%2
2108         mov     dpx,r%3
2109         movx    a,@dptr
2110         inc     a
2111         mov     r%4,a
2112         mov     dpl,r%1
2113         mov     dph,r%2
2114         mov     dpx,r%3
2115         mov     a,r%4
2116         movx    @dptr,a
2117 } by {
2118         ; Peephole 230.c save reload dptr
2119         mov     dpl,r%1
2120         mov     dph,r%2
2121         mov     dpx,r%3
2122         movx    a,@dptr
2123         inc     a
2124         mov     r%4,a
2125         movx    @dptr,a
2126 }
2127         
2128 replace {
2129         mov     r%1,dpl
2130         mov     r%2,dph
2131         mov     r%3,dpx
2132         mov     dpl,r%1
2133         mov     dph,r%2
2134         mov     dpx,r%3
2135 } by {
2136         ; Peephole 230.d save reload dptr
2137         mov     r%1,dpl
2138         mov     r%2,dph
2139         mov     r%3,dpx
2140 }
2141
2142 replace {
2143         mov     dpl,r%1
2144         mov     dph,r%2
2145         mov     dpx,r%3
2146         movx    a,@dptr
2147         mov     r%4,a
2148         orl     ar%4,#%5
2149         mov     dpl,r%1
2150         mov     dph,r%2
2151         mov     dpx,r%3
2152         mov     a,r1
2153         movx    @dptr,a
2154 } by {
2155         ; Peephole 230.e save reload dptr
2156         mov     dpl,r%1
2157         mov     dph,r%2
2158         mov     dpx,r%3
2159         movx    a,@dptr
2160         orl     a,#%5
2161         mov     r%4,a
2162         movx    @dptr,a
2163 }
2164         
2165 replace {
2166         mov     dpl,r%1
2167         mov     dph,r%2
2168         mov     dpx,r%3
2169         movx    a,@dptr
2170         mov     r%4,a
2171         anl     ar%4,#%5
2172         mov     dpl,r%1
2173         mov     dph,r%2
2174         mov     dpx,r%3
2175         mov     a,r1
2176         movx    @dptr,a
2177 } by {
2178         ; Peephole 230.e save reload dptr
2179         mov     dpl,r%1
2180         mov     dph,r%2
2181         mov     dpx,r%3
2182         movx    a,@dptr
2183         anl     a,#%5
2184         mov     r%4,a
2185         movx    @dptr,a
2186 }
2187
2188 replace {
2189         mov     r%1,dpl
2190         mov     r%2,dph
2191         mov     r%3,dpx
2192         mov     a,r%4
2193         inc     dps
2194         movx    @dptr,a
2195         inc     dptr
2196         mov     dps,#0
2197         mov     dpl,r%1
2198         mov     dph,r%2
2199         mov     dpx,r%3
2200 } by {
2201         ; Peephole 230.f save reload dptr
2202         mov     r%1,dpl
2203         mov     r%2,dph
2204         mov     r%3,dpx
2205         mov     a,r%4
2206         inc     dps
2207         movx    @dptr,a
2208         inc     dptr
2209         mov     dps,#0
2210 }
2211         
2212 replace {
2213         mov     ar%1,r%2
2214         mov     ar%3,r%1
2215         mov     r%1,#0x00
2216         mov     ar%2,r%4
2217         mov     r3,#0x00
2218 } by {
2219         ; Peephole 231.a simplified moves
2220         mov     ar%3,r%2
2221         mov     ar%2,r%4
2222         mov     r%4,#0
2223         mov     r%1,#0
2224 }
2225
2226 replace {
2227         mov     r%1,#0
2228         mov     r%2,#0
2229         mov     a,r%2
2230         orl     a,r%3
2231         mov     %4,a
2232         mov     a,r%5
2233         orl     a,r%1
2234         mov     %6,a
2235 } by {
2236         ; Peephole 231.b simplified or
2237         mov     r%1,#0
2238         mov     r%2,#0
2239         mov     a,r%3
2240         mov     %4,a
2241         mov     a,r%5
2242         mov     %6,a
2243 }
2244
2245 replace {
2246         mov     a,r%1
2247         mov     b,r%2
2248         mov     r%1,b
2249         mov     r%2,a
2250 } by {
2251         ; Peehole 232.a simplified xch
2252         mov     a,r%1
2253         xch     a,r%2
2254         mov     r%1,a
2255 }
2256
2257 replace {
2258         mov     a,#%1
2259         mov     b,#%2
2260         mov     r%3,b
2261         mov     r%4,a
2262 } by {
2263         ; Peehole 232.b simplified xch
2264         mov     r%3,#%2
2265         mov     r%4,#%1
2266 }
2267
2268 replace {
2269         mov     dpl1,#%1
2270         mov     dph1,#(%1 >> 8)
2271         mov     dpx1,#(%1 >> 16)
2272 } by {
2273         ; Peephole 233 24 bit load of dptr1
2274         inc     dps
2275         mov     dptr,#%1
2276         dec     dps
2277
2278
2279 // 14 rules by Fiorenzo D. Ramaglia <fd.ramaglia@tin.it>
2280
2281 replace {
2282         add  a,ar%1
2283 } by {
2284         ; Peephole 236a
2285         add  a,r%1
2286 }
2287
2288 replace {
2289         addc  a,ar%1
2290 } by {
2291         ; Peephole 236b
2292         addc  a,r%1
2293 }
2294
2295 replace {
2296         anl  a,ar%1
2297 } by {
2298         ; Peephole 236c
2299         anl  a,r%1
2300 }
2301
2302 replace {
2303         dec  ar%1
2304 } by {
2305         ; Peephole 236d
2306         dec  r%1
2307 }
2308
2309 replace {
2310         djnz  ar%1,%2
2311 } by {
2312         ; Peephole 236e
2313         djnz  r%1,%2
2314 }
2315
2316 replace {
2317         inc  ar%1
2318 } by {
2319         ; Peephole 236f
2320         inc  r%1
2321 }
2322
2323 replace {
2324         mov  a,ar%1
2325 } by {
2326         ; Peephole 236g
2327         mov  a,r%1
2328 }
2329
2330 replace {
2331         mov  ar%1,#%2
2332 } by {
2333         ; Peephole 236h
2334         mov  r%1,#%2
2335 }
2336
2337 replace {
2338         mov  ar%1,a
2339 } by {
2340         ; Peephole 236i
2341         mov  r%1,a
2342 }
2343
2344 replace {
2345         mov  ar%1,ar%2
2346 } by {
2347         ; Peephole 236j
2348         mov  r%1,ar%2
2349 }
2350
2351 replace {
2352         orl  a,ar%1
2353 } by {
2354         ; Peephole 236k
2355         orl  a,r%1
2356 }
2357
2358 replace {
2359         subb  a,ar%1
2360 } by {
2361         ; Peephole 236l
2362         subb  a,r%1
2363 }
2364
2365 replace {
2366         xch  a,ar%1
2367 } by {
2368         ; Peephole 236m
2369         xch  a,r%1
2370 }
2371
2372 replace {
2373         xrl  a,ar%1
2374 } by {
2375         ; Peephole 236n
2376         xrl  a,r%1
2377 }
2378
2379 replace {
2380         sjmp    %1
2381 %2:
2382         mov     %3,%4
2383 %1:
2384         ret
2385 } by {
2386         ; Peephole 237a  removed sjmp to ret
2387         ret
2388 %2:
2389         mov     %3,%4
2390 %1:
2391         ret
2392 }
2393
2394 replace {
2395         sjmp    %1
2396 %2:
2397         mov     %3,%4
2398         mov     dpl,%5
2399         mov     dph,%6
2400 %1:
2401         ret
2402 } by {
2403         ; Peephole 237b  removed sjmp to ret
2404         ret
2405 %2:
2406         mov     %3,%4
2407         mov     dpl,%5
2408         mov     dph,%6
2409 %1:
2410         ret
2411 }