forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
862 lines
20 KiB
862 lines
20 KiB
/* 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
|
|
|