at91sam7s-ek: add the "kernel" preset template.
[bertos.git] / bertos / cfg / compiler.h
index 5cacf1dca66fe20041b8e2fa0aa5133b66aad3d0..a56ef87096020d61fcbf0719c838bc8d0015d4c3 100644 (file)
        #define UNUSED_VAR(type,name)   __attribute__((__unused__)) type name
        #define USED_VAR(type,name)     __attribute__((__used__)) type name
        #define INLINE                  static inline __attribute__((__always_inline__))
+       #define NOINLINE                __attribute__((noinline))
        #define LIKELY(x)               __builtin_expect(!!(x), 1)
        #define UNLIKELY(x)             __builtin_expect(!!(x), 0)
        #define PURE_FUNC               __attribute__((pure))
        #define RESTRICT                __restrict__
        #define MUST_CHECK              __attribute__((warn_unused_result))
        #define PACKED                  __attribute__((packed))
+       #if CPU_ARM | CPU_CM3
+               #define NAKED           __attribute__((naked))
+       #else
+               #define NAKED
+       #endif
+
        /**
         * Force compiler to realod context variable.
         */
                #define DEPRECATED  __attribute__((__deprecated__))
        #endif
 
+       #if GNUC_PREREQ(4,5)
+               #define UNREACHABLE() __builtin_unreachable()
+       #endif
+
        #ifndef __cplusplus
                #define ASSERT_TYPE_EQUAL(var1, var2) \
                        STATIC_ASSERT(__builtin_types_compatible_p(typeof(var1), typeof(var2)))
 #ifndef INLINE
 #define INLINE                 static inline
 #endif
+#ifndef NOINLINE
+#define NOINLINE               /* nothing */
+#endif
 #ifndef NORETURN
 #define NORETURN               /* nothing */
 #endif
 #define MEMORY_BARRIER         /* nothing */
 #warning No memory barrier defined for select compiler. If you use the kernel check it.
 #endif
+#ifndef UNREACHABLE
+#define UNREACHABLE() for (;;)
+#endif
 
 
 /* Misc definitions */
@@ -410,7 +427,6 @@ typedef const void * const_iptr_t;
 
 typedef unsigned char sigbit_t;  /**< Type for signal bits. */
 typedef unsigned char sigmask_t; /**< Type for signal masks. */
-typedef unsigned char page_t;    /**< Type for banked memory pages. */
 
 
 /**
@@ -441,7 +457,7 @@ typedef unsigned char page_t;    /**< Type for banked memory pages. */
        #if CPU_X86
                /* 32bit or 64bit (32bit for _WIN64). */
                typedef long ssize_t;
-       #elif CPU_ARM
+       #elif CPU_ARM || CPU_CM3
                typedef int ssize_t;
        #elif CPU_AVR
                /* 16bit (missing in avr-libc's sys/types.h). */