* device/include/mcs51/c8051f020.h,
[fw/sdcc] / src / z80 / peeph.def
1 replace {
2         ld      (hl),(hl)
3 } by {
4         ERROR - peephole - caught (hl),(hl)
5 }
6
7 replace restart {
8         ld      %1,%1
9 } by {
10         ; peephole removed redundant load.
11 }
12
13 replace restart {
14         xor     a,a
15         or      a,%1
16         or      a,a
17         jp      %2,%3
18 } by {
19         xor     a,a
20         or      a,%1
21         jp      %2,%3
22 }
23
24 replace restart {
25         jp      NZ,%1
26         jp      %2
27 %1:
28         jp      %3
29 %2:
30 } by {
31         jp      Z,%2
32 %1:
33         jp      %3
34 %2:
35 } if labelRefCountChange(%1 -1)
36
37 replace restart {
38         jp      NZ,%1
39         jp      %2
40 %1:
41 } by {
42         jp      Z,%2
43 %1:
44 } if labelRefCountChange(%1 -1)
45
46 replace restart {
47         jp      Z,%1
48         jp      %2
49 %1:
50 } by {
51         jp      NZ,%2
52 %1:
53 } if labelRefCountChange(%1 -1)
54
55 replace restart {
56         or      a,%1
57         or      a,a
58 } by {
59         or      a,%1
60 }
61
62 replace restart {
63         or      a,%1)
64         or      a,a
65 } by {
66         or      a,%1)
67 }
68
69 replace restart {
70         xor     a,a
71         or      a,%1
72         jp      NZ,%2
73         xor     a,a
74         or      a,%3
75         jp      Z,%2
76 } by {
77         xor     a,a
78         or      a,%1
79         jp      NZ,%2
80         or      a,%3
81         jp      Z,%2
82 }
83
84 replace restart {
85         jp      NZ,%1
86         inc     %3)
87 %1:
88         jp      %2
89 } by {
90         jp      NZ,%2
91         inc     %3)
92 %1:
93         jp      %2
94 } if labelRefCountChange(%1 -1), labelRefCountChange(%2 1)
95
96 replace restart {
97         xor     a,a
98         ld      a,#0x00
99 } by {
100         xor     a,a
101 }
102
103 replace {
104         ld      e,#0x00
105         ld      d,#0x00
106 } by {
107         ld      de,#0x0000
108 }
109
110 replace {
111         ld      l,#0x00
112         ld      h,#0x00
113 } by {
114         ld      hl,#0x0000
115 }
116
117 replace {
118         ld      c,#0x00
119         ld      b,#0x00
120 } by {
121         ld      bc,#0x0000
122 }
123
124 replace restart {
125         ld      %1,a
126         ld      a,%1
127 } by {
128         ld      %1,a
129 } if notVolatile %1
130
131 replace restart {
132         jp      %1,%2
133         jr      %3
134 %2:
135         jp      %4
136 } by {
137         jp      %1,%4
138         jr      %3
139 %2:
140         jp      %4
141 } if labelRefCountChange(%2 -1), labelRefCountChange(%4 1)
142
143 replace {
144         ld      l,e
145         ld      h,d
146         push    hl
147         ld      l,c
148         ld      h,b
149         push    hl
150 } by {
151         push    de
152         push    bc
153 }
154
155 replace {
156         and     a,#%1
157         or      a,a
158 } by {
159         and     a,#%1
160 }
161
162 replace {
163         ld      b,l
164         ld      a,b
165         pop     bc
166         ld      b,a
167 } by {
168         ld      a,l
169         pop     bc
170         ld      b,a
171 }
172
173 replace {
174         ld      d,l
175         ld      a,d
176         pop     de
177         ld      d,a
178 } by {
179         ld      a,l
180         pop     de
181         ld      d,a
182 }
183
184 replace {
185         ld      a,b
186         push    af
187         inc     sp
188 } by {
189         push    bc
190         inc     sp
191 }
192
193 replace {
194         ld      a,d
195         push    af
196         inc     sp
197 } by {
198         push    de
199         inc     sp
200 }
201
202 replace {
203         ld      a,%1
204         sub     a,#%2
205         jp      M,%3
206         ld      a,%1
207         sub     a,#%4
208         jp      P,%5
209 } by {
210         ld      a,%1
211         cp      a,#%2
212         jp      M,%3
213         cp      a,#%4
214         jp      P,%5
215 }
216
217 replace {
218         ld      e,l
219         ld      d,h
220         ld      l,e
221         ld      h,d
222 } by {
223         ld      e,l
224         ld      d,h
225 }
226
227 replace {
228         ld      %1,%2
229         ld      %3,%4
230         ld      %2,%1
231         ld      %4,%3
232 } by {
233         ld      %1,%2
234         ld      %3,%4
235 }
236
237 // From: Philipp Klaus Krause
238 replace restart {
239         ld      %1,a
240         ld      a,%2
241         add     a,%1
242         ld      %1,a
243 } by {
244         ; peephole removed loads by exploiting commutativity of addition.
245         add     a,%2
246         ld      %1,a
247 }
248
249 // From: Philipp Klaus Krause
250 replace restart {
251         ld      %1,a
252         ld      a,%2
253         add     a,%1
254 } by {
255         ld      %1, a
256         ; peephole removed load by exploiting commutativity of addition.
257         add     a, %2
258 }
259
260 // From: Philipp Klaus Krause
261 replace {
262         or      a,%1
263         jp      NZ,%2
264         ld      %3,#0x00
265 } by {
266         or      a,%1
267         jp      NZ,%2
268         ld      %3,a
269         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
270 }
271
272 // From: Philipp Klaus Krause
273 replace {
274         and     a,%1
275         jp      NZ,%2
276         ld      %3,#0x00
277 } by {
278         and     a,%1
279         jp      NZ,%2
280         ld      %3,a
281         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
282 }
283
284 // From: Philipp Klaus Krause
285 replace {
286         sub     a,%1
287         jp      NZ,%2
288         ld      %3,#0x00
289 } by {
290         sub     a,%1
291         jp      NZ,%2
292         ld      %3,a
293         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
294 }
295
296 // From: Philipp Klaus Krause
297 replace {
298         dec     a
299         jp      NZ,%1
300         ld      %2,#0x00
301 } by {
302         dec     a
303         jp      NZ,%1
304         ld      %2,a
305         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
306 }
307
308 // From: Philipp Klaus Krause
309 replace {
310         or      a,%1
311         jp      NZ,%2
312         ld      a,%3
313         or      a,a
314 } by {
315         or      a,%1
316         jp      NZ,%2
317         or      a,%3
318         ; peephole shortened or using a (which has just been tested to be #0x00).
319 }
320
321 // From: Philipp Klaus Krause
322 replace {
323         and     a,%1
324         jp      NZ,%2
325         ld      a,%3
326         or      a,a
327 } by {
328         and     a,%1
329         jp      NZ,%2
330         or      a,%3
331         ; peephole shortened or using a (which has just been tested to be #0x00).
332 }
333
334 // From: Philipp Klaus Krause
335 replace {
336         sub     a,%1
337         jp      NZ,%2
338         ld      a,%3
339         or      a,a
340 } by {
341         sub     a,%1
342         jp      NZ,%2
343         or      a,%3
344         ; peephole shortened or using a (which has just been tested to be #0x00).
345 }
346
347 // From: Philipp Klaus Krause
348 replace {
349         dec     a
350         jp      NZ,%1
351         ld      a,%2
352         or      a,a
353 } by {
354         dec     a
355         jp      NZ,%1
356         or      a,%2
357         ; peephole shortened or using a (which has just been tested to be #0x00).
358 }
359
360 // From: Philipp Klaus Krause
361 replace restart {
362         or      a,%1
363         jp      NZ,%2
364         push    %3
365         ld      %4,#0x00
366 } by {
367         or      a,%1
368         jp      NZ,%2
369         push    %3
370         ld      %4,a
371         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
372 }
373
374 // From: Philipp Klaus Krause
375 replace restart {
376         and     a,%1
377         jp      NZ,%2
378         push    %3
379         ld      %4,#0x00
380 } by {
381         sub     a,%1
382         jp      NZ,%2
383         push    %3
384         ld      %4,a
385         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
386 }
387
388 // From: Philipp Klaus Krause
389 replace restart {
390         sub     a,%1
391         jp      NZ,%2
392         push    %3
393         ld      %4,#0x00
394 } by {
395         sub     a,%1
396         jp      NZ,%2
397         push    %3
398         ld      %4,a
399         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
400 }
401
402 // From: Philipp Klaus Krause
403 replace restart {
404         dec     a
405         jp      NZ,%1
406         push    %2
407         ld      %3,#0x00
408 } by {
409         dec     a
410         jp      NZ,%1
411         push    %2
412         ld      %3,a
413         ; peephole replaced constant #0x00 by a (which has just been tested to be #0x00).
414 }
415
416 // From: Philipp Klaus Krause
417 replace restart{
418         jp      NZ,%1
419         or      a,%2
420         jp      Z,%3
421 %1:
422         jp      %4
423 %3:
424 } by {
425         jp      NZ,%4
426         ; peephole redirected jump
427         or      a,%2
428         jp      NZ,%4
429         ; peephole redirected jump
430 %3:
431 } if labelRefCount(%1 1), labelRefCountChange(%1 -1), labelRefCountChange(%3 -1), labelRefCountChange(%4 1)
432
433 // Should be one of the last ones. Opens the code to further peephole optimization.
434 // From: Philipp Klaus Krause
435 replace restart {
436 %1:
437 } by {
438         ; peephole removed unused label %1.
439 } if labelRefCount(%1 0)
440
441 // From: Philipp Klaus Krause
442 replace {
443         jp      Z,%5
444 } by {
445         jr      Z,%5
446 } if labelInRange()
447
448 replace {
449         jp      NZ,%5
450 } by {
451         jr      NZ,%5
452 } if labelInRange()
453
454 replace {
455         jp      C,%5
456 } by {
457         jr      C,%5
458 } if labelInRange()
459
460 replace {
461         jp      NC,%5
462 } by {
463         jr      NC,%5
464 } if labelInRange()