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