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;	\
19x:
20
21globl(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
26globl(end_ftr_fixup_test1)
27
28globl(ftr_fixup_test1_orig)
29	or	1,1,1
30	or	2,2,2
31	or	3,3,3
32
33globl(ftr_fixup_test1_expected)
34	or	1,1,1
35	nop
36	or	3,3,3
37
38globl(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
43globl(end_ftr_fixup_test2)
44
45globl(ftr_fixup_test2_orig)
46	or	1,1,1
47	or	2,2,2
48	or	3,3,3
49
50globl(ftr_fixup_test2_alt)
51	or	31,31,31
52
53globl(ftr_fixup_test2_expected)
54	or	1,1,1
55	or	31,31,31
56	or	3,3,3
57
58globl(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
63globl(end_ftr_fixup_test3)
64
65globl(ftr_fixup_test3_orig)
66	or	1,1,1
67	or	2,2,2
68	or	3,3,3
69
70globl(ftr_fixup_test3_alt)
71	or	31,31,31
72	or	31,31,31
73
74globl(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
82globl(end_ftr_fixup_test4)
83
84globl(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
92globl(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
100globl(ftr_fixup_test4_alt)
101	or	31,31,31
102	or	31,31,31
103
104
105globl(ftr_fixup_test5)
106	or	1,1,1
107BEGIN_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
115FTR_SECTION_ELSE
1162:	b	3f
1173:	or	5,5,5
118	beq	3b
119	b	1f
120	or	6,6,6
121	b	2b
1221:	bdnz	3b
123ALT_FTR_SECTION_END(0, 1)
124	or	1,1,1
125
126globl(end_ftr_fixup_test5)
127
128globl(ftr_fixup_test5_expected)
129	or	1,1,1
1302:	b	3f
1313:	or	5,5,5
132	beq	3b
133	b	1f
134	or	6,6,6
135	b	2b
1361:	bdnz	3b
137	or	1,1,1
138
139globl(ftr_fixup_test6)
1401:	or	1,1,1
141BEGIN_FTR_SECTION
142	or	5,5,5
1432:	PPC_LCMPI	r3,0
144	beq	4f
145	blt	2b
146	b	1b
147	b	4f
148FTR_SECTION_ELSE
1492:	or	2,2,2
150	PPC_LCMPI	r3,1
151	beq	3f
152	blt	2b
153	b	3f
154	b	1b
155ALT_FTR_SECTION_END(0, 1)
1563:	or	1,1,1
157	or	2,2,2
1584:	or	3,3,3
159
160globl(end_ftr_fixup_test6)
161
162globl(ftr_fixup_test6_expected)
1631:	or	1,1,1
1642:	or	2,2,2
165	PPC_LCMPI	r3,1
166	beq	3f
167	blt	2b
168	b	3f
169	b	1b
1702:	or	1,1,1
171	or	2,2,2
1723:	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 */
179ftr_fixup_test7:
180	or	1,1,1
181BEGIN_FTR_SECTION
182	or	2,2,2
183	or	2,2,2
184	or	2,2,2
185FTR_SECTION_ELSE
186	or	3,3,3
187	or	3,3,3
188	or	3,3,3
189	or	3,3,3
190ALT_FTR_SECTION_END(0, 1)
191	or	1,1,1
192#endif
193
194#define	MAKE_MACRO_TEST(TYPE)						\
195globl(ftr_fixup_test_ ##TYPE##_macros)					\
196	or	1,1,1;							\
197	/* Basic test, this section should all be nop'ed */		\
198BEGIN_##TYPE##_SECTION							\
199	or	2,2,2;							\
200	or	2,2,2;							\
201	or	2,2,2;							\
202END_##TYPE##_SECTION(0, 1)						\
203	or	1,1,1;							\
204	or	1,1,1;							\
205	/* Basic test, this section should NOT be nop'ed */		\
206BEGIN_##TYPE##_SECTION							\
207	or	2,2,2;							\
208	or	2,2,2;							\
209	or	2,2,2;							\
210END_##TYPE##_SECTION(0, 0)						\
211	or	1,1,1;							\
212	or	1,1,1;							\
213	/* Nesting test, inner section should be nop'ed */		\
214BEGIN_##TYPE##_SECTION							\
215	or	2,2,2;							\
216	or	2,2,2;							\
217BEGIN_##TYPE##_SECTION_NESTED(80)					\
218	or	3,3,3;							\
219	or	3,3,3;							\
220END_##TYPE##_SECTION_NESTED(0, 1, 80)					\
221	or	2,2,2;							\
222	or	2,2,2;							\
223END_##TYPE##_SECTION(0, 0)						\
224	or	1,1,1;							\
225	or	1,1,1;							\
226	/* Nesting test, whole section should be nop'ed */		\
227BEGIN_##TYPE##_SECTION							\
228	or	2,2,2;							\
229	or	2,2,2;							\
230BEGIN_##TYPE##_SECTION_NESTED(80)					\
231	or	3,3,3;							\
232	or	3,3,3;							\
233END_##TYPE##_SECTION_NESTED(0, 0, 80)					\
234	or	2,2,2;							\
235	or	2,2,2;							\
236END_##TYPE##_SECTION(0, 1)						\
237	or	1,1,1;							\
238	or	1,1,1;							\
239	/* Nesting test, none should be nop'ed */			\
240BEGIN_##TYPE##_SECTION							\
241	or	2,2,2;							\
242	or	2,2,2;							\
243BEGIN_##TYPE##_SECTION_NESTED(80)					\
244	or	3,3,3;							\
245	or	3,3,3;							\
246END_##TYPE##_SECTION_NESTED(0, 0, 80)					\
247	or	2,2,2;							\
248	or	2,2,2;							\
249END_##TYPE##_SECTION(0, 0)						\
250	or	1,1,1;							\
251	or	1,1,1;							\
252	/* Basic alt section test, default case should be taken */	\
253BEGIN_##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;							\
260ALT_##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 */		\
264BEGIN_##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;						\
272ALT_##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 */	\
276BEGIN_##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;						\
282ALT_##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 */	\
287BEGIN_##TYPE##_SECTION							\
288	or	3,3,3;							\
289BEGIN_##TYPE##_SECTION_NESTED(95)					\
290	or	3,3,3;							\
291	or	3,3,3;							\
292END_##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;							\
297ALT_##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 */	\
301BEGIN_##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;							\
307BEGIN_##TYPE##_SECTION_NESTED(95)					\
308	or	3,3,3;							\
309END_##TYPE##_SECTION_NESTED(0, 1, 95)					\
310	or	5,5,5;							\
311ALT_##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 */	\
315BEGIN_##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;							\
321BEGIN_##TYPE##_SECTION_NESTED(95)					\
322	or	3,3,3;							\
323END_##TYPE##_SECTION_NESTED(0, 1, 95)					\
324	or	5,5,5;							\
325ALT_##TYPE##_SECTION_END(0, 1)						\
326	or	1,1,1;							\
327	or	1,1,1;							\
328	/* Feature section with nested alt section, default taken */	\
329BEGIN_##TYPE##_SECTION							\
330	or	2,2,2;							\
331BEGIN_##TYPE##_SECTION_NESTED(95)					\
332	or	1,1,1;							\
333##TYPE##_SECTION_ELSE_NESTED(95)					\
334	or	5,5,5;							\
335ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)				\
336	or	2,2,2;							\
337END_##TYPE##_SECTION(0, 0)						\
338	or	1,1,1;							\
339	or	1,1,1;							\
340	/* Feature section with nested alt section, else taken */	\
341BEGIN_##TYPE##_SECTION							\
342	or	2,2,2;							\
343BEGIN_##TYPE##_SECTION_NESTED(95)					\
344	or	1,1,1;							\
345##TYPE##_SECTION_ELSE_NESTED(95)					\
346	or	5,5,5;							\
347ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
348	or	2,2,2;							\
349END_##TYPE##_SECTION(0, 0)						\
350	or	1,1,1;							\
351	or	1,1,1;							\
352	/* Feature section with nested alt section, all nop'ed */	\
353BEGIN_##TYPE##_SECTION							\
354	or	2,2,2;							\
355BEGIN_##TYPE##_SECTION_NESTED(95)					\
356	or	1,1,1;							\
357##TYPE##_SECTION_ELSE_NESTED(95)					\
358	or	5,5,5;							\
359ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)				\
360	or	2,2,2;							\
361END_##TYPE##_SECTION(0, 1)						\
362	or	1,1,1;							\
363	or	1,1,1;							\
364	/* Nested alt sections, default with inner default taken */	\
365BEGIN_##TYPE##_SECTION							\
366	or	2,2,2;							\
367BEGIN_##TYPE##_SECTION_NESTED(95)					\
368	or	1,1,1;							\
369##TYPE##_SECTION_ELSE_NESTED(95)					\
370	or	5,5,5;							\
371ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)				\
372	or	2,2,2;							\
373##TYPE##_SECTION_ELSE							\
374	or	31,31,31;						\
375BEGIN_##TYPE##_SECTION_NESTED(94)					\
376	or	5,5,5;							\
377##TYPE##_SECTION_ELSE_NESTED(94)					\
378	or	1,1,1;							\
379ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)				\
380	or	31,31,31;						\
381ALT_##TYPE##_SECTION_END(0, 0)						\
382	or	1,1,1;							\
383	or	1,1,1;							\
384	/* Nested alt sections, default with inner else taken */	\
385BEGIN_##TYPE##_SECTION							\
386	or	2,2,2;							\
387BEGIN_##TYPE##_SECTION_NESTED(95)					\
388	or	1,1,1;							\
389##TYPE##_SECTION_ELSE_NESTED(95)					\
390	or	5,5,5;							\
391ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
392	or	2,2,2;							\
393##TYPE##_SECTION_ELSE							\
394	or	31,31,31;						\
395BEGIN_##TYPE##_SECTION_NESTED(94)					\
396	or	5,5,5;							\
397##TYPE##_SECTION_ELSE_NESTED(94)					\
398	or	1,1,1;							\
399ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)				\
400	or	31,31,31;						\
401ALT_##TYPE##_SECTION_END(0, 0)						\
402	or	1,1,1;							\
403	or	1,1,1;							\
404	/* Nested alt sections, else with inner default taken */	\
405BEGIN_##TYPE##_SECTION							\
406	or	2,2,2;							\
407BEGIN_##TYPE##_SECTION_NESTED(95)					\
408	or	1,1,1;							\
409##TYPE##_SECTION_ELSE_NESTED(95)					\
410	or	5,5,5;							\
411ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
412	or	2,2,2;							\
413##TYPE##_SECTION_ELSE							\
414	or	31,31,31;						\
415BEGIN_##TYPE##_SECTION_NESTED(94)					\
416	or	5,5,5;							\
417##TYPE##_SECTION_ELSE_NESTED(94)					\
418	or	1,1,1;							\
419ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)				\
420	or	31,31,31;						\
421ALT_##TYPE##_SECTION_END(0, 1)						\
422	or	1,1,1;							\
423	or	1,1,1;							\
424	/* Nested alt sections, else with inner else taken */		\
425BEGIN_##TYPE##_SECTION							\
426	or	2,2,2;							\
427BEGIN_##TYPE##_SECTION_NESTED(95)					\
428	or	1,1,1;							\
429##TYPE##_SECTION_ELSE_NESTED(95)					\
430	or	5,5,5;							\
431ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
432	or	2,2,2;							\
433##TYPE##_SECTION_ELSE							\
434	or	31,31,31;						\
435BEGIN_##TYPE##_SECTION_NESTED(94)					\
436	or	5,5,5;							\
437##TYPE##_SECTION_ELSE_NESTED(94)					\
438	or	1,1,1;							\
439ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)				\
440	or	31,31,31;						\
441ALT_##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 */	\
445BEGIN_##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 							\
451BEGIN_##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;							\
461ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)				\
462ALT_##TYPE##_SECTION_END(0, 1)						\
463	or	1,1,1;							\
464	or	1,1,1;
465
466#define	MAKE_MACRO_TEST_EXPECTED(TYPE)					\
467globl(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
741MAKE_MACRO_TEST(FTR);
742MAKE_MACRO_TEST_EXPECTED(FTR);
743
744#ifdef CONFIG_PPC64
745MAKE_MACRO_TEST(FW_FTR);
746MAKE_MACRO_TEST_EXPECTED(FW_FTR);
747#endif
748
749globl(lwsync_fixup_test)
7501:	or	1,1,1
751	LWSYNC
752globl(end_lwsync_fixup_test)
753
754globl(lwsync_fixup_test_expected_LWSYNC)
7551:	or	1,1,1
756	lwsync
757
758globl(lwsync_fixup_test_expected_SYNC)
7591:	or	1,1,1
760	sync
761
762