Commit | Line | Data |
---|---|---|
0becb088 CM |
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 | ||
c20611df JE |
27 | #ifdef CONFIG_CPU_V7M |
28 | #define AR_CLASS(x...) | |
29 | #define M_CLASS(x...) x | |
30 | #else | |
31 | #define AR_CLASS(x...) x | |
32 | #define M_CLASS(x...) | |
33 | #endif | |
34 | ||
0becb088 CM |
35 | #ifdef CONFIG_THUMB2_KERNEL |
36 | ||
37 | #if __GNUC__ < 4 | |
38 | #error Thumb-2 kernel requires gcc >= 4 | |
39 | #endif | |
40 | ||
41 | /* The CPSR bit describing the instruction set (Thumb) */ | |
42 | #define PSR_ISETSTATE PSR_T_BIT | |
43 | ||
44 | #define ARM(x...) | |
45 | #define THUMB(x...) x | |
74109b89 | 46 | #ifdef __ASSEMBLY__ |
0becb088 | 47 | #define W(instr) instr.w |
27a84793 WD |
48 | #else |
49 | #define WASM(instr) #instr ".w" | |
efb963dc | 50 | #endif |
0becb088 CM |
51 | |
52 | #else /* !CONFIG_THUMB2_KERNEL */ | |
53 | ||
54 | /* The CPSR bit describing the instruction set (ARM) */ | |
55 | #define PSR_ISETSTATE 0 | |
56 | ||
57 | #define ARM(x...) x | |
58 | #define THUMB(x...) | |
74109b89 | 59 | #ifdef __ASSEMBLY__ |
0becb088 | 60 | #define W(instr) instr |
27a84793 WD |
61 | #else |
62 | #define WASM(instr) #instr | |
efb963dc | 63 | #endif |
0becb088 CM |
64 | |
65 | #endif /* CONFIG_THUMB2_KERNEL */ | |
66 | ||
67 | #ifndef CONFIG_ARM_ASM_UNIFIED | |
68 | ||
69 | /* | |
70 | * If the unified assembly syntax isn't used (in ARM mode), these | |
71 | * macros expand to an empty string | |
72 | */ | |
73 | #ifdef __ASSEMBLY__ | |
74 | .macro it, cond | |
75 | .endm | |
76 | .macro itt, cond | |
77 | .endm | |
78 | .macro ite, cond | |
79 | .endm | |
80 | .macro ittt, cond | |
81 | .endm | |
82 | .macro itte, cond | |
83 | .endm | |
84 | .macro itet, cond | |
85 | .endm | |
86 | .macro itee, cond | |
87 | .endm | |
88 | .macro itttt, cond | |
89 | .endm | |
90 | .macro ittte, cond | |
91 | .endm | |
92 | .macro ittet, cond | |
93 | .endm | |
94 | .macro ittee, cond | |
95 | .endm | |
96 | .macro itett, cond | |
97 | .endm | |
98 | .macro itete, cond | |
99 | .endm | |
100 | .macro iteet, cond | |
101 | .endm | |
102 | .macro iteee, cond | |
103 | .endm | |
104 | #else /* !__ASSEMBLY__ */ | |
105 | __asm__( | |
106 | " .macro it, cond\n" | |
107 | " .endm\n" | |
108 | " .macro itt, cond\n" | |
109 | " .endm\n" | |
110 | " .macro ite, cond\n" | |
111 | " .endm\n" | |
112 | " .macro ittt, cond\n" | |
113 | " .endm\n" | |
114 | " .macro itte, cond\n" | |
115 | " .endm\n" | |
116 | " .macro itet, cond\n" | |
117 | " .endm\n" | |
118 | " .macro itee, cond\n" | |
119 | " .endm\n" | |
120 | " .macro itttt, cond\n" | |
121 | " .endm\n" | |
122 | " .macro ittte, cond\n" | |
123 | " .endm\n" | |
124 | " .macro ittet, cond\n" | |
125 | " .endm\n" | |
126 | " .macro ittee, cond\n" | |
127 | " .endm\n" | |
128 | " .macro itett, cond\n" | |
129 | " .endm\n" | |
130 | " .macro itete, cond\n" | |
131 | " .endm\n" | |
132 | " .macro iteet, cond\n" | |
133 | " .endm\n" | |
134 | " .macro iteee, cond\n" | |
135 | " .endm\n"); | |
136 | #endif /* __ASSEMBLY__ */ | |
137 | ||
138 | #endif /* CONFIG_ARM_ASM_UNIFIED */ | |
139 | ||
140 | #endif /* !__ASM_UNIFIED_H */ |