xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/unified.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * include/asm-arm/unified.h - Unified Assembler Syntax helper macros
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2008 ARM Limited
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef __ASM_UNIFIED_H
10*4882a593Smuzhiyun #define __ASM_UNIFIED_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
13*4882a593Smuzhiyun 	.syntax unified
14*4882a593Smuzhiyun #endif
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #ifdef CONFIG_CPU_V7M
17*4882a593Smuzhiyun #define AR_CLASS(x...)
18*4882a593Smuzhiyun #define M_CLASS(x...)	x
19*4882a593Smuzhiyun #else
20*4882a593Smuzhiyun #define AR_CLASS(x...)	x
21*4882a593Smuzhiyun #define M_CLASS(x...)
22*4882a593Smuzhiyun #endif
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #ifdef CONFIG_THUMB2_KERNEL
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #if __GNUC__ < 4
27*4882a593Smuzhiyun #error Thumb-2 kernel requires gcc >= 4
28*4882a593Smuzhiyun #endif
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* The CPSR bit describing the instruction set (Thumb) */
31*4882a593Smuzhiyun #define PSR_ISETSTATE	PSR_T_BIT
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define ARM(x...)
34*4882a593Smuzhiyun #define THUMB(x...)	x
35*4882a593Smuzhiyun #ifdef __ASSEMBLY__
36*4882a593Smuzhiyun #define W(instr)	instr.w
37*4882a593Smuzhiyun #else
38*4882a593Smuzhiyun #define WASM(instr)	#instr ".w"
39*4882a593Smuzhiyun #endif
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #else	/* !CONFIG_THUMB2_KERNEL */
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* The CPSR bit describing the instruction set (ARM) */
44*4882a593Smuzhiyun #define PSR_ISETSTATE	0
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define ARM(x...)	x
47*4882a593Smuzhiyun #define THUMB(x...)
48*4882a593Smuzhiyun #ifdef __ASSEMBLY__
49*4882a593Smuzhiyun #define W(instr)	instr
50*4882a593Smuzhiyun #else
51*4882a593Smuzhiyun #define WASM(instr)	#instr
52*4882a593Smuzhiyun #endif
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #endif	/* CONFIG_THUMB2_KERNEL */
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun #ifndef CONFIG_ARM_ASM_UNIFIED
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /*
59*4882a593Smuzhiyun  * If the unified assembly syntax isn't used (in ARM mode), these
60*4882a593Smuzhiyun  * macros expand to an empty string
61*4882a593Smuzhiyun  */
62*4882a593Smuzhiyun #ifdef __ASSEMBLY__
63*4882a593Smuzhiyun 	.macro	it, cond
64*4882a593Smuzhiyun 	.endm
65*4882a593Smuzhiyun 	.macro	itt, cond
66*4882a593Smuzhiyun 	.endm
67*4882a593Smuzhiyun 	.macro	ite, cond
68*4882a593Smuzhiyun 	.endm
69*4882a593Smuzhiyun 	.macro	ittt, cond
70*4882a593Smuzhiyun 	.endm
71*4882a593Smuzhiyun 	.macro	itte, cond
72*4882a593Smuzhiyun 	.endm
73*4882a593Smuzhiyun 	.macro	itet, cond
74*4882a593Smuzhiyun 	.endm
75*4882a593Smuzhiyun 	.macro	itee, cond
76*4882a593Smuzhiyun 	.endm
77*4882a593Smuzhiyun 	.macro	itttt, cond
78*4882a593Smuzhiyun 	.endm
79*4882a593Smuzhiyun 	.macro	ittte, cond
80*4882a593Smuzhiyun 	.endm
81*4882a593Smuzhiyun 	.macro	ittet, cond
82*4882a593Smuzhiyun 	.endm
83*4882a593Smuzhiyun 	.macro	ittee, cond
84*4882a593Smuzhiyun 	.endm
85*4882a593Smuzhiyun 	.macro	itett, cond
86*4882a593Smuzhiyun 	.endm
87*4882a593Smuzhiyun 	.macro	itete, cond
88*4882a593Smuzhiyun 	.endm
89*4882a593Smuzhiyun 	.macro	iteet, cond
90*4882a593Smuzhiyun 	.endm
91*4882a593Smuzhiyun 	.macro	iteee, cond
92*4882a593Smuzhiyun 	.endm
93*4882a593Smuzhiyun #else	/* !__ASSEMBLY__ */
94*4882a593Smuzhiyun __asm__(
95*4882a593Smuzhiyun "	.macro	it, cond\n"
96*4882a593Smuzhiyun "	.endm\n"
97*4882a593Smuzhiyun "	.macro	itt, cond\n"
98*4882a593Smuzhiyun "	.endm\n"
99*4882a593Smuzhiyun "	.macro	ite, cond\n"
100*4882a593Smuzhiyun "	.endm\n"
101*4882a593Smuzhiyun "	.macro	ittt, cond\n"
102*4882a593Smuzhiyun "	.endm\n"
103*4882a593Smuzhiyun "	.macro	itte, cond\n"
104*4882a593Smuzhiyun "	.endm\n"
105*4882a593Smuzhiyun "	.macro	itet, cond\n"
106*4882a593Smuzhiyun "	.endm\n"
107*4882a593Smuzhiyun "	.macro	itee, cond\n"
108*4882a593Smuzhiyun "	.endm\n"
109*4882a593Smuzhiyun "	.macro	itttt, cond\n"
110*4882a593Smuzhiyun "	.endm\n"
111*4882a593Smuzhiyun "	.macro	ittte, cond\n"
112*4882a593Smuzhiyun "	.endm\n"
113*4882a593Smuzhiyun "	.macro	ittet, cond\n"
114*4882a593Smuzhiyun "	.endm\n"
115*4882a593Smuzhiyun "	.macro	ittee, cond\n"
116*4882a593Smuzhiyun "	.endm\n"
117*4882a593Smuzhiyun "	.macro	itett, cond\n"
118*4882a593Smuzhiyun "	.endm\n"
119*4882a593Smuzhiyun "	.macro	itete, cond\n"
120*4882a593Smuzhiyun "	.endm\n"
121*4882a593Smuzhiyun "	.macro	iteet, cond\n"
122*4882a593Smuzhiyun "	.endm\n"
123*4882a593Smuzhiyun "	.macro	iteee, cond\n"
124*4882a593Smuzhiyun "	.endm\n");
125*4882a593Smuzhiyun #endif	/* __ASSEMBLY__ */
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun #endif	/* CONFIG_ARM_ASM_UNIFIED */
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun #endif	/* !__ASM_UNIFIED_H */
130