X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcfg%2Fcompiler.h;h=0d401bcc42e27ba14997b4f1f8b73682050aad3b;hb=12a865a058c2c3da0e4da685158f3a506ffad876;hp=3a2f34c2c429f159bbc02f2d95c55a24457d6169;hpb=523c070f86a34c68404a3c2451c150e6f9c3f6f2;p=bertos.git diff --git a/bertos/cfg/compiler.h b/bertos/cfg/compiler.h index 3a2f34c2..0d401bcc 100644 --- a/bertos/cfg/compiler.h +++ b/bertos/cfg/compiler.h @@ -54,10 +54,14 @@ #pragma c99 on #endif -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - #define COMPILER_C99 1 -#else - #define COMPILER_C99 0 +#if defined(__STDC_VERSION__) + #if (__STDC_VERSION__ == 199409L) // IAR + #define COMPILER_C99 1 // not true, because partial C99, avoid miscompilation + #elif (__STDC_VERSION__ >= 199901L) // GCC + #define COMPILER_C99 1 + #else + #define COMPILER_C99 0 + #endif #endif @@ -105,12 +109,20 @@ #pragma language=extended - #if CPU_ARM + /* IAR iccarm specific functions */ + #include + #pragma diag_suppress=Pe940 + #pragma inline = forced + + #define MEMORY_BARRIER asm("") + + #if CPU_ARM || CPU_CM3 #define COMPILER_VARIADIC_MACROS 1 #define INTERRUPT(x) __irq __arm void x (void) #define INLINE static inline + #define NAKED /* Include some standard C89/C99 stuff */ #include @@ -217,7 +229,7 @@ #endif /** - * Force compiler to realod context variable. + * Force compiler to reload context variable. */ #define MEMORY_BARRIER asm volatile ("" : : : "memory") @@ -619,6 +631,10 @@ typedef struct Signal * a refetch from memory. This also forbid from reordering successing instances * of ACCESS_SAFE(). */ +#ifdef __ICCARM__ +#define ACCESS_SAFE(x) x +#else #define ACCESS_SAFE(x) (*(volatile typeof(x) *)&(x)) +#endif #endif /* BERTOS_COMPILER_H */