blob: 1b260023056424409bafb23ae74c924f270fbb44 [file] [log] [blame]
Marek Vasutc0db6f82016-05-26 18:01:37 +02001/*
2 * include/asm-arm/unified.h - Unified Assembler Syntax helper macros
3 *
4 * Copyright (C) 2008 ARM Limited
5 *
6 * SPDX-License-Identifier: GPL-2.0
7 */
8
9#ifndef __ASM_UNIFIED_H
10#define __ASM_UNIFIED_H
11
12#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
13 .syntax unified
14#endif
15
16#ifdef CONFIG_CPU_V7M
17#define AR_CLASS(x...)
18#define M_CLASS(x...) x
19#else
20#define AR_CLASS(x...) x
21#define M_CLASS(x...)
22#endif
23
24#ifdef CONFIG_THUMB2_KERNEL
25
26#if __GNUC__ < 4
27#error Thumb-2 kernel requires gcc >= 4
28#endif
29
30/* The CPSR bit describing the instruction set (Thumb) */
31#define PSR_ISETSTATE PSR_T_BIT
32
33#define ARM(x...)
34#define THUMB(x...) x
35#ifdef __ASSEMBLY__
36#define W(instr) instr.w
37#else
38#define WASM(instr) #instr ".w"
39#endif
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#ifdef __ASSEMBLY__
49#define W(instr) instr
50#else
51#define WASM(instr) #instr
52#endif
53
54#endif /* CONFIG_THUMB2_KERNEL */
55
56#ifndef CONFIG_ARM_ASM_UNIFIED
57
58/*
59 * If the unified assembly syntax isn't used (in ARM mode), these
60 * macros expand to an empty string
61 */
62#ifdef __ASSEMBLY__
63 .macro it, cond
64 .endm
65 .macro itt, cond
66 .endm
67 .macro ite, cond
68 .endm
69 .macro ittt, cond
70 .endm
71 .macro itte, cond
72 .endm
73 .macro itet, cond
74 .endm
75 .macro itee, cond
76 .endm
77 .macro itttt, cond
78 .endm
79 .macro ittte, cond
80 .endm
81 .macro ittet, cond
82 .endm
83 .macro ittee, cond
84 .endm
85 .macro itett, cond
86 .endm
87 .macro itete, cond
88 .endm
89 .macro iteet, cond
90 .endm
91 .macro iteee, cond
92 .endm
93#else /* !__ASSEMBLY__ */
94__asm__(
95" .macro it, cond\n"
96" .endm\n"
97" .macro itt, cond\n"
98" .endm\n"
99" .macro ite, cond\n"
100" .endm\n"
101" .macro ittt, cond\n"
102" .endm\n"
103" .macro itte, cond\n"
104" .endm\n"
105" .macro itet, cond\n"
106" .endm\n"
107" .macro itee, cond\n"
108" .endm\n"
109" .macro itttt, cond\n"
110" .endm\n"
111" .macro ittte, cond\n"
112" .endm\n"
113" .macro ittet, cond\n"
114" .endm\n"
115" .macro ittee, cond\n"
116" .endm\n"
117" .macro itett, cond\n"
118" .endm\n"
119" .macro itete, cond\n"
120" .endm\n"
121" .macro iteet, cond\n"
122" .endm\n"
123" .macro iteee, cond\n"
124" .endm\n");
125#endif /* __ASSEMBLY__ */
126
127#endif /* CONFIG_ARM_ASM_UNIFIED */
128
129#endif /* !__ASM_UNIFIED_H */