X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=FreeRTOS%2FDemo%2FCORTEX_A5_SAMA5D2x_Xplained_IAR%2FAtmelFiles%2Futils%2Fcompiler.h;fp=FreeRTOS%2FDemo%2FCORTEX_A5_SAMA5D2x_Xplained_IAR%2FAtmelFiles%2Futils%2Fcompiler.h;h=4d638432415bc3b2ba31224628fcf097e53cef76;hb=67dddee1984d4e0d043d7b965cfd75bd1562adc3;hp=0000000000000000000000000000000000000000;hpb=a466e505e0411df37b0d1a5533df645661cf6650;p=freertos diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/utils/compiler.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/utils/compiler.h new file mode 100644 index 000000000..4d6384324 --- /dev/null +++ b/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/utils/compiler.h @@ -0,0 +1,68 @@ +#ifndef _COMPILER_H_ +#define _COMPILER_H_ + +#define _CC_PRAGMA(x) _Pragma(#x) + +#define PACK_SET(alignment) _CC_PRAGMA(pack(alignment)) +#define PACK_RESET() _CC_PRAGMA(pack()) + +#if defined(__ICCARM__) + #define WEAK __weak + #define CONSTRUCTOR + #define SECTION(a) _CC_PRAGMA(location = a) + #define ALIGNED(a) _CC_PRAGMA(data_alignment = a) +#elif defined(__GNUC__) + #define WEAK __attribute__((weak)) + #define CONSTRUCTOR __attribute__((constructor)) + #define SECTION(a) __attribute__((__section__(a))) + #define ALIGNED(a) __attribute__((__aligned__(a))) +#else + #error Unknown compiler! +#endif + +#if defined(__ICCARM__) + #define DMB() asm("dmb") + #define DSB() asm("dsb") + #define ISB() asm("isb") + #define COMPILER_BARRIER() +#elif defined(__GNUC__) + #define DMB() asm("dmb":::"memory") + #define DSB() asm volatile ("dsb":::"memory") + #define ISB() asm volatile ("isb":::"memory") + #define COMPILER_BARRIER() asm volatile ("":::"memory") +#else + #error Unknown compiler! +#endif + +#ifndef NULL + #define NULL ((void*)0) +#endif + +#define ROUND_UP_MULT(x,m) (((x) + ((m)-1)) & ~((m)-1)) + +#define ROUND_INT_DIV(n,d) ((2 * (n) + (d)) / (2 * (d))) + +#define ARRAY_SIZE(x) (sizeof ((x)) / sizeof(*(x))) + +#define _STRINGY_EXPAND(x) #x +#define STRINGIFY(x) _STRINGY_EXPAND(x) + +#if defined(__GNUC__) && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 8)) + #define SWAP(a, b) do { \ + __auto_type _swp = (a); \ + (a) = (b); \ + (b) = _swp; } while (0) +#else + /* The compiler will replace memcpy calls with direct assignations */ + #define SWAP(a, b) do { \ + uint8_t _swp[sizeof(a) == sizeof(b) ? (signed)sizeof(a) : -1]; \ + memcpy(_swp, &(a), sizeof(a)); \ + memcpy(&(a), &(b), sizeof(a)); \ + memcpy(&(b), _swp, sizeof(a)); } while(0) +#endif + +#define BIG_ENDIAN_TO_HOST(x) (((x) & 0xFF) << 24) | (((x) & 0xFF00) << 8) \ + | (((x) & 0xFF0000) >> 8) | (((x) & 0xFF000000) >> 24) + +#endif /* _COMPILER_H_ */