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