1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * include/asm-arm/unified.h - Unified Assembler Syntax helper macros 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2008 ARM Limited 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef __ASM_UNIFIED_H 10*4882a593Smuzhiyun #define __ASM_UNIFIED_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED) 13*4882a593Smuzhiyun .syntax unified 14*4882a593Smuzhiyun #endif 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifdef CONFIG_CPU_V7M 17*4882a593Smuzhiyun #define AR_CLASS(x...) 18*4882a593Smuzhiyun #define M_CLASS(x...) x 19*4882a593Smuzhiyun #else 20*4882a593Smuzhiyun #define AR_CLASS(x...) x 21*4882a593Smuzhiyun #define M_CLASS(x...) 22*4882a593Smuzhiyun #endif 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #ifdef CONFIG_THUMB2_KERNEL 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #if __GNUC__ < 4 27*4882a593Smuzhiyun #error Thumb-2 kernel requires gcc >= 4 28*4882a593Smuzhiyun #endif 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* The CPSR bit describing the instruction set (Thumb) */ 31*4882a593Smuzhiyun #define PSR_ISETSTATE PSR_T_BIT 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #define ARM(x...) 34*4882a593Smuzhiyun #define THUMB(x...) x 35*4882a593Smuzhiyun #ifdef __ASSEMBLY__ 36*4882a593Smuzhiyun #define W(instr) instr.w 37*4882a593Smuzhiyun #else 38*4882a593Smuzhiyun #define WASM(instr) #instr ".w" 39*4882a593Smuzhiyun #endif 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #else /* !CONFIG_THUMB2_KERNEL */ 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* The CPSR bit describing the instruction set (ARM) */ 44*4882a593Smuzhiyun #define PSR_ISETSTATE 0 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define ARM(x...) x 47*4882a593Smuzhiyun #define THUMB(x...) 48*4882a593Smuzhiyun #ifdef __ASSEMBLY__ 49*4882a593Smuzhiyun #define W(instr) instr 50*4882a593Smuzhiyun #else 51*4882a593Smuzhiyun #define WASM(instr) #instr 52*4882a593Smuzhiyun #endif 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #endif /* CONFIG_THUMB2_KERNEL */ 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #ifndef CONFIG_ARM_ASM_UNIFIED 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* 59*4882a593Smuzhiyun * If the unified assembly syntax isn't used (in ARM mode), these 60*4882a593Smuzhiyun * macros expand to an empty string 61*4882a593Smuzhiyun */ 62*4882a593Smuzhiyun #ifdef __ASSEMBLY__ 63*4882a593Smuzhiyun .macro it, cond 64*4882a593Smuzhiyun .endm 65*4882a593Smuzhiyun .macro itt, cond 66*4882a593Smuzhiyun .endm 67*4882a593Smuzhiyun .macro ite, cond 68*4882a593Smuzhiyun .endm 69*4882a593Smuzhiyun .macro ittt, cond 70*4882a593Smuzhiyun .endm 71*4882a593Smuzhiyun .macro itte, cond 72*4882a593Smuzhiyun .endm 73*4882a593Smuzhiyun .macro itet, cond 74*4882a593Smuzhiyun .endm 75*4882a593Smuzhiyun .macro itee, cond 76*4882a593Smuzhiyun .endm 77*4882a593Smuzhiyun .macro itttt, cond 78*4882a593Smuzhiyun .endm 79*4882a593Smuzhiyun .macro ittte, cond 80*4882a593Smuzhiyun .endm 81*4882a593Smuzhiyun .macro ittet, cond 82*4882a593Smuzhiyun .endm 83*4882a593Smuzhiyun .macro ittee, cond 84*4882a593Smuzhiyun .endm 85*4882a593Smuzhiyun .macro itett, cond 86*4882a593Smuzhiyun .endm 87*4882a593Smuzhiyun .macro itete, cond 88*4882a593Smuzhiyun .endm 89*4882a593Smuzhiyun .macro iteet, cond 90*4882a593Smuzhiyun .endm 91*4882a593Smuzhiyun .macro iteee, cond 92*4882a593Smuzhiyun .endm 93*4882a593Smuzhiyun #else /* !__ASSEMBLY__ */ 94*4882a593Smuzhiyun __asm__( 95*4882a593Smuzhiyun " .macro it, cond\n" 96*4882a593Smuzhiyun " .endm\n" 97*4882a593Smuzhiyun " .macro itt, cond\n" 98*4882a593Smuzhiyun " .endm\n" 99*4882a593Smuzhiyun " .macro ite, cond\n" 100*4882a593Smuzhiyun " .endm\n" 101*4882a593Smuzhiyun " .macro ittt, cond\n" 102*4882a593Smuzhiyun " .endm\n" 103*4882a593Smuzhiyun " .macro itte, cond\n" 104*4882a593Smuzhiyun " .endm\n" 105*4882a593Smuzhiyun " .macro itet, cond\n" 106*4882a593Smuzhiyun " .endm\n" 107*4882a593Smuzhiyun " .macro itee, cond\n" 108*4882a593Smuzhiyun " .endm\n" 109*4882a593Smuzhiyun " .macro itttt, cond\n" 110*4882a593Smuzhiyun " .endm\n" 111*4882a593Smuzhiyun " .macro ittte, cond\n" 112*4882a593Smuzhiyun " .endm\n" 113*4882a593Smuzhiyun " .macro ittet, cond\n" 114*4882a593Smuzhiyun " .endm\n" 115*4882a593Smuzhiyun " .macro ittee, cond\n" 116*4882a593Smuzhiyun " .endm\n" 117*4882a593Smuzhiyun " .macro itett, cond\n" 118*4882a593Smuzhiyun " .endm\n" 119*4882a593Smuzhiyun " .macro itete, cond\n" 120*4882a593Smuzhiyun " .endm\n" 121*4882a593Smuzhiyun " .macro iteet, cond\n" 122*4882a593Smuzhiyun " .endm\n" 123*4882a593Smuzhiyun " .macro iteee, cond\n" 124*4882a593Smuzhiyun " .endm\n"); 125*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #endif /* CONFIG_ARM_ASM_UNIFIED */ 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #endif /* !__ASM_UNIFIED_H */ 130