Merge branch 'dt/schema-cleanups' into dt/linus
[linux-2.6-microblaze.git] / arch / powerpc / lib / feature-fixups-test.S
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright 2008 Michael Ellerman, IBM Corporation.
4  */
5
6 #include <asm/feature-fixups.h>
7 #include <asm/ppc_asm.h>
8 #include <asm/synch.h>
9 #include <asm/asm-compat.h>
10 #include <asm/ppc-opcode.h>
11
12         .text
13
14 #define globl(x)                \
15         .globl x;       \
16 x:
17
18 globl(ftr_fixup_test1)
19         or      1,1,1
20         or      2,2,2   /* fixup will nop out this instruction */
21         or      3,3,3
22
23 globl(end_ftr_fixup_test1)
24
25 globl(ftr_fixup_test1_orig)
26         or      1,1,1
27         or      2,2,2
28         or      3,3,3
29
30 globl(ftr_fixup_test1_expected)
31         or      1,1,1
32         nop
33         or      3,3,3
34
35 globl(ftr_fixup_test2)
36         or      1,1,1
37         or      2,2,2   /* fixup will replace this with ftr_fixup_test2_alt */
38         or      3,3,3
39
40 globl(end_ftr_fixup_test2)
41
42 globl(ftr_fixup_test2_orig)
43         or      1,1,1
44         or      2,2,2
45         or      3,3,3
46
47 globl(ftr_fixup_test2_alt)
48         or      31,31,31
49
50 globl(ftr_fixup_test2_expected)
51         or      1,1,1
52         or      31,31,31
53         or      3,3,3
54
55 globl(ftr_fixup_test3)
56         or      1,1,1
57         or      2,2,2   /* fixup will fail to replace this */
58         or      3,3,3
59
60 globl(end_ftr_fixup_test3)
61
62 globl(ftr_fixup_test3_orig)
63         or      1,1,1
64         or      2,2,2
65         or      3,3,3
66
67 globl(ftr_fixup_test3_alt)
68         or      31,31,31
69         or      31,31,31
70
71 globl(ftr_fixup_test4)
72         or      1,1,1
73         or      2,2,2
74         or      2,2,2
75         or      2,2,2
76         or      2,2,2
77         or      3,3,3
78
79 globl(end_ftr_fixup_test4)
80
81 globl(ftr_fixup_test4_expected)
82         or      1,1,1
83         or      31,31,31
84         or      31,31,31
85         nop
86         nop
87         or      3,3,3
88
89 globl(ftr_fixup_test4_orig)
90         or      1,1,1
91         or      2,2,2
92         or      2,2,2
93         or      2,2,2
94         or      2,2,2
95         or      3,3,3
96
97 globl(ftr_fixup_test4_alt)
98         or      31,31,31
99         or      31,31,31
100
101
102 globl(ftr_fixup_test5)
103         or      1,1,1
104 BEGIN_FTR_SECTION
105         or      2,2,2
106         or      2,2,2
107         or      2,2,2
108         or      2,2,2
109         or      2,2,2
110         or      2,2,2
111         or      2,2,2
112 FTR_SECTION_ELSE
113 2:      b       3f
114 3:      or      5,5,5
115         beq     3b
116         b       1f
117         or      6,6,6
118         b       2b
119 1:      bdnz    3b
120 ALT_FTR_SECTION_END(0, 1)
121         or      1,1,1
122
123 globl(end_ftr_fixup_test5)
124
125 globl(ftr_fixup_test5_expected)
126         or      1,1,1
127 2:      b       3f
128 3:      or      5,5,5
129         beq     3b
130         b       1f
131         or      6,6,6
132         b       2b
133 1:      bdnz    3b
134         or      1,1,1
135
136 globl(ftr_fixup_test6)
137 1:      or      1,1,1
138 BEGIN_FTR_SECTION
139         or      5,5,5
140 2:      PPC_LCMPI       r3,0
141         beq     4f
142         blt     2b
143         b       1b
144         b       4f
145 FTR_SECTION_ELSE
146 2:      or      2,2,2
147         PPC_LCMPI       r3,1
148         beq     3f
149         blt     2b
150         b       3f
151         b       1b
152 ALT_FTR_SECTION_END(0, 1)
153 3:      or      1,1,1
154         or      2,2,2
155 4:      or      3,3,3
156
157 globl(end_ftr_fixup_test6)
158
159 globl(ftr_fixup_test6_expected)
160 1:      or      1,1,1
161 2:      or      2,2,2
162         PPC_LCMPI       r3,1
163         beq     3f
164         blt     2b
165         b       3f
166         b       1b
167 3:      or      1,1,1
168         or      2,2,2
169         or      3,3,3
170
171 globl(ftr_fixup_test7)
172         or      1,1,1
173 BEGIN_FTR_SECTION
174         or      2,2,2
175         or      2,2,2
176         or      2,2,2
177         or      2,2,2
178         or      2,2,2
179         or      2,2,2
180         or      2,2,2
181 FTR_SECTION_ELSE
182 2:      b       3f
183 3:      or      5,5,5
184         beq     3b
185         b       1f
186         or      6,6,6
187         b       2b
188         bdnz    3b
189 1:
190 ALT_FTR_SECTION_END(0, 1)
191         or      1,1,1
192         or      1,1,1
193
194 globl(end_ftr_fixup_test7)
195         nop
196
197 globl(ftr_fixup_test7_expected)
198         or      1,1,1
199 2:      b       3f
200 3:      or      5,5,5
201         beq     3b
202         b       1f
203         or      6,6,6
204         b       2b
205         bdnz    3b
206 1:      or      1,1,1
207
208 #if 0
209 /* Test that if we have a larger else case the assembler spots it and
210  * reports an error. #if 0'ed so as not to break the build normally.
211  */
212 ftr_fixup_test_too_big:
213         or      1,1,1
214 BEGIN_FTR_SECTION
215         or      2,2,2
216         or      2,2,2
217         or      2,2,2
218 FTR_SECTION_ELSE
219         or      3,3,3
220         or      3,3,3
221         or      3,3,3
222         or      3,3,3
223 ALT_FTR_SECTION_END(0, 1)
224         or      1,1,1
225 #endif
226
227 #define MAKE_MACRO_TEST(TYPE)                                           \
228 globl(ftr_fixup_test_ ##TYPE##_macros)                                  \
229         or      1,1,1;                                                  \
230         /* Basic test, this section should all be nop'ed */             \
231 BEGIN_##TYPE##_SECTION                                                  \
232         or      2,2,2;                                                  \
233         or      2,2,2;                                                  \
234         or      2,2,2;                                                  \
235 END_##TYPE##_SECTION(0, 1)                                              \
236         or      1,1,1;                                                  \
237         or      1,1,1;                                                  \
238         /* Basic test, this section should NOT be nop'ed */             \
239 BEGIN_##TYPE##_SECTION                                                  \
240         or      2,2,2;                                                  \
241         or      2,2,2;                                                  \
242         or      2,2,2;                                                  \
243 END_##TYPE##_SECTION(0, 0)                                              \
244         or      1,1,1;                                                  \
245         or      1,1,1;                                                  \
246         /* Nesting test, inner section should be nop'ed */              \
247 BEGIN_##TYPE##_SECTION                                                  \
248         or      2,2,2;                                                  \
249         or      2,2,2;                                                  \
250 BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
251         or      3,3,3;                                                  \
252         or      3,3,3;                                                  \
253 END_##TYPE##_SECTION_NESTED(0, 1, 80)                                   \
254         or      2,2,2;                                                  \
255         or      2,2,2;                                                  \
256 END_##TYPE##_SECTION(0, 0)                                              \
257         or      1,1,1;                                                  \
258         or      1,1,1;                                                  \
259         /* Nesting test, whole section should be nop'ed */              \
260 BEGIN_##TYPE##_SECTION                                                  \
261         or      2,2,2;                                                  \
262         or      2,2,2;                                                  \
263 BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
264         or      3,3,3;                                                  \
265         or      3,3,3;                                                  \
266 END_##TYPE##_SECTION_NESTED(0, 0, 80)                                   \
267         or      2,2,2;                                                  \
268         or      2,2,2;                                                  \
269 END_##TYPE##_SECTION(0, 1)                                              \
270         or      1,1,1;                                                  \
271         or      1,1,1;                                                  \
272         /* Nesting test, none should be nop'ed */                       \
273 BEGIN_##TYPE##_SECTION                                                  \
274         or      2,2,2;                                                  \
275         or      2,2,2;                                                  \
276 BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
277         or      3,3,3;                                                  \
278         or      3,3,3;                                                  \
279 END_##TYPE##_SECTION_NESTED(0, 0, 80)                                   \
280         or      2,2,2;                                                  \
281         or      2,2,2;                                                  \
282 END_##TYPE##_SECTION(0, 0)                                              \
283         or      1,1,1;                                                  \
284         or      1,1,1;                                                  \
285         /* Basic alt section test, default case should be taken */      \
286 BEGIN_##TYPE##_SECTION                                                  \
287         or      3,3,3;                                                  \
288         or      3,3,3;                                                  \
289         or      3,3,3;                                                  \
290 ##TYPE##_SECTION_ELSE                                                   \
291         or      5,5,5;                                                  \
292         or      5,5,5;                                                  \
293 ALT_##TYPE##_SECTION_END(0, 0)                                          \
294         or      1,1,1;                                                  \
295         or      1,1,1;                                                  \
296         /* Basic alt section test, else case should be taken */         \
297 BEGIN_##TYPE##_SECTION                                                  \
298         or      3,3,3;                                                  \
299         or      3,3,3;                                                  \
300         or      3,3,3;                                                  \
301 ##TYPE##_SECTION_ELSE                                                   \
302         or      31,31,31;                                               \
303         or      31,31,31;                                               \
304         or      31,31,31;                                               \
305 ALT_##TYPE##_SECTION_END(0, 1)                                          \
306         or      1,1,1;                                                  \
307         or      1,1,1;                                                  \
308         /* Alt with smaller else case, should be padded with nops */    \
309 BEGIN_##TYPE##_SECTION                                                  \
310         or      3,3,3;                                                  \
311         or      3,3,3;                                                  \
312         or      3,3,3;                                                  \
313 ##TYPE##_SECTION_ELSE                                                   \
314         or      31,31,31;                                               \
315 ALT_##TYPE##_SECTION_END(0, 1)                                          \
316         or      1,1,1;                                                  \
317         or      1,1,1;                                                  \
318         /* Alt section with nested section in default case */           \
319         /* Default case should be taken, with nop'ed inner section */   \
320 BEGIN_##TYPE##_SECTION                                                  \
321         or      3,3,3;                                                  \
322 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
323         or      3,3,3;                                                  \
324         or      3,3,3;                                                  \
325 END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
326         or      3,3,3;                                                  \
327 ##TYPE##_SECTION_ELSE                                                   \
328         or      2,2,2;                                                  \
329         or      2,2,2;                                                  \
330 ALT_##TYPE##_SECTION_END(0, 0)                                          \
331         or      1,1,1;                                                  \
332         or      1,1,1;                                                  \
333         /* Alt section with nested section in else, default taken */    \
334 BEGIN_##TYPE##_SECTION                                                  \
335         or      3,3,3;                                                  \
336         or      3,3,3;                                                  \
337         or      3,3,3;                                                  \
338 ##TYPE##_SECTION_ELSE                                                   \
339         or      5,5,5;                                                  \
340 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
341         or      3,3,3;                                                  \
342 END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
343         or      5,5,5;                                                  \
344 ALT_##TYPE##_SECTION_END(0, 0)                                          \
345         or      1,1,1;                                                  \
346         or      1,1,1;                                                  \
347         /* Alt section with nested section in else, else taken & nop */ \
348 BEGIN_##TYPE##_SECTION                                                  \
349         or      3,3,3;                                                  \
350         or      3,3,3;                                                  \
351         or      3,3,3;                                                  \
352 ##TYPE##_SECTION_ELSE                                                   \
353         or      5,5,5;                                                  \
354 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
355         or      3,3,3;                                                  \
356 END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
357         or      5,5,5;                                                  \
358 ALT_##TYPE##_SECTION_END(0, 1)                                          \
359         or      1,1,1;                                                  \
360         or      1,1,1;                                                  \
361         /* Feature section with nested alt section, default taken */    \
362 BEGIN_##TYPE##_SECTION                                                  \
363         or      2,2,2;                                                  \
364 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
365         or      1,1,1;                                                  \
366 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
367         or      5,5,5;                                                  \
368 ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
369         or      2,2,2;                                                  \
370 END_##TYPE##_SECTION(0, 0)                                              \
371         or      1,1,1;                                                  \
372         or      1,1,1;                                                  \
373         /* Feature section with nested alt section, else taken */       \
374 BEGIN_##TYPE##_SECTION                                                  \
375         or      2,2,2;                                                  \
376 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
377         or      1,1,1;                                                  \
378 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
379         or      5,5,5;                                                  \
380 ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
381         or      2,2,2;                                                  \
382 END_##TYPE##_SECTION(0, 0)                                              \
383         or      1,1,1;                                                  \
384         or      1,1,1;                                                  \
385         /* Feature section with nested alt section, all nop'ed */       \
386 BEGIN_##TYPE##_SECTION                                                  \
387         or      2,2,2;                                                  \
388 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
389         or      1,1,1;                                                  \
390 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
391         or      5,5,5;                                                  \
392 ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
393         or      2,2,2;                                                  \
394 END_##TYPE##_SECTION(0, 1)                                              \
395         or      1,1,1;                                                  \
396         or      1,1,1;                                                  \
397         /* Nested alt sections, default with inner default taken */     \
398 BEGIN_##TYPE##_SECTION                                                  \
399         or      2,2,2;                                                  \
400 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
401         or      1,1,1;                                                  \
402 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
403         or      5,5,5;                                                  \
404 ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
405         or      2,2,2;                                                  \
406 ##TYPE##_SECTION_ELSE                                                   \
407         or      31,31,31;                                               \
408 BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
409         or      5,5,5;                                                  \
410 ##TYPE##_SECTION_ELSE_NESTED(94)                                        \
411         or      1,1,1;                                                  \
412 ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
413         or      31,31,31;                                               \
414 ALT_##TYPE##_SECTION_END(0, 0)                                          \
415         or      1,1,1;                                                  \
416         or      1,1,1;                                                  \
417         /* Nested alt sections, default with inner else taken */        \
418 BEGIN_##TYPE##_SECTION                                                  \
419         or      2,2,2;                                                  \
420 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
421         or      1,1,1;                                                  \
422 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
423         or      5,5,5;                                                  \
424 ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
425         or      2,2,2;                                                  \
426 ##TYPE##_SECTION_ELSE                                                   \
427         or      31,31,31;                                               \
428 BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
429         or      5,5,5;                                                  \
430 ##TYPE##_SECTION_ELSE_NESTED(94)                                        \
431         or      1,1,1;                                                  \
432 ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
433         or      31,31,31;                                               \
434 ALT_##TYPE##_SECTION_END(0, 0)                                          \
435         or      1,1,1;                                                  \
436         or      1,1,1;                                                  \
437         /* Nested alt sections, else with inner default taken */        \
438 BEGIN_##TYPE##_SECTION                                                  \
439         or      2,2,2;                                                  \
440 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
441         or      1,1,1;                                                  \
442 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
443         or      5,5,5;                                                  \
444 ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
445         or      2,2,2;                                                  \
446 ##TYPE##_SECTION_ELSE                                                   \
447         or      31,31,31;                                               \
448 BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
449         or      5,5,5;                                                  \
450 ##TYPE##_SECTION_ELSE_NESTED(94)                                        \
451         or      1,1,1;                                                  \
452 ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
453         or      31,31,31;                                               \
454 ALT_##TYPE##_SECTION_END(0, 1)                                          \
455         or      1,1,1;                                                  \
456         or      1,1,1;                                                  \
457         /* Nested alt sections, else with inner else taken */           \
458 BEGIN_##TYPE##_SECTION                                                  \
459         or      2,2,2;                                                  \
460 BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
461         or      1,1,1;                                                  \
462 ##TYPE##_SECTION_ELSE_NESTED(95)                                        \
463         or      5,5,5;                                                  \
464 ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
465         or      2,2,2;                                                  \
466 ##TYPE##_SECTION_ELSE                                                   \
467         or      31,31,31;                                               \
468 BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
469         or      5,5,5;                                                  \
470 ##TYPE##_SECTION_ELSE_NESTED(94)                                        \
471         or      1,1,1;                                                  \
472 ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)                               \
473         or      31,31,31;                                               \
474 ALT_##TYPE##_SECTION_END(0, 1)                                          \
475         or      1,1,1;                                                  \
476         or      1,1,1;                                                  \
477         /* Nested alt sections, else can have large else case */        \
478 BEGIN_##TYPE##_SECTION                                                  \
479         or      2,2,2;                                                  \
480         or      2,2,2;                                                  \
481         or      2,2,2;                                                  \
482         or      2,2,2;                                                  \
483 ##TYPE##_SECTION_ELSE                                                   \
484 BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
485         or      5,5,5;                                                  \
486         or      5,5,5;                                                  \
487         or      5,5,5;                                                  \
488         or      5,5,5;                                                  \
489 ##TYPE##_SECTION_ELSE_NESTED(94)                                        \
490         or      1,1,1;                                                  \
491         or      1,1,1;                                                  \
492         or      1,1,1;                                                  \
493         or      1,1,1;                                                  \
494 ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)                               \
495 ALT_##TYPE##_SECTION_END(0, 1)                                          \
496         or      1,1,1;                                                  \
497         or      1,1,1;
498
499 #define MAKE_MACRO_TEST_EXPECTED(TYPE)                                  \
500 globl(ftr_fixup_test_ ##TYPE##_macros_expected)                         \
501         or      1,1,1;                                                  \
502         /* Basic test, this section should all be nop'ed */             \
503 /* BEGIN_##TYPE##_SECTION */                                            \
504         nop;                                                            \
505         nop;                                                            \
506         nop;                                                            \
507 /* END_##TYPE##_SECTION(0, 1) */                                        \
508         or      1,1,1;                                                  \
509         or      1,1,1;                                                  \
510         /* Basic test, this section should NOT be nop'ed */             \
511 /* BEGIN_##TYPE##_SECTION */                                            \
512         or      2,2,2;                                                  \
513         or      2,2,2;                                                  \
514         or      2,2,2;                                                  \
515 /* END_##TYPE##_SECTION(0, 0) */                                        \
516         or      1,1,1;                                                  \
517         or      1,1,1;                                                  \
518         /* Nesting test, inner section should be nop'ed */              \
519 /* BEGIN_##TYPE##_SECTION */                                            \
520         or      2,2,2;                                                  \
521         or      2,2,2;                                                  \
522 /* BEGIN_##TYPE##_SECTION_NESTED(80) */                                 \
523         nop;                                                            \
524         nop;                                                            \
525 /* END_##TYPE##_SECTION_NESTED(0, 1, 80) */                             \
526         or      2,2,2;                                                  \
527         or      2,2,2;                                                  \
528 /* END_##TYPE##_SECTION(0, 0) */                                        \
529         or      1,1,1;                                                  \
530         or      1,1,1;                                                  \
531         /* Nesting test, whole section should be nop'ed */              \
532         /* NB. inner section is not nop'ed, but then entire outer is */ \
533 /* BEGIN_##TYPE##_SECTION */                                            \
534         nop;                                                            \
535         nop;                                                            \
536 /* BEGIN_##TYPE##_SECTION_NESTED(80) */                                 \
537         nop;                                                            \
538         nop;                                                            \
539 /* END_##TYPE##_SECTION_NESTED(0, 0, 80) */                             \
540         nop;                                                            \
541         nop;                                                            \
542 /* END_##TYPE##_SECTION(0, 1) */                                        \
543         or      1,1,1;                                                  \
544         or      1,1,1;                                                  \
545         /* Nesting test, none should be nop'ed */                       \
546 /* BEGIN_##TYPE##_SECTION */                                            \
547         or      2,2,2;                                                  \
548         or      2,2,2;                                                  \
549 /* BEGIN_##TYPE##_SECTION_NESTED(80) */                                 \
550         or      3,3,3;                                                  \
551         or      3,3,3;                                                  \
552 /* END_##TYPE##_SECTION_NESTED(0, 0, 80) */                             \
553         or      2,2,2;                                                  \
554         or      2,2,2;                                                  \
555 /* END_##TYPE##_SECTION(0, 0) */                                        \
556         or      1,1,1;                                                  \
557         or      1,1,1;                                                  \
558         /* Basic alt section test, default case should be taken */      \
559 /* BEGIN_##TYPE##_SECTION */                                            \
560         or      3,3,3;                                                  \
561         or      3,3,3;                                                  \
562         or      3,3,3;                                                  \
563 /* ##TYPE##_SECTION_ELSE */                                             \
564         /* or   5,5,5; */                                               \
565         /* or   5,5,5; */                                               \
566 /* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
567         or      1,1,1;                                                  \
568         or      1,1,1;                                                  \
569         /* Basic alt section test, else case should be taken */         \
570 /* BEGIN_##TYPE##_SECTION */                                            \
571         /* or   3,3,3; */                                               \
572         /* or   3,3,3; */                                               \
573         /* or   3,3,3; */                                               \
574 /* ##TYPE##_SECTION_ELSE */                                             \
575         or      31,31,31;                                               \
576         or      31,31,31;                                               \
577         or      31,31,31;                                               \
578 /* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
579         or      1,1,1;                                                  \
580         or      1,1,1;                                                  \
581         /* Alt with smaller else case, should be padded with nops */    \
582 /* BEGIN_##TYPE##_SECTION */                                            \
583         /* or   3,3,3; */                                               \
584         /* or   3,3,3; */                                               \
585         /* or   3,3,3; */                                               \
586 /* ##TYPE##_SECTION_ELSE */                                             \
587         or      31,31,31;                                               \
588         nop;                                                            \
589         nop;                                                            \
590 /* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
591         or      1,1,1;                                                  \
592         or      1,1,1;                                                  \
593         /* Alt section with nested section in default case */           \
594         /* Default case should be taken, with nop'ed inner section */   \
595 /* BEGIN_##TYPE##_SECTION */                                            \
596         or      3,3,3;                                                  \
597 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
598         nop;                                                            \
599         nop;                                                            \
600 /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */                             \
601         or      3,3,3;                                                  \
602 /* ##TYPE##_SECTION_ELSE */                                             \
603         /* or   2,2,2; */                                               \
604         /* or   2,2,2; */                                               \
605 /* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
606         or      1,1,1;                                                  \
607         or      1,1,1;                                                  \
608         /* Alt section with nested section in else, default taken */    \
609 /* BEGIN_##TYPE##_SECTION */                                            \
610         or      3,3,3;                                                  \
611         or      3,3,3;                                                  \
612         or      3,3,3;                                                  \
613 /* ##TYPE##_SECTION_ELSE */                                             \
614         /* or   5,5,5; */                                               \
615 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
616         /* or   3,3,3; */                                               \
617 /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */                             \
618         /* or   5,5,5; */                                               \
619 /* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
620         or      1,1,1;                                                  \
621         or      1,1,1;                                                  \
622         /* Alt section with nested section in else, else taken & nop */ \
623 /* BEGIN_##TYPE##_SECTION */                                            \
624         /* or   3,3,3; */                                               \
625         /* or   3,3,3; */                                               \
626         /* or   3,3,3; */                                               \
627 /* ##TYPE##_SECTION_ELSE */                                             \
628         or      5,5,5;                                                  \
629 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
630         nop;                                                            \
631 /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */                             \
632         or      5,5,5;                                                  \
633 /* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
634         or      1,1,1;                                                  \
635         or      1,1,1;                                                  \
636         /* Feature section with nested alt section, default taken */    \
637 /* BEGIN_##TYPE##_SECTION */                                            \
638         or      2,2,2;                                                  \
639 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
640         or      1,1,1;                                                  \
641 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
642         /* or   5,5,5; */                                               \
643 /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */                         \
644         or      2,2,2;                                                  \
645 /* END_##TYPE##_SECTION(0, 0) */                                        \
646         or      1,1,1;                                                  \
647         or      1,1,1;                                                  \
648         /* Feature section with nested alt section, else taken */       \
649 /* BEGIN_##TYPE##_SECTION */                                            \
650         or      2,2,2;                                                  \
651 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
652         /* or   1,1,1; */                                               \
653 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
654         or      5,5,5;                                                  \
655 /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
656         or      2,2,2;                                                  \
657 /* END_##TYPE##_SECTION(0, 0) */                                        \
658         or      1,1,1;                                                  \
659         or      1,1,1;                                                  \
660         /* Feature section with nested alt section, all nop'ed */       \
661 /* BEGIN_##TYPE##_SECTION */                                            \
662         nop;                                                            \
663 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
664         nop;                                                            \
665 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
666         /* or   5,5,5; */                                               \
667 /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */                         \
668         nop;                                                            \
669 /* END_##TYPE##_SECTION(0, 1) */                                        \
670         or      1,1,1;                                                  \
671         or      1,1,1;                                                  \
672         /* Nested alt sections, default with inner default taken */     \
673 /* BEGIN_##TYPE##_SECTION */                                            \
674         or      2,2,2;                                                  \
675 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
676         or      1,1,1;                                                  \
677 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
678         /* or   5,5,5; */                                               \
679 /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */                         \
680         or      2,2,2;                                                  \
681 /* ##TYPE##_SECTION_ELSE */                                             \
682         /* or   31,31,31; */                                            \
683 /* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
684         /* or   5,5,5; */                                               \
685 /* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
686         /* or   1,1,1; */                                               \
687 /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */                         \
688         /* or   31,31,31; */                                            \
689 /* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
690         or      1,1,1;                                                  \
691         or      1,1,1;                                                  \
692         /* Nested alt sections, default with inner else taken */        \
693 /* BEGIN_##TYPE##_SECTION */                                            \
694         or      2,2,2;                                                  \
695 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
696         /* or   1,1,1; */                                               \
697 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
698         or      5,5,5;                                                  \
699 /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
700         or      2,2,2;                                                  \
701 /* ##TYPE##_SECTION_ELSE */                                             \
702         /* or   31,31,31; */                                            \
703 /* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
704         /* or   5,5,5; */                                               \
705 /* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
706         /* or   1,1,1; */                                               \
707 /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */                         \
708         /* or   31,31,31; */                                            \
709 /* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
710         or      1,1,1;                                                  \
711         or      1,1,1;                                                  \
712         /* Nested alt sections, else with inner default taken */        \
713 /* BEGIN_##TYPE##_SECTION */                                            \
714         /* or   2,2,2; */                                               \
715 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
716         /* or   1,1,1; */                                               \
717 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
718         /* or   5,5,5; */                                               \
719 /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
720         /* or   2,2,2; */                                               \
721 /* ##TYPE##_SECTION_ELSE */                                             \
722         or      31,31,31;                                               \
723 /* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
724         or      5,5,5;                                                  \
725 /* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
726         /* or   1,1,1; */                                               \
727 /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */                         \
728         or      31,31,31;                                               \
729 /* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
730         or      1,1,1;                                                  \
731         or      1,1,1;                                                  \
732         /* Nested alt sections, else with inner else taken */           \
733 /* BEGIN_##TYPE##_SECTION */                                            \
734         /* or   2,2,2; */                                               \
735 /* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
736         /* or   1,1,1; */                                               \
737 /* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
738         /* or   5,5,5; */                                               \
739 /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
740         /* or   2,2,2; */                                               \
741 /* ##TYPE##_SECTION_ELSE */                                             \
742         or      31,31,31;                                               \
743 /* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
744         /* or   5,5,5; */                                               \
745 /* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
746         or      1,1,1;                                                  \
747 /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */                         \
748         or      31,31,31;                                               \
749 /* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
750         or      1,1,1;                                                  \
751         or      1,1,1;                                                  \
752         /* Nested alt sections, else can have large else case */        \
753 /* BEGIN_##TYPE##_SECTION */                                            \
754         /* or   2,2,2; */                                               \
755         /* or   2,2,2; */                                               \
756         /* or   2,2,2; */                                               \
757         /* or   2,2,2; */                                               \
758 /* ##TYPE##_SECTION_ELSE */                                             \
759 /* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
760         /* or   5,5,5; */                                               \
761         /* or   5,5,5; */                                               \
762         /* or   5,5,5; */                                               \
763         /* or   5,5,5; */                                               \
764 /* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
765         or      1,1,1;                                                  \
766         or      1,1,1;                                                  \
767         or      1,1,1;                                                  \
768         or      1,1,1;                                                  \
769 /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */                         \
770 /* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
771         or      1,1,1;                                                  \
772         or      1,1,1;
773
774 MAKE_MACRO_TEST(FTR);
775 MAKE_MACRO_TEST_EXPECTED(FTR);
776
777 #ifdef CONFIG_PPC64
778 MAKE_MACRO_TEST(FW_FTR);
779 MAKE_MACRO_TEST_EXPECTED(FW_FTR);
780 #endif
781
782 globl(lwsync_fixup_test)
783 1:      or      1,1,1
784         LWSYNC
785 globl(end_lwsync_fixup_test)
786
787 globl(lwsync_fixup_test_expected_LWSYNC)
788 1:      or      1,1,1
789         lwsync
790
791 globl(lwsync_fixup_test_expected_SYNC)
792 1:      or      1,1,1
793         sync
794
795 globl(ftr_fixup_prefix1)
796         or      1,1,1
797         .long OP_PREFIX << 26
798         .long 0x0000000
799         or      2,2,2
800 globl(end_ftr_fixup_prefix1)
801
802 globl(ftr_fixup_prefix1_orig)
803         or      1,1,1
804         .long OP_PREFIX << 26
805         .long 0x0000000
806         or      2,2,2
807
808 globl(ftr_fixup_prefix1_expected)
809         or      1,1,1
810         nop
811         nop
812         or      2,2,2
813
814 globl(ftr_fixup_prefix2)
815         or      1,1,1
816         .long OP_PREFIX << 26
817         .long 0x0000000
818         or      2,2,2
819 globl(end_ftr_fixup_prefix2)
820
821 globl(ftr_fixup_prefix2_orig)
822         or      1,1,1
823         .long OP_PREFIX << 26
824         .long 0x0000000
825         or      2,2,2
826
827 globl(ftr_fixup_prefix2_alt)
828         .long OP_PREFIX << 26
829         .long 0x0000001
830
831 globl(ftr_fixup_prefix2_expected)
832         or      1,1,1
833         .long OP_PREFIX << 26
834         .long 0x0000001
835         or      2,2,2
836
837 globl(ftr_fixup_prefix3)
838         or      1,1,1
839         .long OP_PREFIX << 26
840         .long 0x0000000
841         or      2,2,2
842         or      3,3,3
843 globl(end_ftr_fixup_prefix3)
844
845 globl(ftr_fixup_prefix3_orig)
846         or      1,1,1
847         .long OP_PREFIX << 26
848         .long 0x0000000
849         or      2,2,2
850         or      3,3,3
851
852 globl(ftr_fixup_prefix3_alt)
853         .long OP_PREFIX << 26
854         .long 0x0000001
855         nop
856
857 globl(ftr_fixup_prefix3_expected)
858         or      1,1,1
859         .long OP_PREFIX << 26
860         .long 0x0000001
861         nop
862         or      3,3,3