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