| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Copyright 2008 Michael Ellerman, IBM Corporation. | |
| */ | |
| #include <asm/feature-fixups.h> | |
| #include <asm/ppc_asm.h> | |
| #include <asm/synch.h> | |
| #include <asm/asm-compat.h> | |
| #include <asm/ppc-opcode.h> | |
| .text | |
| #define globl(x) \ | |
| .globl x; \ | |
| x: | |
| globl(ftr_fixup_test1) | |
| or 1,1,1 | |
| or 2,2,2 /* fixup will nop out this instruction */ | |
| or 3,3,3 | |
| globl(end_ftr_fixup_test1) | |
| globl(ftr_fixup_test1_orig) | |
| or 1,1,1 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(ftr_fixup_test1_expected) | |
| or 1,1,1 | |
| nop | |
| or 3,3,3 | |
| globl(ftr_fixup_test2) | |
| or 1,1,1 | |
| or 2,2,2 /* fixup will replace this with ftr_fixup_test2_alt */ | |
| or 3,3,3 | |
| globl(end_ftr_fixup_test2) | |
| globl(ftr_fixup_test2_orig) | |
| or 1,1,1 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(ftr_fixup_test2_alt) | |
| or 31,31,31 | |
| globl(ftr_fixup_test2_expected) | |
| or 1,1,1 | |
| or 31,31,31 | |
| or 3,3,3 | |
| globl(ftr_fixup_test3) | |
| or 1,1,1 | |
| or 2,2,2 /* fixup will fail to replace this */ | |
| or 3,3,3 | |
| globl(end_ftr_fixup_test3) | |
| globl(ftr_fixup_test3_orig) | |
| or 1,1,1 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(ftr_fixup_test3_alt) | |
| or 31,31,31 | |
| or 31,31,31 | |
| globl(ftr_fixup_test4) | |
| or 1,1,1 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(end_ftr_fixup_test4) | |
| globl(ftr_fixup_test4_expected) | |
| or 1,1,1 | |
| or 31,31,31 | |
| or 31,31,31 | |
| nop | |
| nop | |
| or 3,3,3 | |
| globl(ftr_fixup_test4_orig) | |
| or 1,1,1 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(ftr_fixup_test4_alt) | |
| or 31,31,31 | |
| or 31,31,31 | |
| globl(ftr_fixup_test5) | |
| or 1,1,1 | |
| BEGIN_FTR_SECTION | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| FTR_SECTION_ELSE | |
| 2: b 3f | |
| 3: or 5,5,5 | |
| beq 3b | |
| b 1f | |
| or 6,6,6 | |
| b 2b | |
| 1: bdnz 3b | |
| ALT_FTR_SECTION_END(0, 1) | |
| or 1,1,1 | |
| globl(end_ftr_fixup_test5) | |
| globl(ftr_fixup_test5_expected) | |
| or 1,1,1 | |
| 2: b 3f | |
| 3: or 5,5,5 | |
| beq 3b | |
| b 1f | |
| or 6,6,6 | |
| b 2b | |
| 1: bdnz 3b | |
| or 1,1,1 | |
| globl(ftr_fixup_test6) | |
| 1: or 1,1,1 | |
| BEGIN_FTR_SECTION | |
| or 5,5,5 | |
| 2: PPC_LCMPI r3,0 | |
| beq 4f | |
| blt 2b | |
| b 1b | |
| b 4f | |
| FTR_SECTION_ELSE | |
| 2: or 2,2,2 | |
| PPC_LCMPI r3,1 | |
| beq 3f | |
| blt 2b | |
| b 3f | |
| b 1b | |
| ALT_FTR_SECTION_END(0, 1) | |
| 3: or 1,1,1 | |
| or 2,2,2 | |
| 4: or 3,3,3 | |
| globl(end_ftr_fixup_test6) | |
| globl(ftr_fixup_test6_expected) | |
| 1: or 1,1,1 | |
| 2: or 2,2,2 | |
| PPC_LCMPI r3,1 | |
| beq 3f | |
| blt 2b | |
| b 3f | |
| b 1b | |
| 3: or 1,1,1 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(ftr_fixup_test7) | |
| or 1,1,1 | |
| BEGIN_FTR_SECTION | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| FTR_SECTION_ELSE | |
| 2: b 3f | |
| 3: or 5,5,5 | |
| beq 3b | |
| b 1f | |
| or 6,6,6 | |
| b 2b | |
| bdnz 3b | |
| 1: | |
| ALT_FTR_SECTION_END(0, 1) | |
| or 1,1,1 | |
| or 1,1,1 | |
| globl(end_ftr_fixup_test7) | |
| nop | |
| globl(ftr_fixup_test7_expected) | |
| or 1,1,1 | |
| 2: b 3f | |
| 3: or 5,5,5 | |
| beq 3b | |
| b 1f | |
| or 6,6,6 | |
| b 2b | |
| bdnz 3b | |
| 1: or 1,1,1 | |
| #if 0 | |
| /* Test that if we have a larger else case the assembler spots it and | |
| * reports an error. #if 0'ed so as not to break the build normally. | |
| */ | |
| ftr_fixup_test_too_big: | |
| or 1,1,1 | |
| BEGIN_FTR_SECTION | |
| or 2,2,2 | |
| or 2,2,2 | |
| or 2,2,2 | |
| FTR_SECTION_ELSE | |
| or 3,3,3 | |
| or 3,3,3 | |
| or 3,3,3 | |
| or 3,3,3 | |
| ALT_FTR_SECTION_END(0, 1) | |
| or 1,1,1 | |
| #endif | |
| #define MAKE_MACRO_TEST(TYPE) \ | |
| globl(ftr_fixup_test_ ##TYPE##_macros) \ | |
| or 1,1,1; \ | |
| /* Basic test, this section should all be nop'ed */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Basic test, this section should NOT be nop'ed */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nesting test, inner section should be nop'ed */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(80) \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| END_##TYPE##_SECTION_NESTED(0, 1, 80) \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nesting test, whole section should be nop'ed */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(80) \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| END_##TYPE##_SECTION_NESTED(0, 0, 80) \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nesting test, none should be nop'ed */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(80) \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| END_##TYPE##_SECTION_NESTED(0, 0, 80) \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Basic alt section test, default case should be taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 5,5,5; \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Basic alt section test, else case should be taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 31,31,31; \ | |
| or 31,31,31; \ | |
| or 31,31,31; \ | |
| ALT_##TYPE##_SECTION_END(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt with smaller else case, should be padded with nops */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 31,31,31; \ | |
| ALT_##TYPE##_SECTION_END(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt section with nested section in default case */ \ | |
| /* Default case should be taken, with nop'ed inner section */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 3,3,3; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| END_##TYPE##_SECTION_NESTED(0, 1, 95) \ | |
| or 3,3,3; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| ALT_##TYPE##_SECTION_END(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt section with nested section in else, default taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 5,5,5; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 3,3,3; \ | |
| END_##TYPE##_SECTION_NESTED(0, 1, 95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt section with nested section in else, else taken & nop */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 5,5,5; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 3,3,3; \ | |
| END_##TYPE##_SECTION_NESTED(0, 1, 95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Feature section with nested alt section, default taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Feature section with nested alt section, else taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Feature section with nested alt section, all nop'ed */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) \ | |
| or 2,2,2; \ | |
| END_##TYPE##_SECTION(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, default with inner default taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) \ | |
| or 2,2,2; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 31,31,31; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
| or 5,5,5; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
| or 1,1,1; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) \ | |
| or 31,31,31; \ | |
| ALT_##TYPE##_SECTION_END(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, default with inner else taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
| or 2,2,2; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 31,31,31; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
| or 5,5,5; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
| or 1,1,1; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) \ | |
| or 31,31,31; \ | |
| ALT_##TYPE##_SECTION_END(0, 0) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, else with inner default taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
| or 2,2,2; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 31,31,31; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
| or 5,5,5; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
| or 1,1,1; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) \ | |
| or 31,31,31; \ | |
| ALT_##TYPE##_SECTION_END(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, else with inner else taken */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
| or 1,1,1; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
| or 5,5,5; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
| or 2,2,2; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| or 31,31,31; \ | |
| BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
| or 5,5,5; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
| or 1,1,1; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) \ | |
| or 31,31,31; \ | |
| ALT_##TYPE##_SECTION_END(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, else can have large else case */ \ | |
| BEGIN_##TYPE##_SECTION \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| ##TYPE##_SECTION_ELSE \ | |
| BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
| or 5,5,5; \ | |
| or 5,5,5; \ | |
| or 5,5,5; \ | |
| or 5,5,5; \ | |
| ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) \ | |
| ALT_##TYPE##_SECTION_END(0, 1) \ | |
| or 1,1,1; \ | |
| or 1,1,1; | |
| #define MAKE_MACRO_TEST_EXPECTED(TYPE) \ | |
| globl(ftr_fixup_test_ ##TYPE##_macros_expected) \ | |
| or 1,1,1; \ | |
| /* Basic test, this section should all be nop'ed */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| nop; \ | |
| nop; \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Basic test, this section should NOT be nop'ed */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| /* END_##TYPE##_SECTION(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nesting test, inner section should be nop'ed */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(80) */ \ | |
| nop; \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION_NESTED(0, 1, 80) */ \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| /* END_##TYPE##_SECTION(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nesting test, whole section should be nop'ed */ \ | |
| /* NB. inner section is not nop'ed, but then entire outer is */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| nop; \ | |
| nop; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(80) */ \ | |
| nop; \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION_NESTED(0, 0, 80) */ \ | |
| nop; \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nesting test, none should be nop'ed */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(80) */ \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| /* END_##TYPE##_SECTION_NESTED(0, 0, 80) */ \ | |
| or 2,2,2; \ | |
| or 2,2,2; \ | |
| /* END_##TYPE##_SECTION(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Basic alt section test, default case should be taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| /* or 5,5,5; */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Basic alt section test, else case should be taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| /* or 3,3,3; */ \ | |
| /* or 3,3,3; */ \ | |
| /* or 3,3,3; */ \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| or 31,31,31; \ | |
| or 31,31,31; \ | |
| or 31,31,31; \ | |
| /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt with smaller else case, should be padded with nops */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| /* or 3,3,3; */ \ | |
| /* or 3,3,3; */ \ | |
| /* or 3,3,3; */ \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| or 31,31,31; \ | |
| nop; \ | |
| nop; \ | |
| /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt section with nested section in default case */ \ | |
| /* Default case should be taken, with nop'ed inner section */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 3,3,3; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| nop; \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \ | |
| or 3,3,3; \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| /* or 2,2,2; */ \ | |
| /* or 2,2,2; */ \ | |
| /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt section with nested section in else, default taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| or 3,3,3; \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| /* or 5,5,5; */ \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| /* or 3,3,3; */ \ | |
| /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Alt section with nested section in else, else taken & nop */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| /* or 3,3,3; */ \ | |
| /* or 3,3,3; */ \ | |
| /* or 3,3,3; */ \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| or 5,5,5; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \ | |
| or 5,5,5; \ | |
| /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Feature section with nested alt section, default taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| or 1,1,1; \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \ | |
| or 2,2,2; \ | |
| /* END_##TYPE##_SECTION(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Feature section with nested alt section, else taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| or 5,5,5; \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
| or 2,2,2; \ | |
| /* END_##TYPE##_SECTION(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Feature section with nested alt section, all nop'ed */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| nop; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| nop; \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \ | |
| nop; \ | |
| /* END_##TYPE##_SECTION(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, default with inner default taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| or 1,1,1; \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \ | |
| or 2,2,2; \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| /* or 31,31,31; */ \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \ | |
| /* or 31,31,31; */ \ | |
| /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, default with inner else taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| or 2,2,2; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| or 5,5,5; \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
| or 2,2,2; \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| /* or 31,31,31; */ \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \ | |
| /* or 31,31,31; */ \ | |
| /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, else with inner default taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| /* or 2,2,2; */ \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
| /* or 2,2,2; */ \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| or 31,31,31; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
| or 5,5,5; \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \ | |
| or 31,31,31; \ | |
| /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, else with inner else taken */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| /* or 2,2,2; */ \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
| /* or 1,1,1; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
| /* or 2,2,2; */ \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| or 31,31,31; \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
| /* or 5,5,5; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
| or 1,1,1; \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */ \ | |
| or 31,31,31; \ | |
| /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* Nested alt sections, else can have large else case */ \ | |
| /* BEGIN_##TYPE##_SECTION */ \ | |
| /* or 2,2,2; */ \ | |
| /* or 2,2,2; */ \ | |
| /* or 2,2,2; */ \ | |
| /* or 2,2,2; */ \ | |
| /* ##TYPE##_SECTION_ELSE */ \ | |
| /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
| /* or 5,5,5; */ \ | |
| /* or 5,5,5; */ \ | |
| /* or 5,5,5; */ \ | |
| /* or 5,5,5; */ \ | |
| /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| or 1,1,1; \ | |
| /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */ \ | |
| /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
| or 1,1,1; \ | |
| or 1,1,1; | |
| MAKE_MACRO_TEST(FTR); | |
| MAKE_MACRO_TEST_EXPECTED(FTR); | |
| #ifdef CONFIG_PPC64 | |
| MAKE_MACRO_TEST(FW_FTR); | |
| MAKE_MACRO_TEST_EXPECTED(FW_FTR); | |
| #endif | |
| globl(lwsync_fixup_test) | |
| 1: or 1,1,1 | |
| LWSYNC | |
| globl(end_lwsync_fixup_test) | |
| globl(lwsync_fixup_test_expected_LWSYNC) | |
| 1: or 1,1,1 | |
| lwsync | |
| globl(lwsync_fixup_test_expected_SYNC) | |
| 1: or 1,1,1 | |
| sync | |
| globl(ftr_fixup_prefix1) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000000 | |
| or 2,2,2 | |
| globl(end_ftr_fixup_prefix1) | |
| globl(ftr_fixup_prefix1_orig) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000000 | |
| or 2,2,2 | |
| globl(ftr_fixup_prefix1_expected) | |
| or 1,1,1 | |
| nop | |
| nop | |
| or 2,2,2 | |
| globl(ftr_fixup_prefix2) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000000 | |
| or 2,2,2 | |
| globl(end_ftr_fixup_prefix2) | |
| globl(ftr_fixup_prefix2_orig) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000000 | |
| or 2,2,2 | |
| globl(ftr_fixup_prefix2_alt) | |
| .long OP_PREFIX << 26 | |
| .long 0x0000001 | |
| globl(ftr_fixup_prefix2_expected) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000001 | |
| or 2,2,2 | |
| globl(ftr_fixup_prefix3) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000000 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(end_ftr_fixup_prefix3) | |
| globl(ftr_fixup_prefix3_orig) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000000 | |
| or 2,2,2 | |
| or 3,3,3 | |
| globl(ftr_fixup_prefix3_alt) | |
| .long OP_PREFIX << 26 | |
| .long 0x0000001 | |
| nop | |
| globl(ftr_fixup_prefix3_expected) | |
| or 1,1,1 | |
| .long OP_PREFIX << 26 | |
| .long 0x0000001 | |
| nop | |
| or 3,3,3 |