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