Thumb-2: Add macros for the unified assembler syntax
authorCatalin Marinas <catalin.marinas@arm.com>
Fri, 24 Jul 2009 11:32:53 +0000 (12:32 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 24 Jul 2009 11:32:53 +0000 (12:32 +0100)
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>
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/include/asm/unified.h [new file with mode: 0644]

index aef63c8e3d2dc99d53c8ab81564dce81b8c52b4d..da28e7ba6083c6fbb91032c2db86afad7ce6e39d 100644 (file)
@@ -983,6 +983,9 @@ config HZ
        default AT91_TIMER_HZ if ARCH_AT91
        default 100
 
+config ARM_ASM_UNIFIED
+       bool
+
 config AEABI
        bool "Use the ARM EABI to compile the kernel"
        help
index c877d6df23d116286d17e51429058135f022de70..3505572a21e61309c7797de349e1f17f051016b4 100644 (file)
@@ -95,7 +95,7 @@ endif
 
 # Need -Uarm for gcc < 3.x
 KBUILD_CFLAGS  +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
-KBUILD_AFLAGS  +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
+KBUILD_AFLAGS  +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
 
 CHECKFLAGS     += -D__arm__
 
diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h
new file mode 100644 (file)
index 0000000..073e85b
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * include/asm-arm/unified.h - Unified Assembler Syntax helper macros
+ *
+ * Copyright (C) 2008 ARM Limited
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __ASM_UNIFIED_H
+#define __ASM_UNIFIED_H
+
+#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
+       .syntax unified
+#endif
+
+#ifdef CONFIG_THUMB2_KERNEL
+
+#if __GNUC__ < 4
+#error Thumb-2 kernel requires gcc >= 4
+#endif
+
+/* The CPSR bit describing the instruction set (Thumb) */
+#define PSR_ISETSTATE  PSR_T_BIT
+
+#define ARM(x...)
+#define THUMB(x...)    x
+#define W(instr)       instr.w
+#define BSYM(sym)      sym + 1
+
+#else  /* !CONFIG_THUMB2_KERNEL */
+
+/* The CPSR bit describing the instruction set (ARM) */
+#define PSR_ISETSTATE  0
+
+#define ARM(x...)      x
+#define THUMB(x...)
+#define W(instr)       instr
+#define BSYM(sym)      sym
+
+#endif /* CONFIG_THUMB2_KERNEL */
+
+#ifndef CONFIG_ARM_ASM_UNIFIED
+
+/*
+ * If the unified assembly syntax isn't used (in ARM mode), these
+ * macros expand to an empty string
+ */
+#ifdef __ASSEMBLY__
+       .macro  it, cond
+       .endm
+       .macro  itt, cond
+       .endm
+       .macro  ite, cond
+       .endm
+       .macro  ittt, cond
+       .endm
+       .macro  itte, cond
+       .endm
+       .macro  itet, cond
+       .endm
+       .macro  itee, cond
+       .endm
+       .macro  itttt, cond
+       .endm
+       .macro  ittte, cond
+       .endm
+       .macro  ittet, cond
+       .endm
+       .macro  ittee, cond
+       .endm
+       .macro  itett, cond
+       .endm
+       .macro  itete, cond
+       .endm
+       .macro  iteet, cond
+       .endm
+       .macro  iteee, cond
+       .endm
+#else  /* !__ASSEMBLY__ */
+__asm__(
+"      .macro  it, cond\n"
+"      .endm\n"
+"      .macro  itt, cond\n"
+"      .endm\n"
+"      .macro  ite, cond\n"
+"      .endm\n"
+"      .macro  ittt, cond\n"
+"      .endm\n"
+"      .macro  itte, cond\n"
+"      .endm\n"
+"      .macro  itet, cond\n"
+"      .endm\n"
+"      .macro  itee, cond\n"
+"      .endm\n"
+"      .macro  itttt, cond\n"
+"      .endm\n"
+"      .macro  ittte, cond\n"
+"      .endm\n"
+"      .macro  ittet, cond\n"
+"      .endm\n"
+"      .macro  ittee, cond\n"
+"      .endm\n"
+"      .macro  itett, cond\n"
+"      .endm\n"
+"      .macro  itete, cond\n"
+"      .endm\n"
+"      .macro  iteet, cond\n"
+"      .endm\n"
+"      .macro  iteee, cond\n"
+"      .endm\n");
+#endif /* __ASSEMBLY__ */
+
+#endif /* CONFIG_ARM_ASM_UNIFIED */
+
+#endif /* !__ASM_UNIFIED_H */