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