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