diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2009-07-24 07:32:53 -0400 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2009-07-24 07:32:53 -0400 |
commit | 0becb088501886f37ade38762c8eaaf4263572cc (patch) | |
tree | 8b1b6b5fd4e491d0c082d69bb8096434d5b7a31f /arch/arm | |
parent | 88987ef91b99cf99bc5d167caeb31d4958fbf931 (diff) |
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 <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/Kconfig | 3 | ||||
-rw-r--r-- | arch/arm/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/include/asm/unified.h | 126 |
3 files changed, 130 insertions, 1 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index aef63c8e3d2d..da28e7ba6083 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -983,6 +983,9 @@ config HZ | |||
983 | default AT91_TIMER_HZ if ARCH_AT91 | 983 | default AT91_TIMER_HZ if ARCH_AT91 |
984 | default 100 | 984 | default 100 |
985 | 985 | ||
986 | config ARM_ASM_UNIFIED | ||
987 | bool | ||
988 | |||
986 | config AEABI | 989 | config AEABI |
987 | bool "Use the ARM EABI to compile the kernel" | 990 | bool "Use the ARM EABI to compile the kernel" |
988 | help | 991 | help |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index c877d6df23d1..3505572a21e6 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -95,7 +95,7 @@ endif | |||
95 | 95 | ||
96 | # Need -Uarm for gcc < 3.x | 96 | # Need -Uarm for gcc < 3.x |
97 | KBUILD_CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm | 97 | 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 |
99 | 99 | ||
100 | CHECKFLAGS += -D__arm__ | 100 | CHECKFLAGS += -D__arm__ |
101 | 101 | ||
diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h new file mode 100644 index 000000000000..073e85b9b961 --- /dev/null +++ b/arch/arm/include/asm/unified.h | |||
@@ -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 */ | ||