1*150812a8SEvalZero /* 2*150812a8SEvalZero 3*150812a8SEvalZero Copyright (c) 2010 - 2018, Nordic Semiconductor ASA All rights reserved. 4*150812a8SEvalZero 5*150812a8SEvalZero Redistribution and use in source and binary forms, with or without 6*150812a8SEvalZero modification, are permitted provided that the following conditions are met: 7*150812a8SEvalZero 8*150812a8SEvalZero 1. Redistributions of source code must retain the above copyright notice, this 9*150812a8SEvalZero list of conditions and the following disclaimer. 10*150812a8SEvalZero 11*150812a8SEvalZero 2. Redistributions in binary form must reproduce the above copyright 12*150812a8SEvalZero notice, this list of conditions and the following disclaimer in the 13*150812a8SEvalZero documentation and/or other materials provided with the distribution. 14*150812a8SEvalZero 15*150812a8SEvalZero 3. Neither the name of Nordic Semiconductor ASA nor the names of its 16*150812a8SEvalZero contributors may be used to endorse or promote products derived from this 17*150812a8SEvalZero software without specific prior written permission. 18*150812a8SEvalZero 19*150812a8SEvalZero THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20*150812a8SEvalZero AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*150812a8SEvalZero IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE 22*150812a8SEvalZero ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE 23*150812a8SEvalZero LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*150812a8SEvalZero CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*150812a8SEvalZero SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*150812a8SEvalZero INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*150812a8SEvalZero CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*150812a8SEvalZero ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*150812a8SEvalZero POSSIBILITY OF SUCH DAMAGE. 30*150812a8SEvalZero 31*150812a8SEvalZero */ 32*150812a8SEvalZero 33*150812a8SEvalZero #ifndef _COMPILER_ABSTRACTION_H 34*150812a8SEvalZero #define _COMPILER_ABSTRACTION_H 35*150812a8SEvalZero 36*150812a8SEvalZero /*lint ++flb "Enter library region" */ 37*150812a8SEvalZero 38*150812a8SEvalZero #if defined ( __CC_ARM ) 39*150812a8SEvalZero 40*150812a8SEvalZero #ifndef __ASM 41*150812a8SEvalZero #define __ASM __asm 42*150812a8SEvalZero #endif 43*150812a8SEvalZero 44*150812a8SEvalZero #ifndef __INLINE 45*150812a8SEvalZero #define __INLINE __inline 46*150812a8SEvalZero #endif 47*150812a8SEvalZero 48*150812a8SEvalZero #ifndef __WEAK 49*150812a8SEvalZero #define __WEAK __weak 50*150812a8SEvalZero #endif 51*150812a8SEvalZero 52*150812a8SEvalZero #ifndef __ALIGN 53*150812a8SEvalZero #define __ALIGN(n) __align(n) 54*150812a8SEvalZero #endif 55*150812a8SEvalZero 56*150812a8SEvalZero #ifndef __PACKED 57*150812a8SEvalZero #define __PACKED __packed 58*150812a8SEvalZero #endif 59*150812a8SEvalZero 60*150812a8SEvalZero #define GET_SP() __current_sp() 61*150812a8SEvalZero 62*150812a8SEvalZero #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) 63*150812a8SEvalZero 64*150812a8SEvalZero #ifndef __ASM 65*150812a8SEvalZero #define __ASM __asm 66*150812a8SEvalZero #endif 67*150812a8SEvalZero 68*150812a8SEvalZero #ifndef __INLINE 69*150812a8SEvalZero #define __INLINE __inline 70*150812a8SEvalZero #endif 71*150812a8SEvalZero 72*150812a8SEvalZero #ifndef __WEAK 73*150812a8SEvalZero #define __WEAK __attribute__((weak)) 74*150812a8SEvalZero #endif 75*150812a8SEvalZero 76*150812a8SEvalZero #ifndef __ALIGN 77*150812a8SEvalZero #define __ALIGN(n) __attribute__((aligned(n))) 78*150812a8SEvalZero #endif 79*150812a8SEvalZero 80*150812a8SEvalZero #ifndef __PACKED 81*150812a8SEvalZero #define __PACKED __attribute__((packed, aligned(1))) 82*150812a8SEvalZero #endif 83*150812a8SEvalZero 84*150812a8SEvalZero #define GET_SP() __current_sp() 85*150812a8SEvalZero 86*150812a8SEvalZero #elif defined ( __ICCARM__ ) 87*150812a8SEvalZero 88*150812a8SEvalZero #ifndef __ASM 89*150812a8SEvalZero #define __ASM __asm 90*150812a8SEvalZero #endif 91*150812a8SEvalZero 92*150812a8SEvalZero #ifndef __INLINE 93*150812a8SEvalZero #define __INLINE inline 94*150812a8SEvalZero #endif 95*150812a8SEvalZero 96*150812a8SEvalZero #ifndef __WEAK 97*150812a8SEvalZero #define __WEAK __weak 98*150812a8SEvalZero #endif 99*150812a8SEvalZero 100*150812a8SEvalZero #ifndef __ALIGN 101*150812a8SEvalZero #define STRING_PRAGMA(x) _Pragma(#x) 102*150812a8SEvalZero #define __ALIGN(n) STRING_PRAGMA(data_alignment = n) 103*150812a8SEvalZero #endif 104*150812a8SEvalZero 105*150812a8SEvalZero #ifndef __PACKED 106*150812a8SEvalZero #define __PACKED __packed 107*150812a8SEvalZero #endif 108*150812a8SEvalZero 109*150812a8SEvalZero #define GET_SP() __get_SP() 110*150812a8SEvalZero 111*150812a8SEvalZero #elif defined ( __GNUC__ ) 112*150812a8SEvalZero 113*150812a8SEvalZero #ifndef __ASM 114*150812a8SEvalZero #define __ASM __asm 115*150812a8SEvalZero #endif 116*150812a8SEvalZero 117*150812a8SEvalZero #ifndef __INLINE 118*150812a8SEvalZero #define __INLINE inline 119*150812a8SEvalZero #endif 120*150812a8SEvalZero 121*150812a8SEvalZero #ifndef __WEAK 122*150812a8SEvalZero #define __WEAK __attribute__((weak)) 123*150812a8SEvalZero #endif 124*150812a8SEvalZero 125*150812a8SEvalZero #ifndef __ALIGN 126*150812a8SEvalZero #define __ALIGN(n) __attribute__((aligned(n))) 127*150812a8SEvalZero #endif 128*150812a8SEvalZero 129*150812a8SEvalZero #ifndef __PACKED 130*150812a8SEvalZero #define __PACKED __attribute__((packed)) 131*150812a8SEvalZero #endif 132*150812a8SEvalZero 133*150812a8SEvalZero #define GET_SP() gcc_current_sp() 134*150812a8SEvalZero gcc_current_sp(void)135*150812a8SEvalZero static inline unsigned int gcc_current_sp(void) 136*150812a8SEvalZero { 137*150812a8SEvalZero register unsigned sp __ASM("sp"); 138*150812a8SEvalZero return sp; 139*150812a8SEvalZero } 140*150812a8SEvalZero 141*150812a8SEvalZero #elif defined ( __TASKING__ ) 142*150812a8SEvalZero 143*150812a8SEvalZero #ifndef __ASM 144*150812a8SEvalZero #define __ASM __asm 145*150812a8SEvalZero #endif 146*150812a8SEvalZero 147*150812a8SEvalZero #ifndef __INLINE 148*150812a8SEvalZero #define __INLINE inline 149*150812a8SEvalZero #endif 150*150812a8SEvalZero 151*150812a8SEvalZero #ifndef __WEAK 152*150812a8SEvalZero #define __WEAK __attribute__((weak)) 153*150812a8SEvalZero #endif 154*150812a8SEvalZero 155*150812a8SEvalZero #ifndef __ALIGN 156*150812a8SEvalZero #define __ALIGN(n) __align(n) 157*150812a8SEvalZero #endif 158*150812a8SEvalZero 159*150812a8SEvalZero /* Not defined for TASKING. */ 160*150812a8SEvalZero #ifndef __PACKED 161*150812a8SEvalZero #define __PACKED 162*150812a8SEvalZero #endif 163*150812a8SEvalZero 164*150812a8SEvalZero #define GET_SP() __get_MSP() 165*150812a8SEvalZero 166*150812a8SEvalZero #endif 167*150812a8SEvalZero 168*150812a8SEvalZero /*lint --flb "Leave library region" */ 169*150812a8SEvalZero 170*150812a8SEvalZero #endif 171