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