162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright 2008 Michael Ellerman, IBM Corporation.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <asm/feature-fixups.h>
762306a36Sopenharmony_ci#include <asm/ppc_asm.h>
862306a36Sopenharmony_ci#include <asm/synch.h>
962306a36Sopenharmony_ci#include <asm/asm-compat.h>
1062306a36Sopenharmony_ci#include <asm/ppc-opcode.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci	.text
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define globl(x)		\
1562306a36Sopenharmony_ci	.globl x;	\
1662306a36Sopenharmony_cix:
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciglobl(ftr_fixup_test1)
1962306a36Sopenharmony_ci	or	1,1,1
2062306a36Sopenharmony_ci	or	2,2,2	/* fixup will nop out this instruction */
2162306a36Sopenharmony_ci	or	3,3,3
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciglobl(end_ftr_fixup_test1)
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciglobl(ftr_fixup_test1_orig)
2662306a36Sopenharmony_ci	or	1,1,1
2762306a36Sopenharmony_ci	or	2,2,2
2862306a36Sopenharmony_ci	or	3,3,3
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciglobl(ftr_fixup_test1_expected)
3162306a36Sopenharmony_ci	or	1,1,1
3262306a36Sopenharmony_ci	nop
3362306a36Sopenharmony_ci	or	3,3,3
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciglobl(ftr_fixup_test2)
3662306a36Sopenharmony_ci	or	1,1,1
3762306a36Sopenharmony_ci	or	2,2,2	/* fixup will replace this with ftr_fixup_test2_alt */
3862306a36Sopenharmony_ci	or	3,3,3
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciglobl(end_ftr_fixup_test2)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciglobl(ftr_fixup_test2_orig)
4362306a36Sopenharmony_ci	or	1,1,1
4462306a36Sopenharmony_ci	or	2,2,2
4562306a36Sopenharmony_ci	or	3,3,3
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciglobl(ftr_fixup_test2_alt)
4862306a36Sopenharmony_ci	or	31,31,31
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciglobl(ftr_fixup_test2_expected)
5162306a36Sopenharmony_ci	or	1,1,1
5262306a36Sopenharmony_ci	or	31,31,31
5362306a36Sopenharmony_ci	or	3,3,3
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciglobl(ftr_fixup_test3)
5662306a36Sopenharmony_ci	or	1,1,1
5762306a36Sopenharmony_ci	or	2,2,2	/* fixup will fail to replace this */
5862306a36Sopenharmony_ci	or	3,3,3
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciglobl(end_ftr_fixup_test3)
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciglobl(ftr_fixup_test3_orig)
6362306a36Sopenharmony_ci	or	1,1,1
6462306a36Sopenharmony_ci	or	2,2,2
6562306a36Sopenharmony_ci	or	3,3,3
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciglobl(ftr_fixup_test3_alt)
6862306a36Sopenharmony_ci	or	31,31,31
6962306a36Sopenharmony_ci	or	31,31,31
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ciglobl(ftr_fixup_test4)
7262306a36Sopenharmony_ci	or	1,1,1
7362306a36Sopenharmony_ci	or	2,2,2
7462306a36Sopenharmony_ci	or	2,2,2
7562306a36Sopenharmony_ci	or	2,2,2
7662306a36Sopenharmony_ci	or	2,2,2
7762306a36Sopenharmony_ci	or	3,3,3
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciglobl(end_ftr_fixup_test4)
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ciglobl(ftr_fixup_test4_expected)
8262306a36Sopenharmony_ci	or	1,1,1
8362306a36Sopenharmony_ci	or	31,31,31
8462306a36Sopenharmony_ci	or	31,31,31
8562306a36Sopenharmony_ci	nop
8662306a36Sopenharmony_ci	nop
8762306a36Sopenharmony_ci	or	3,3,3
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciglobl(ftr_fixup_test4_orig)
9062306a36Sopenharmony_ci	or	1,1,1
9162306a36Sopenharmony_ci	or	2,2,2
9262306a36Sopenharmony_ci	or	2,2,2
9362306a36Sopenharmony_ci	or	2,2,2
9462306a36Sopenharmony_ci	or	2,2,2
9562306a36Sopenharmony_ci	or	3,3,3
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciglobl(ftr_fixup_test4_alt)
9862306a36Sopenharmony_ci	or	31,31,31
9962306a36Sopenharmony_ci	or	31,31,31
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ciglobl(ftr_fixup_test5)
10362306a36Sopenharmony_ci	or	1,1,1
10462306a36Sopenharmony_ciBEGIN_FTR_SECTION
10562306a36Sopenharmony_ci	or	2,2,2
10662306a36Sopenharmony_ci	or	2,2,2
10762306a36Sopenharmony_ci	or	2,2,2
10862306a36Sopenharmony_ci	or	2,2,2
10962306a36Sopenharmony_ci	or	2,2,2
11062306a36Sopenharmony_ci	or	2,2,2
11162306a36Sopenharmony_ci	or	2,2,2
11262306a36Sopenharmony_ciFTR_SECTION_ELSE
11362306a36Sopenharmony_ci2:	b	3f
11462306a36Sopenharmony_ci3:	or	5,5,5
11562306a36Sopenharmony_ci	beq	3b
11662306a36Sopenharmony_ci	b	1f
11762306a36Sopenharmony_ci	or	6,6,6
11862306a36Sopenharmony_ci	b	2b
11962306a36Sopenharmony_ci1:	bdnz	3b
12062306a36Sopenharmony_ciALT_FTR_SECTION_END(0, 1)
12162306a36Sopenharmony_ci	or	1,1,1
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciglobl(end_ftr_fixup_test5)
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ciglobl(ftr_fixup_test5_expected)
12662306a36Sopenharmony_ci	or	1,1,1
12762306a36Sopenharmony_ci2:	b	3f
12862306a36Sopenharmony_ci3:	or	5,5,5
12962306a36Sopenharmony_ci	beq	3b
13062306a36Sopenharmony_ci	b	1f
13162306a36Sopenharmony_ci	or	6,6,6
13262306a36Sopenharmony_ci	b	2b
13362306a36Sopenharmony_ci1:	bdnz	3b
13462306a36Sopenharmony_ci	or	1,1,1
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ciglobl(ftr_fixup_test6)
13762306a36Sopenharmony_ci1:	or	1,1,1
13862306a36Sopenharmony_ciBEGIN_FTR_SECTION
13962306a36Sopenharmony_ci	or	5,5,5
14062306a36Sopenharmony_ci2:	PPC_LCMPI	r3,0
14162306a36Sopenharmony_ci	beq	4f
14262306a36Sopenharmony_ci	blt	2b
14362306a36Sopenharmony_ci	b	1b
14462306a36Sopenharmony_ci	b	4f
14562306a36Sopenharmony_ciFTR_SECTION_ELSE
14662306a36Sopenharmony_ci2:	or	2,2,2
14762306a36Sopenharmony_ci	PPC_LCMPI	r3,1
14862306a36Sopenharmony_ci	beq	3f
14962306a36Sopenharmony_ci	blt	2b
15062306a36Sopenharmony_ci	b	3f
15162306a36Sopenharmony_ci	b	1b
15262306a36Sopenharmony_ciALT_FTR_SECTION_END(0, 1)
15362306a36Sopenharmony_ci3:	or	1,1,1
15462306a36Sopenharmony_ci	or	2,2,2
15562306a36Sopenharmony_ci4:	or	3,3,3
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciglobl(end_ftr_fixup_test6)
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ciglobl(ftr_fixup_test6_expected)
16062306a36Sopenharmony_ci1:	or	1,1,1
16162306a36Sopenharmony_ci2:	or	2,2,2
16262306a36Sopenharmony_ci	PPC_LCMPI	r3,1
16362306a36Sopenharmony_ci	beq	3f
16462306a36Sopenharmony_ci	blt	2b
16562306a36Sopenharmony_ci	b	3f
16662306a36Sopenharmony_ci	b	1b
16762306a36Sopenharmony_ci3:	or	1,1,1
16862306a36Sopenharmony_ci	or	2,2,2
16962306a36Sopenharmony_ci	or	3,3,3
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ciglobl(ftr_fixup_test7)
17262306a36Sopenharmony_ci	or	1,1,1
17362306a36Sopenharmony_ciBEGIN_FTR_SECTION
17462306a36Sopenharmony_ci	or	2,2,2
17562306a36Sopenharmony_ci	or	2,2,2
17662306a36Sopenharmony_ci	or	2,2,2
17762306a36Sopenharmony_ci	or	2,2,2
17862306a36Sopenharmony_ci	or	2,2,2
17962306a36Sopenharmony_ci	or	2,2,2
18062306a36Sopenharmony_ci	or	2,2,2
18162306a36Sopenharmony_ciFTR_SECTION_ELSE
18262306a36Sopenharmony_ci2:	b	3f
18362306a36Sopenharmony_ci3:	or	5,5,5
18462306a36Sopenharmony_ci	beq	3b
18562306a36Sopenharmony_ci	b	1f
18662306a36Sopenharmony_ci	or	6,6,6
18762306a36Sopenharmony_ci	b	2b
18862306a36Sopenharmony_ci	bdnz	3b
18962306a36Sopenharmony_ci1:
19062306a36Sopenharmony_ciALT_FTR_SECTION_END(0, 1)
19162306a36Sopenharmony_ci	or	1,1,1
19262306a36Sopenharmony_ci	or	1,1,1
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ciglobl(end_ftr_fixup_test7)
19562306a36Sopenharmony_ci	nop
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ciglobl(ftr_fixup_test7_expected)
19862306a36Sopenharmony_ci	or	1,1,1
19962306a36Sopenharmony_ci2:	b	3f
20062306a36Sopenharmony_ci3:	or	5,5,5
20162306a36Sopenharmony_ci	beq	3b
20262306a36Sopenharmony_ci	b	1f
20362306a36Sopenharmony_ci	or	6,6,6
20462306a36Sopenharmony_ci	b	2b
20562306a36Sopenharmony_ci	bdnz	3b
20662306a36Sopenharmony_ci1:	or	1,1,1
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci#if 0
20962306a36Sopenharmony_ci/* Test that if we have a larger else case the assembler spots it and
21062306a36Sopenharmony_ci * reports an error. #if 0'ed so as not to break the build normally.
21162306a36Sopenharmony_ci */
21262306a36Sopenharmony_ciftr_fixup_test_too_big:
21362306a36Sopenharmony_ci	or	1,1,1
21462306a36Sopenharmony_ciBEGIN_FTR_SECTION
21562306a36Sopenharmony_ci	or	2,2,2
21662306a36Sopenharmony_ci	or	2,2,2
21762306a36Sopenharmony_ci	or	2,2,2
21862306a36Sopenharmony_ciFTR_SECTION_ELSE
21962306a36Sopenharmony_ci	or	3,3,3
22062306a36Sopenharmony_ci	or	3,3,3
22162306a36Sopenharmony_ci	or	3,3,3
22262306a36Sopenharmony_ci	or	3,3,3
22362306a36Sopenharmony_ciALT_FTR_SECTION_END(0, 1)
22462306a36Sopenharmony_ci	or	1,1,1
22562306a36Sopenharmony_ci#endif
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci#define	MAKE_MACRO_TEST(TYPE)						\
22862306a36Sopenharmony_ciglobl(ftr_fixup_test_ ##TYPE##_macros)					\
22962306a36Sopenharmony_ci	or	1,1,1;							\
23062306a36Sopenharmony_ci	/* Basic test, this section should all be nop'ed */		\
23162306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
23262306a36Sopenharmony_ci	or	2,2,2;							\
23362306a36Sopenharmony_ci	or	2,2,2;							\
23462306a36Sopenharmony_ci	or	2,2,2;							\
23562306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 1)						\
23662306a36Sopenharmony_ci	or	1,1,1;							\
23762306a36Sopenharmony_ci	or	1,1,1;							\
23862306a36Sopenharmony_ci	/* Basic test, this section should NOT be nop'ed */		\
23962306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
24062306a36Sopenharmony_ci	or	2,2,2;							\
24162306a36Sopenharmony_ci	or	2,2,2;							\
24262306a36Sopenharmony_ci	or	2,2,2;							\
24362306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 0)						\
24462306a36Sopenharmony_ci	or	1,1,1;							\
24562306a36Sopenharmony_ci	or	1,1,1;							\
24662306a36Sopenharmony_ci	/* Nesting test, inner section should be nop'ed */		\
24762306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
24862306a36Sopenharmony_ci	or	2,2,2;							\
24962306a36Sopenharmony_ci	or	2,2,2;							\
25062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(80)					\
25162306a36Sopenharmony_ci	or	3,3,3;							\
25262306a36Sopenharmony_ci	or	3,3,3;							\
25362306a36Sopenharmony_ciEND_##TYPE##_SECTION_NESTED(0, 1, 80)					\
25462306a36Sopenharmony_ci	or	2,2,2;							\
25562306a36Sopenharmony_ci	or	2,2,2;							\
25662306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 0)						\
25762306a36Sopenharmony_ci	or	1,1,1;							\
25862306a36Sopenharmony_ci	or	1,1,1;							\
25962306a36Sopenharmony_ci	/* Nesting test, whole section should be nop'ed */		\
26062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
26162306a36Sopenharmony_ci	or	2,2,2;							\
26262306a36Sopenharmony_ci	or	2,2,2;							\
26362306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(80)					\
26462306a36Sopenharmony_ci	or	3,3,3;							\
26562306a36Sopenharmony_ci	or	3,3,3;							\
26662306a36Sopenharmony_ciEND_##TYPE##_SECTION_NESTED(0, 0, 80)					\
26762306a36Sopenharmony_ci	or	2,2,2;							\
26862306a36Sopenharmony_ci	or	2,2,2;							\
26962306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 1)						\
27062306a36Sopenharmony_ci	or	1,1,1;							\
27162306a36Sopenharmony_ci	or	1,1,1;							\
27262306a36Sopenharmony_ci	/* Nesting test, none should be nop'ed */			\
27362306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
27462306a36Sopenharmony_ci	or	2,2,2;							\
27562306a36Sopenharmony_ci	or	2,2,2;							\
27662306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(80)					\
27762306a36Sopenharmony_ci	or	3,3,3;							\
27862306a36Sopenharmony_ci	or	3,3,3;							\
27962306a36Sopenharmony_ciEND_##TYPE##_SECTION_NESTED(0, 0, 80)					\
28062306a36Sopenharmony_ci	or	2,2,2;							\
28162306a36Sopenharmony_ci	or	2,2,2;							\
28262306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 0)						\
28362306a36Sopenharmony_ci	or	1,1,1;							\
28462306a36Sopenharmony_ci	or	1,1,1;							\
28562306a36Sopenharmony_ci	/* Basic alt section test, default case should be taken */	\
28662306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
28762306a36Sopenharmony_ci	or	3,3,3;							\
28862306a36Sopenharmony_ci	or	3,3,3;							\
28962306a36Sopenharmony_ci	or	3,3,3;							\
29062306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
29162306a36Sopenharmony_ci	or	5,5,5;							\
29262306a36Sopenharmony_ci	or	5,5,5;							\
29362306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 0)						\
29462306a36Sopenharmony_ci	or	1,1,1;							\
29562306a36Sopenharmony_ci	or	1,1,1;							\
29662306a36Sopenharmony_ci	/* Basic alt section test, else case should be taken */		\
29762306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
29862306a36Sopenharmony_ci	or	3,3,3;							\
29962306a36Sopenharmony_ci	or	3,3,3;							\
30062306a36Sopenharmony_ci	or	3,3,3;							\
30162306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
30262306a36Sopenharmony_ci	or	31,31,31;						\
30362306a36Sopenharmony_ci	or	31,31,31;						\
30462306a36Sopenharmony_ci	or	31,31,31;						\
30562306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 1)						\
30662306a36Sopenharmony_ci	or	1,1,1;							\
30762306a36Sopenharmony_ci	or	1,1,1;							\
30862306a36Sopenharmony_ci	/* Alt with smaller else case, should be padded with nops */	\
30962306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
31062306a36Sopenharmony_ci	or	3,3,3;							\
31162306a36Sopenharmony_ci	or	3,3,3;							\
31262306a36Sopenharmony_ci	or	3,3,3;							\
31362306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
31462306a36Sopenharmony_ci	or	31,31,31;						\
31562306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 1)						\
31662306a36Sopenharmony_ci	or	1,1,1;							\
31762306a36Sopenharmony_ci	or	1,1,1;							\
31862306a36Sopenharmony_ci	/* Alt section with nested section in default case */		\
31962306a36Sopenharmony_ci	/* Default case should be taken, with nop'ed inner section */	\
32062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
32162306a36Sopenharmony_ci	or	3,3,3;							\
32262306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
32362306a36Sopenharmony_ci	or	3,3,3;							\
32462306a36Sopenharmony_ci	or	3,3,3;							\
32562306a36Sopenharmony_ciEND_##TYPE##_SECTION_NESTED(0, 1, 95)					\
32662306a36Sopenharmony_ci	or	3,3,3;							\
32762306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
32862306a36Sopenharmony_ci	or	2,2,2;							\
32962306a36Sopenharmony_ci	or	2,2,2;							\
33062306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 0)						\
33162306a36Sopenharmony_ci	or	1,1,1;							\
33262306a36Sopenharmony_ci	or	1,1,1;							\
33362306a36Sopenharmony_ci	/* Alt section with nested section in else, default taken */	\
33462306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
33562306a36Sopenharmony_ci	or	3,3,3;							\
33662306a36Sopenharmony_ci	or	3,3,3;							\
33762306a36Sopenharmony_ci	or	3,3,3;							\
33862306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
33962306a36Sopenharmony_ci	or	5,5,5;							\
34062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
34162306a36Sopenharmony_ci	or	3,3,3;							\
34262306a36Sopenharmony_ciEND_##TYPE##_SECTION_NESTED(0, 1, 95)					\
34362306a36Sopenharmony_ci	or	5,5,5;							\
34462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 0)						\
34562306a36Sopenharmony_ci	or	1,1,1;							\
34662306a36Sopenharmony_ci	or	1,1,1;							\
34762306a36Sopenharmony_ci	/* Alt section with nested section in else, else taken & nop */	\
34862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
34962306a36Sopenharmony_ci	or	3,3,3;							\
35062306a36Sopenharmony_ci	or	3,3,3;							\
35162306a36Sopenharmony_ci	or	3,3,3;							\
35262306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
35362306a36Sopenharmony_ci	or	5,5,5;							\
35462306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
35562306a36Sopenharmony_ci	or	3,3,3;							\
35662306a36Sopenharmony_ciEND_##TYPE##_SECTION_NESTED(0, 1, 95)					\
35762306a36Sopenharmony_ci	or	5,5,5;							\
35862306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 1)						\
35962306a36Sopenharmony_ci	or	1,1,1;							\
36062306a36Sopenharmony_ci	or	1,1,1;							\
36162306a36Sopenharmony_ci	/* Feature section with nested alt section, default taken */	\
36262306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
36362306a36Sopenharmony_ci	or	2,2,2;							\
36462306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
36562306a36Sopenharmony_ci	or	1,1,1;							\
36662306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
36762306a36Sopenharmony_ci	or	5,5,5;							\
36862306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)				\
36962306a36Sopenharmony_ci	or	2,2,2;							\
37062306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 0)						\
37162306a36Sopenharmony_ci	or	1,1,1;							\
37262306a36Sopenharmony_ci	or	1,1,1;							\
37362306a36Sopenharmony_ci	/* Feature section with nested alt section, else taken */	\
37462306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
37562306a36Sopenharmony_ci	or	2,2,2;							\
37662306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
37762306a36Sopenharmony_ci	or	1,1,1;							\
37862306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
37962306a36Sopenharmony_ci	or	5,5,5;							\
38062306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
38162306a36Sopenharmony_ci	or	2,2,2;							\
38262306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 0)						\
38362306a36Sopenharmony_ci	or	1,1,1;							\
38462306a36Sopenharmony_ci	or	1,1,1;							\
38562306a36Sopenharmony_ci	/* Feature section with nested alt section, all nop'ed */	\
38662306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
38762306a36Sopenharmony_ci	or	2,2,2;							\
38862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
38962306a36Sopenharmony_ci	or	1,1,1;							\
39062306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
39162306a36Sopenharmony_ci	or	5,5,5;							\
39262306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)				\
39362306a36Sopenharmony_ci	or	2,2,2;							\
39462306a36Sopenharmony_ciEND_##TYPE##_SECTION(0, 1)						\
39562306a36Sopenharmony_ci	or	1,1,1;							\
39662306a36Sopenharmony_ci	or	1,1,1;							\
39762306a36Sopenharmony_ci	/* Nested alt sections, default with inner default taken */	\
39862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
39962306a36Sopenharmony_ci	or	2,2,2;							\
40062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
40162306a36Sopenharmony_ci	or	1,1,1;							\
40262306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
40362306a36Sopenharmony_ci	or	5,5,5;							\
40462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)				\
40562306a36Sopenharmony_ci	or	2,2,2;							\
40662306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
40762306a36Sopenharmony_ci	or	31,31,31;						\
40862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(94)					\
40962306a36Sopenharmony_ci	or	5,5,5;							\
41062306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(94)					\
41162306a36Sopenharmony_ci	or	1,1,1;							\
41262306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)				\
41362306a36Sopenharmony_ci	or	31,31,31;						\
41462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 0)						\
41562306a36Sopenharmony_ci	or	1,1,1;							\
41662306a36Sopenharmony_ci	or	1,1,1;							\
41762306a36Sopenharmony_ci	/* Nested alt sections, default with inner else taken */	\
41862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
41962306a36Sopenharmony_ci	or	2,2,2;							\
42062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
42162306a36Sopenharmony_ci	or	1,1,1;							\
42262306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
42362306a36Sopenharmony_ci	or	5,5,5;							\
42462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
42562306a36Sopenharmony_ci	or	2,2,2;							\
42662306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
42762306a36Sopenharmony_ci	or	31,31,31;						\
42862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(94)					\
42962306a36Sopenharmony_ci	or	5,5,5;							\
43062306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(94)					\
43162306a36Sopenharmony_ci	or	1,1,1;							\
43262306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)				\
43362306a36Sopenharmony_ci	or	31,31,31;						\
43462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 0)						\
43562306a36Sopenharmony_ci	or	1,1,1;							\
43662306a36Sopenharmony_ci	or	1,1,1;							\
43762306a36Sopenharmony_ci	/* Nested alt sections, else with inner default taken */	\
43862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
43962306a36Sopenharmony_ci	or	2,2,2;							\
44062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
44162306a36Sopenharmony_ci	or	1,1,1;							\
44262306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
44362306a36Sopenharmony_ci	or	5,5,5;							\
44462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
44562306a36Sopenharmony_ci	or	2,2,2;							\
44662306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
44762306a36Sopenharmony_ci	or	31,31,31;						\
44862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(94)					\
44962306a36Sopenharmony_ci	or	5,5,5;							\
45062306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(94)					\
45162306a36Sopenharmony_ci	or	1,1,1;							\
45262306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)				\
45362306a36Sopenharmony_ci	or	31,31,31;						\
45462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 1)						\
45562306a36Sopenharmony_ci	or	1,1,1;							\
45662306a36Sopenharmony_ci	or	1,1,1;							\
45762306a36Sopenharmony_ci	/* Nested alt sections, else with inner else taken */		\
45862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
45962306a36Sopenharmony_ci	or	2,2,2;							\
46062306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(95)					\
46162306a36Sopenharmony_ci	or	1,1,1;							\
46262306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(95)					\
46362306a36Sopenharmony_ci	or	5,5,5;							\
46462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)				\
46562306a36Sopenharmony_ci	or	2,2,2;							\
46662306a36Sopenharmony_ci##TYPE##_SECTION_ELSE							\
46762306a36Sopenharmony_ci	or	31,31,31;						\
46862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(94)					\
46962306a36Sopenharmony_ci	or	5,5,5;							\
47062306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(94)					\
47162306a36Sopenharmony_ci	or	1,1,1;							\
47262306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)				\
47362306a36Sopenharmony_ci	or	31,31,31;						\
47462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 1)						\
47562306a36Sopenharmony_ci	or	1,1,1;							\
47662306a36Sopenharmony_ci	or	1,1,1;							\
47762306a36Sopenharmony_ci	/* Nested alt sections, else can have large else case */	\
47862306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION							\
47962306a36Sopenharmony_ci	or	2,2,2;							\
48062306a36Sopenharmony_ci	or	2,2,2;							\
48162306a36Sopenharmony_ci	or	2,2,2;							\
48262306a36Sopenharmony_ci	or	2,2,2;							\
48362306a36Sopenharmony_ci##TYPE##_SECTION_ELSE 							\
48462306a36Sopenharmony_ciBEGIN_##TYPE##_SECTION_NESTED(94) 					\
48562306a36Sopenharmony_ci	or	5,5,5;							\
48662306a36Sopenharmony_ci	or	5,5,5;							\
48762306a36Sopenharmony_ci	or	5,5,5;							\
48862306a36Sopenharmony_ci	or	5,5,5;							\
48962306a36Sopenharmony_ci##TYPE##_SECTION_ELSE_NESTED(94) 					\
49062306a36Sopenharmony_ci	or	1,1,1;							\
49162306a36Sopenharmony_ci	or	1,1,1;							\
49262306a36Sopenharmony_ci	or	1,1,1;							\
49362306a36Sopenharmony_ci	or	1,1,1;							\
49462306a36Sopenharmony_ciALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)				\
49562306a36Sopenharmony_ciALT_##TYPE##_SECTION_END(0, 1)						\
49662306a36Sopenharmony_ci	or	1,1,1;							\
49762306a36Sopenharmony_ci	or	1,1,1;
49862306a36Sopenharmony_ci
49962306a36Sopenharmony_ci#define	MAKE_MACRO_TEST_EXPECTED(TYPE)					\
50062306a36Sopenharmony_ciglobl(ftr_fixup_test_ ##TYPE##_macros_expected)				\
50162306a36Sopenharmony_ci	or	1,1,1;							\
50262306a36Sopenharmony_ci	/* Basic test, this section should all be nop'ed */		\
50362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
50462306a36Sopenharmony_ci	nop;								\
50562306a36Sopenharmony_ci	nop;								\
50662306a36Sopenharmony_ci	nop;								\
50762306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 1) */					\
50862306a36Sopenharmony_ci	or	1,1,1;							\
50962306a36Sopenharmony_ci	or	1,1,1;							\
51062306a36Sopenharmony_ci	/* Basic test, this section should NOT be nop'ed */		\
51162306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
51262306a36Sopenharmony_ci	or	2,2,2;							\
51362306a36Sopenharmony_ci	or	2,2,2;							\
51462306a36Sopenharmony_ci	or	2,2,2;							\
51562306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 0) */					\
51662306a36Sopenharmony_ci	or	1,1,1;							\
51762306a36Sopenharmony_ci	or	1,1,1;							\
51862306a36Sopenharmony_ci	/* Nesting test, inner section should be nop'ed */		\
51962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
52062306a36Sopenharmony_ci	or	2,2,2;							\
52162306a36Sopenharmony_ci	or	2,2,2;							\
52262306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(80) */					\
52362306a36Sopenharmony_ci	nop;								\
52462306a36Sopenharmony_ci	nop;								\
52562306a36Sopenharmony_ci/* END_##TYPE##_SECTION_NESTED(0, 1, 80) */				\
52662306a36Sopenharmony_ci	or	2,2,2;							\
52762306a36Sopenharmony_ci	or	2,2,2;							\
52862306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 0) */					\
52962306a36Sopenharmony_ci	or	1,1,1;							\
53062306a36Sopenharmony_ci	or	1,1,1;							\
53162306a36Sopenharmony_ci	/* Nesting test, whole section should be nop'ed */		\
53262306a36Sopenharmony_ci	/* NB. inner section is not nop'ed, but then entire outer is */	\
53362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
53462306a36Sopenharmony_ci	nop;								\
53562306a36Sopenharmony_ci	nop;								\
53662306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(80) */					\
53762306a36Sopenharmony_ci	nop;								\
53862306a36Sopenharmony_ci	nop;								\
53962306a36Sopenharmony_ci/* END_##TYPE##_SECTION_NESTED(0, 0, 80) */				\
54062306a36Sopenharmony_ci	nop;								\
54162306a36Sopenharmony_ci	nop;								\
54262306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 1) */					\
54362306a36Sopenharmony_ci	or	1,1,1;							\
54462306a36Sopenharmony_ci	or	1,1,1;							\
54562306a36Sopenharmony_ci	/* Nesting test, none should be nop'ed */			\
54662306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
54762306a36Sopenharmony_ci	or	2,2,2;							\
54862306a36Sopenharmony_ci	or	2,2,2;							\
54962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(80) */					\
55062306a36Sopenharmony_ci	or	3,3,3;							\
55162306a36Sopenharmony_ci	or	3,3,3;							\
55262306a36Sopenharmony_ci/* END_##TYPE##_SECTION_NESTED(0, 0, 80) */				\
55362306a36Sopenharmony_ci	or	2,2,2;							\
55462306a36Sopenharmony_ci	or	2,2,2;							\
55562306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 0) */					\
55662306a36Sopenharmony_ci	or	1,1,1;							\
55762306a36Sopenharmony_ci	or	1,1,1;							\
55862306a36Sopenharmony_ci	/* Basic alt section test, default case should be taken */	\
55962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
56062306a36Sopenharmony_ci	or	3,3,3;							\
56162306a36Sopenharmony_ci	or	3,3,3;							\
56262306a36Sopenharmony_ci	or	3,3,3;							\
56362306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
56462306a36Sopenharmony_ci	/* or	5,5,5; */						\
56562306a36Sopenharmony_ci	/* or	5,5,5; */						\
56662306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 0) */					\
56762306a36Sopenharmony_ci	or	1,1,1;							\
56862306a36Sopenharmony_ci	or	1,1,1;							\
56962306a36Sopenharmony_ci	/* Basic alt section test, else case should be taken */		\
57062306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
57162306a36Sopenharmony_ci	/* or	3,3,3; */						\
57262306a36Sopenharmony_ci	/* or	3,3,3; */						\
57362306a36Sopenharmony_ci	/* or	3,3,3; */						\
57462306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
57562306a36Sopenharmony_ci	or	31,31,31;						\
57662306a36Sopenharmony_ci	or	31,31,31;						\
57762306a36Sopenharmony_ci	or	31,31,31;						\
57862306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 1) */					\
57962306a36Sopenharmony_ci	or	1,1,1;							\
58062306a36Sopenharmony_ci	or	1,1,1;							\
58162306a36Sopenharmony_ci	/* Alt with smaller else case, should be padded with nops */	\
58262306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
58362306a36Sopenharmony_ci	/* or	3,3,3; */						\
58462306a36Sopenharmony_ci	/* or	3,3,3; */						\
58562306a36Sopenharmony_ci	/* or	3,3,3; */						\
58662306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
58762306a36Sopenharmony_ci	or	31,31,31;						\
58862306a36Sopenharmony_ci	nop;								\
58962306a36Sopenharmony_ci	nop;								\
59062306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 1) */					\
59162306a36Sopenharmony_ci	or	1,1,1;							\
59262306a36Sopenharmony_ci	or	1,1,1;							\
59362306a36Sopenharmony_ci	/* Alt section with nested section in default case */		\
59462306a36Sopenharmony_ci	/* Default case should be taken, with nop'ed inner section */	\
59562306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
59662306a36Sopenharmony_ci	or	3,3,3;							\
59762306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
59862306a36Sopenharmony_ci	nop;								\
59962306a36Sopenharmony_ci	nop;								\
60062306a36Sopenharmony_ci/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */				\
60162306a36Sopenharmony_ci	or	3,3,3;							\
60262306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
60362306a36Sopenharmony_ci	/* or	2,2,2; */						\
60462306a36Sopenharmony_ci	/* or	2,2,2; */						\
60562306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 0) */					\
60662306a36Sopenharmony_ci	or	1,1,1;							\
60762306a36Sopenharmony_ci	or	1,1,1;							\
60862306a36Sopenharmony_ci	/* Alt section with nested section in else, default taken */	\
60962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
61062306a36Sopenharmony_ci	or	3,3,3;							\
61162306a36Sopenharmony_ci	or	3,3,3;							\
61262306a36Sopenharmony_ci	or	3,3,3;							\
61362306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
61462306a36Sopenharmony_ci	/* or	5,5,5; */						\
61562306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
61662306a36Sopenharmony_ci	/* or	3,3,3; */						\
61762306a36Sopenharmony_ci/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */				\
61862306a36Sopenharmony_ci	/* or	5,5,5; */						\
61962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 0) */					\
62062306a36Sopenharmony_ci	or	1,1,1;							\
62162306a36Sopenharmony_ci	or	1,1,1;							\
62262306a36Sopenharmony_ci	/* Alt section with nested section in else, else taken & nop */	\
62362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
62462306a36Sopenharmony_ci	/* or	3,3,3; */						\
62562306a36Sopenharmony_ci	/* or	3,3,3; */						\
62662306a36Sopenharmony_ci	/* or	3,3,3; */						\
62762306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
62862306a36Sopenharmony_ci	or	5,5,5;							\
62962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
63062306a36Sopenharmony_ci	nop;								\
63162306a36Sopenharmony_ci/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */				\
63262306a36Sopenharmony_ci	or	5,5,5;							\
63362306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 1) */					\
63462306a36Sopenharmony_ci	or	1,1,1;							\
63562306a36Sopenharmony_ci	or	1,1,1;							\
63662306a36Sopenharmony_ci	/* Feature section with nested alt section, default taken */	\
63762306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
63862306a36Sopenharmony_ci	or	2,2,2;							\
63962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
64062306a36Sopenharmony_ci	or	1,1,1;							\
64162306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
64262306a36Sopenharmony_ci	/* or	5,5,5; */						\
64362306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */				\
64462306a36Sopenharmony_ci	or	2,2,2;							\
64562306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 0) */					\
64662306a36Sopenharmony_ci	or	1,1,1;							\
64762306a36Sopenharmony_ci	or	1,1,1;							\
64862306a36Sopenharmony_ci	/* Feature section with nested alt section, else taken */	\
64962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
65062306a36Sopenharmony_ci	or	2,2,2;							\
65162306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
65262306a36Sopenharmony_ci	/* or	1,1,1; */						\
65362306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
65462306a36Sopenharmony_ci	or	5,5,5;							\
65562306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */				\
65662306a36Sopenharmony_ci	or	2,2,2;							\
65762306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 0) */					\
65862306a36Sopenharmony_ci	or	1,1,1;							\
65962306a36Sopenharmony_ci	or	1,1,1;							\
66062306a36Sopenharmony_ci	/* Feature section with nested alt section, all nop'ed */	\
66162306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
66262306a36Sopenharmony_ci	nop;								\
66362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
66462306a36Sopenharmony_ci	nop;								\
66562306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
66662306a36Sopenharmony_ci	/* or	5,5,5; */						\
66762306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */				\
66862306a36Sopenharmony_ci	nop;								\
66962306a36Sopenharmony_ci/* END_##TYPE##_SECTION(0, 1) */					\
67062306a36Sopenharmony_ci	or	1,1,1;							\
67162306a36Sopenharmony_ci	or	1,1,1;							\
67262306a36Sopenharmony_ci	/* Nested alt sections, default with inner default taken */	\
67362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
67462306a36Sopenharmony_ci	or	2,2,2;							\
67562306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
67662306a36Sopenharmony_ci	or	1,1,1;							\
67762306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
67862306a36Sopenharmony_ci	/* or	5,5,5; */						\
67962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */				\
68062306a36Sopenharmony_ci	or	2,2,2;							\
68162306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
68262306a36Sopenharmony_ci	/* or	31,31,31; */						\
68362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(94) */					\
68462306a36Sopenharmony_ci	/* or	5,5,5; */						\
68562306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(94) */					\
68662306a36Sopenharmony_ci	/* or	1,1,1; */						\
68762306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */				\
68862306a36Sopenharmony_ci	/* or	31,31,31; */						\
68962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 0) */					\
69062306a36Sopenharmony_ci	or	1,1,1;							\
69162306a36Sopenharmony_ci	or	1,1,1;							\
69262306a36Sopenharmony_ci	/* Nested alt sections, default with inner else taken */	\
69362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
69462306a36Sopenharmony_ci	or	2,2,2;							\
69562306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
69662306a36Sopenharmony_ci	/* or	1,1,1; */						\
69762306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
69862306a36Sopenharmony_ci	or	5,5,5;							\
69962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */				\
70062306a36Sopenharmony_ci	or	2,2,2;							\
70162306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
70262306a36Sopenharmony_ci	/* or	31,31,31; */						\
70362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(94) */					\
70462306a36Sopenharmony_ci	/* or	5,5,5; */						\
70562306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(94) */					\
70662306a36Sopenharmony_ci	/* or	1,1,1; */						\
70762306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */				\
70862306a36Sopenharmony_ci	/* or	31,31,31; */						\
70962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 0) */					\
71062306a36Sopenharmony_ci	or	1,1,1;							\
71162306a36Sopenharmony_ci	or	1,1,1;							\
71262306a36Sopenharmony_ci	/* Nested alt sections, else with inner default taken */	\
71362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
71462306a36Sopenharmony_ci	/* or	2,2,2; */						\
71562306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
71662306a36Sopenharmony_ci	/* or	1,1,1; */						\
71762306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
71862306a36Sopenharmony_ci	/* or	5,5,5; */						\
71962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */				\
72062306a36Sopenharmony_ci	/* or	2,2,2; */						\
72162306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
72262306a36Sopenharmony_ci	or	31,31,31;						\
72362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(94) */					\
72462306a36Sopenharmony_ci	or	5,5,5;							\
72562306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(94) */					\
72662306a36Sopenharmony_ci	/* or	1,1,1; */						\
72762306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */				\
72862306a36Sopenharmony_ci	or	31,31,31;						\
72962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 1) */					\
73062306a36Sopenharmony_ci	or	1,1,1;							\
73162306a36Sopenharmony_ci	or	1,1,1;							\
73262306a36Sopenharmony_ci	/* Nested alt sections, else with inner else taken */		\
73362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
73462306a36Sopenharmony_ci	/* or	2,2,2; */						\
73562306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(95) */					\
73662306a36Sopenharmony_ci	/* or	1,1,1; */						\
73762306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(95) */					\
73862306a36Sopenharmony_ci	/* or	5,5,5; */						\
73962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */				\
74062306a36Sopenharmony_ci	/* or	2,2,2; */						\
74162306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
74262306a36Sopenharmony_ci	or	31,31,31;						\
74362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(94) */					\
74462306a36Sopenharmony_ci	/* or	5,5,5; */						\
74562306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(94) */					\
74662306a36Sopenharmony_ci	or	1,1,1;							\
74762306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */				\
74862306a36Sopenharmony_ci	or	31,31,31;						\
74962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 1) */					\
75062306a36Sopenharmony_ci	or	1,1,1;							\
75162306a36Sopenharmony_ci	or	1,1,1;							\
75262306a36Sopenharmony_ci	/* Nested alt sections, else can have large else case */	\
75362306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION */						\
75462306a36Sopenharmony_ci	/* or	2,2,2; */						\
75562306a36Sopenharmony_ci	/* or	2,2,2; */						\
75662306a36Sopenharmony_ci	/* or	2,2,2; */						\
75762306a36Sopenharmony_ci	/* or	2,2,2; */						\
75862306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE */						\
75962306a36Sopenharmony_ci/* BEGIN_##TYPE##_SECTION_NESTED(94) */					\
76062306a36Sopenharmony_ci	/* or	5,5,5; */						\
76162306a36Sopenharmony_ci	/* or	5,5,5; */						\
76262306a36Sopenharmony_ci	/* or	5,5,5; */						\
76362306a36Sopenharmony_ci	/* or	5,5,5; */						\
76462306a36Sopenharmony_ci/* ##TYPE##_SECTION_ELSE_NESTED(94) */					\
76562306a36Sopenharmony_ci	or	1,1,1;							\
76662306a36Sopenharmony_ci	or	1,1,1;							\
76762306a36Sopenharmony_ci	or	1,1,1;							\
76862306a36Sopenharmony_ci	or	1,1,1;							\
76962306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */				\
77062306a36Sopenharmony_ci/* ALT_##TYPE##_SECTION_END(0, 1) */					\
77162306a36Sopenharmony_ci	or	1,1,1;							\
77262306a36Sopenharmony_ci	or	1,1,1;
77362306a36Sopenharmony_ci
77462306a36Sopenharmony_ciMAKE_MACRO_TEST(FTR);
77562306a36Sopenharmony_ciMAKE_MACRO_TEST_EXPECTED(FTR);
77662306a36Sopenharmony_ci
77762306a36Sopenharmony_ci#ifdef CONFIG_PPC64
77862306a36Sopenharmony_ciMAKE_MACRO_TEST(FW_FTR);
77962306a36Sopenharmony_ciMAKE_MACRO_TEST_EXPECTED(FW_FTR);
78062306a36Sopenharmony_ci#endif
78162306a36Sopenharmony_ci
78262306a36Sopenharmony_ciglobl(lwsync_fixup_test)
78362306a36Sopenharmony_ci1:	or	1,1,1
78462306a36Sopenharmony_ci	LWSYNC
78562306a36Sopenharmony_ciglobl(end_lwsync_fixup_test)
78662306a36Sopenharmony_ci
78762306a36Sopenharmony_ciglobl(lwsync_fixup_test_expected_LWSYNC)
78862306a36Sopenharmony_ci1:	or	1,1,1
78962306a36Sopenharmony_ci	lwsync
79062306a36Sopenharmony_ci
79162306a36Sopenharmony_ciglobl(lwsync_fixup_test_expected_SYNC)
79262306a36Sopenharmony_ci1:	or	1,1,1
79362306a36Sopenharmony_ci	sync
79462306a36Sopenharmony_ci
79562306a36Sopenharmony_ciglobl(ftr_fixup_prefix1)
79662306a36Sopenharmony_ci	or	1,1,1
79762306a36Sopenharmony_ci	.long OP_PREFIX << 26
79862306a36Sopenharmony_ci	.long 0x0000000
79962306a36Sopenharmony_ci	or	2,2,2
80062306a36Sopenharmony_ciglobl(end_ftr_fixup_prefix1)
80162306a36Sopenharmony_ci
80262306a36Sopenharmony_ciglobl(ftr_fixup_prefix1_orig)
80362306a36Sopenharmony_ci	or	1,1,1
80462306a36Sopenharmony_ci	.long OP_PREFIX << 26
80562306a36Sopenharmony_ci	.long 0x0000000
80662306a36Sopenharmony_ci	or	2,2,2
80762306a36Sopenharmony_ci
80862306a36Sopenharmony_ciglobl(ftr_fixup_prefix1_expected)
80962306a36Sopenharmony_ci	or	1,1,1
81062306a36Sopenharmony_ci	nop
81162306a36Sopenharmony_ci	nop
81262306a36Sopenharmony_ci	or	2,2,2
81362306a36Sopenharmony_ci
81462306a36Sopenharmony_ciglobl(ftr_fixup_prefix2)
81562306a36Sopenharmony_ci	or	1,1,1
81662306a36Sopenharmony_ci	.long OP_PREFIX << 26
81762306a36Sopenharmony_ci	.long 0x0000000
81862306a36Sopenharmony_ci	or	2,2,2
81962306a36Sopenharmony_ciglobl(end_ftr_fixup_prefix2)
82062306a36Sopenharmony_ci
82162306a36Sopenharmony_ciglobl(ftr_fixup_prefix2_orig)
82262306a36Sopenharmony_ci	or	1,1,1
82362306a36Sopenharmony_ci	.long OP_PREFIX << 26
82462306a36Sopenharmony_ci	.long 0x0000000
82562306a36Sopenharmony_ci	or	2,2,2
82662306a36Sopenharmony_ci
82762306a36Sopenharmony_ciglobl(ftr_fixup_prefix2_alt)
82862306a36Sopenharmony_ci	.long OP_PREFIX << 26
82962306a36Sopenharmony_ci	.long 0x0000001
83062306a36Sopenharmony_ci
83162306a36Sopenharmony_ciglobl(ftr_fixup_prefix2_expected)
83262306a36Sopenharmony_ci	or	1,1,1
83362306a36Sopenharmony_ci	.long OP_PREFIX << 26
83462306a36Sopenharmony_ci	.long 0x0000001
83562306a36Sopenharmony_ci	or	2,2,2
83662306a36Sopenharmony_ci
83762306a36Sopenharmony_ciglobl(ftr_fixup_prefix3)
83862306a36Sopenharmony_ci	or	1,1,1
83962306a36Sopenharmony_ci	.long OP_PREFIX << 26
84062306a36Sopenharmony_ci	.long 0x0000000
84162306a36Sopenharmony_ci	or	2,2,2
84262306a36Sopenharmony_ci	or	3,3,3
84362306a36Sopenharmony_ciglobl(end_ftr_fixup_prefix3)
84462306a36Sopenharmony_ci
84562306a36Sopenharmony_ciglobl(ftr_fixup_prefix3_orig)
84662306a36Sopenharmony_ci	or	1,1,1
84762306a36Sopenharmony_ci	.long OP_PREFIX << 26
84862306a36Sopenharmony_ci	.long 0x0000000
84962306a36Sopenharmony_ci	or	2,2,2
85062306a36Sopenharmony_ci	or	3,3,3
85162306a36Sopenharmony_ci
85262306a36Sopenharmony_ciglobl(ftr_fixup_prefix3_alt)
85362306a36Sopenharmony_ci	.long OP_PREFIX << 26
85462306a36Sopenharmony_ci	.long 0x0000001
85562306a36Sopenharmony_ci	nop
85662306a36Sopenharmony_ci
85762306a36Sopenharmony_ciglobl(ftr_fixup_prefix3_expected)
85862306a36Sopenharmony_ci	or	1,1,1
85962306a36Sopenharmony_ci	.long OP_PREFIX << 26
86062306a36Sopenharmony_ci	.long 0x0000001
86162306a36Sopenharmony_ci	nop
86262306a36Sopenharmony_ci	or	3,3,3
863