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 #ifdef __ASSEMBLY__ 39 #define W(instr) instr.w 40 #define BSYM(sym) sym + 1 41 #else 42 #define WASM(instr) #instr ".w" 43 #endif 44 45 #else /* !CONFIG_THUMB2_KERNEL */ 46 47 /* The CPSR bit describing the instruction set (ARM) */ 48 #define PSR_ISETSTATE 0 49 50 #define ARM(x...) x 51 #define THUMB(x...) 52 #ifdef __ASSEMBLY__ 53 #define W(instr) instr 54 #define BSYM(sym) sym 55 #else 56 #define WASM(instr) #instr 57 #endif 58 59 #endif /* CONFIG_THUMB2_KERNEL */ 60 61 #ifndef CONFIG_ARM_ASM_UNIFIED 62 63 /* 64 * If the unified assembly syntax isn't used (in ARM mode), these 65 * macros expand to an empty string 66 */ 67 #ifdef __ASSEMBLY__ 68 .macro it, cond 69 .endm 70 .macro itt, cond 71 .endm 72 .macro ite, cond 73 .endm 74 .macro ittt, cond 75 .endm 76 .macro itte, cond 77 .endm 78 .macro itet, cond 79 .endm 80 .macro itee, cond 81 .endm 82 .macro itttt, cond 83 .endm 84 .macro ittte, cond 85 .endm 86 .macro ittet, cond 87 .endm 88 .macro ittee, cond 89 .endm 90 .macro itett, cond 91 .endm 92 .macro itete, cond 93 .endm 94 .macro iteet, cond 95 .endm 96 .macro iteee, cond 97 .endm 98 #else /* !__ASSEMBLY__ */ 99 __asm__( 100 " .macro it, cond\n" 101 " .endm\n" 102 " .macro itt, cond\n" 103 " .endm\n" 104 " .macro ite, cond\n" 105 " .endm\n" 106 " .macro ittt, cond\n" 107 " .endm\n" 108 " .macro itte, cond\n" 109 " .endm\n" 110 " .macro itet, cond\n" 111 " .endm\n" 112 " .macro itee, cond\n" 113 " .endm\n" 114 " .macro itttt, cond\n" 115 " .endm\n" 116 " .macro ittte, cond\n" 117 " .endm\n" 118 " .macro ittet, cond\n" 119 " .endm\n" 120 " .macro ittee, cond\n" 121 " .endm\n" 122 " .macro itett, cond\n" 123 " .endm\n" 124 " .macro itete, cond\n" 125 " .endm\n" 126 " .macro iteet, cond\n" 127 " .endm\n" 128 " .macro iteee, cond\n" 129 " .endm\n"); 130 #endif /* __ASSEMBLY__ */ 131 132 #endif /* CONFIG_ARM_ASM_UNIFIED */ 133 134 #endif /* !__ASM_UNIFIED_H */ 135