blob: b88beaba6b4a5cf9c0ccded73723c4ea41539167 [file] [log] [blame]
Catalin Marinas0becb082009-07-24 12:32:53 +01001/*
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
Alexey Dobriyan74109b82009-09-18 15:09:33 +010038#ifdef __ASSEMBLY__
Catalin Marinas0becb082009-07-24 12:32:53 +010039#define W(instr) instr.w
40#define BSYM(sym) sym + 1
Will Deacon27a84792013-07-02 12:10:42 +010041#else
42#define WASM(instr) #instr ".w"
Rob Herringefb963d2012-01-09 15:43:20 -060043#endif
Catalin Marinas0becb082009-07-24 12:32:53 +010044
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...)
Alexey Dobriyan74109b82009-09-18 15:09:33 +010052#ifdef __ASSEMBLY__
Catalin Marinas0becb082009-07-24 12:32:53 +010053#define W(instr) instr
Catalin Marinas0becb082009-07-24 12:32:53 +010054#define BSYM(sym) sym
Will Deacon27a84792013-07-02 12:10:42 +010055#else
56#define WASM(instr) #instr
Rob Herringefb963d2012-01-09 15:43:20 -060057#endif
Catalin Marinas0becb082009-07-24 12:32:53 +010058
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 */