/* * Copyright (c) 2017 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_TOOLCHAIN_XCC_H_ #define ZEPHYR_INCLUDE_TOOLCHAIN_XCC_H_ #include /* XCC doesn't support __COUNTER__ but this should be good enough */ #define __COUNTER__ __LINE__ #undef __in_section_unique #define __in_section_unique(seg) \ __attribute__((section("." STRINGIFY(seg) "." STRINGIFY(__COUNTER__)))) #ifndef __GCC_LINKER_CMD__ #include /* * XCC does not define the following macros with the expected names, but the * HAL defines similar ones. Thus we include it and define the missing macros * ourselves. */ #ifndef __BYTE_ORDER__ #define __BYTE_ORDER__ XCHAL_MEMORY_ORDER #endif #ifndef __ORDER_BIG_ENDIAN__ #define __ORDER_BIG_ENDIAN__ XTHAL_BIGENDIAN #endif #ifndef __ORDER_LITTLE_ENDIAN__ #define __ORDER_LITTLE_ENDIAN__ XTHAL_LITTLEENDIAN #endif #endif /* __GCC_LINKER_CMD__ */ #define __builtin_unreachable() do { __ASSERT(0, "Unreachable code"); } \ while (true) /* TODO: XCC doesn't define the below macros which are useful for checking * overflows. This needs to be fixed. */ #define __builtin_add_overflow(a, b, output) ({ *output = (a) + (b); 0; }) #define __builtin_mul_overflow(a, b, output) ({ *output = (a) * (b); 0; }) #define __builtin_umul_overflow(a, b, output) ({ *output = (a) * (b); 0; }) #define __builtin_umulll_overflow(a, b, output) ({ *output = (a) * (b); 0; }) #endif