| /* 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 |