Linux Audio

Check our new training course

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