xref: /linux/arch/arm/include/asm/unified.h (revision 040932cdcfca9b0ac55a4f74f194c2e2c8a2527b)
1 /*
2  * include/asm-arm/unified.h - Unified Assembler Syntax helper macros
3  *
4  * Copyright (C) 2008 ARM Limited
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */
19 
20 #ifndef __ASM_UNIFIED_H
21 #define __ASM_UNIFIED_H
22 
23 #if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
24 	.syntax unified
25 #endif
26 
27 #ifdef CONFIG_THUMB2_KERNEL
28 
29 #if __GNUC__ < 4
30 #error Thumb-2 kernel requires gcc >= 4
31 #endif
32 
33 /* The CPSR bit describing the instruction set (Thumb) */
34 #define PSR_ISETSTATE	PSR_T_BIT
35 
36 #define ARM(x...)
37 #define THUMB(x...)	x
38 #define W(instr)	instr.w
39 #define BSYM(sym)	sym + 1
40 
41 #else	/* !CONFIG_THUMB2_KERNEL */
42 
43 /* The CPSR bit describing the instruction set (ARM) */
44 #define PSR_ISETSTATE	0
45 
46 #define ARM(x...)	x
47 #define THUMB(x...)
48 #define W(instr)	instr
49 #define BSYM(sym)	sym
50 
51 #endif	/* CONFIG_THUMB2_KERNEL */
52 
53 #ifndef CONFIG_ARM_ASM_UNIFIED
54 
55 /*
56  * If the unified assembly syntax isn't used (in ARM mode), these
57  * macros expand to an empty string
58  */
59 #ifdef __ASSEMBLY__
60 	.macro	it, cond
61 	.endm
62 	.macro	itt, cond
63 	.endm
64 	.macro	ite, cond
65 	.endm
66 	.macro	ittt, cond
67 	.endm
68 	.macro	itte, cond
69 	.endm
70 	.macro	itet, cond
71 	.endm
72 	.macro	itee, cond
73 	.endm
74 	.macro	itttt, cond
75 	.endm
76 	.macro	ittte, cond
77 	.endm
78 	.macro	ittet, cond
79 	.endm
80 	.macro	ittee, cond
81 	.endm
82 	.macro	itett, cond
83 	.endm
84 	.macro	itete, cond
85 	.endm
86 	.macro	iteet, cond
87 	.endm
88 	.macro	iteee, cond
89 	.endm
90 #else	/* !__ASSEMBLY__ */
91 __asm__(
92 "	.macro	it, cond\n"
93 "	.endm\n"
94 "	.macro	itt, cond\n"
95 "	.endm\n"
96 "	.macro	ite, cond\n"
97 "	.endm\n"
98 "	.macro	ittt, cond\n"
99 "	.endm\n"
100 "	.macro	itte, cond\n"
101 "	.endm\n"
102 "	.macro	itet, cond\n"
103 "	.endm\n"
104 "	.macro	itee, cond\n"
105 "	.endm\n"
106 "	.macro	itttt, cond\n"
107 "	.endm\n"
108 "	.macro	ittte, cond\n"
109 "	.endm\n"
110 "	.macro	ittet, cond\n"
111 "	.endm\n"
112 "	.macro	ittee, cond\n"
113 "	.endm\n"
114 "	.macro	itett, cond\n"
115 "	.endm\n"
116 "	.macro	itete, cond\n"
117 "	.endm\n"
118 "	.macro	iteet, cond\n"
119 "	.endm\n"
120 "	.macro	iteee, cond\n"
121 "	.endm\n");
122 #endif	/* __ASSEMBLY__ */
123 
124 #endif	/* CONFIG_ARM_ASM_UNIFIED */
125 
126 #endif	/* !__ASM_UNIFIED_H */
127