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