#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
#pragma language=extended
- #if CPU_ARM
+ /* IAR iccarm specific functions */
+ #include <intrinsics.h>
+ #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 <stddef.h>
#endif
/**
- * Force compiler to realod context variable.
+ * Force compiler to reload context variable.
*/
#define MEMORY_BARRIER asm volatile ("" : : : "memory")
#endif
#endif
+/** User defined callback type */
+typedef void (*Hook)(void *);
+
/** Bulk storage large enough for both pointers or integers. */
typedef void * iptr_t;
* 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 */