Skip to content

Commit 0becb08

Browse files
committed
Thumb-2: Add macros for the unified assembler syntax
This patch adds various C and assembler macros that help with using the unified assembler syntax for compiling files to either ARM or Thumb-2 modes. Signed-off-by: Catalin Marinas <[email protected]>
1 parent 88987ef commit 0becb08

File tree

3 files changed

+130
-1
lines changed

3 files changed

+130
-1
lines changed

arch/arm/Kconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,9 @@ config HZ
983983
default AT91_TIMER_HZ if ARCH_AT91
984984
default 100
985985

986+
config ARM_ASM_UNIFIED
987+
bool
988+
986989
config AEABI
987990
bool "Use the ARM EABI to compile the kernel"
988991
help

arch/arm/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ endif
9595

9696
# Need -Uarm for gcc < 3.x
9797
KBUILD_CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
98-
KBUILD_AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
98+
KBUILD_AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
9999

100100
CHECKFLAGS += -D__arm__
101101

arch/arm/include/asm/unified.h

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
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
38+
#define W(instr) instr.w
39+
#define BSYM(sym) sym + 1
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+
#define W(instr) instr
49+
#define BSYM(sym) sym
50+
51+
#endif /* CONFIG_THUMB2_KERNEL */
52+
53+
#ifndef CONFIG_ARM_ASM_UNIFIED
54+
55+
/*
56+
* If the unified assembly syntax isn't used (in ARM mode), these
57+
* macros expand to an empty string
58+
*/
59+
#ifdef __ASSEMBLY__
60+
.macro it, cond
61+
.endm
62+
.macro itt, cond
63+
.endm
64+
.macro ite, cond
65+
.endm
66+
.macro ittt, cond
67+
.endm
68+
.macro itte, cond
69+
.endm
70+
.macro itet, cond
71+
.endm
72+
.macro itee, cond
73+
.endm
74+
.macro itttt, cond
75+
.endm
76+
.macro ittte, cond
77+
.endm
78+
.macro ittet, cond
79+
.endm
80+
.macro ittee, cond
81+
.endm
82+
.macro itett, cond
83+
.endm
84+
.macro itete, cond
85+
.endm
86+
.macro iteet, cond
87+
.endm
88+
.macro iteee, cond
89+
.endm
90+
#else /* !__ASSEMBLY__ */
91+
__asm__(
92+
" .macro it, cond\n"
93+
" .endm\n"
94+
" .macro itt, cond\n"
95+
" .endm\n"
96+
" .macro ite, cond\n"
97+
" .endm\n"
98+
" .macro ittt, cond\n"
99+
" .endm\n"
100+
" .macro itte, cond\n"
101+
" .endm\n"
102+
" .macro itet, cond\n"
103+
" .endm\n"
104+
" .macro itee, cond\n"
105+
" .endm\n"
106+
" .macro itttt, cond\n"
107+
" .endm\n"
108+
" .macro ittte, cond\n"
109+
" .endm\n"
110+
" .macro ittet, cond\n"
111+
" .endm\n"
112+
" .macro ittee, cond\n"
113+
" .endm\n"
114+
" .macro itett, cond\n"
115+
" .endm\n"
116+
" .macro itete, cond\n"
117+
" .endm\n"
118+
" .macro iteet, cond\n"
119+
" .endm\n"
120+
" .macro iteee, cond\n"
121+
" .endm\n");
122+
#endif /* __ASSEMBLY__ */
123+
124+
#endif /* CONFIG_ARM_ASM_UNIFIED */
125+
126+
#endif /* !__ASM_UNIFIED_H */

0 commit comments

Comments
 (0)