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 */ 127