Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+130 -1
+3
arch/arm/Kconfig
··· 983 983 default AT91_TIMER_HZ if ARCH_AT91 984 984 default 100 985 985 986 + config ARM_ASM_UNIFIED 987 + bool 988 + 986 989 config AEABI 987 990 bool "Use the ARM EABI to compile the kernel" 988 991 help
+1 -1
arch/arm/Makefile
··· 95 95 96 96 # Need -Uarm for gcc < 3.x 97 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 100 CHECKFLAGS += -D__arm__ 101 101
+126
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_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 */