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
863

source code of linux/arch/powerpc/lib/feature-fixups-test.S