#define RESTRICT __restrict__
#define MUST_CHECK __attribute__((warn_unused_result))
#define PACKED __attribute__((packed))
+ #define ALIGNED(x) __attribute__ ((__aligned__(x)))
#if CPU_ARM | CPU_CM3
#define NAKED __attribute__((naked))
#else
#ifndef PACKED
#define PACKED /* nothing */
#endif
+#ifndef ALIGNED
+#define ALIGNED /* nothing */
+#endif
#ifndef MEMORY_BARRIER
#define MEMORY_BARRIER /* nothing */
#warning No memory barrier defined for select compiler. If you use the kernel check it.
* NOTE: the construct __builtin_types_compatible_p() is only
* available for C.
*/
- #define countof(a) (sizeof(a) / sizeof(*(a)) + \
- sizeof(typeof(int[1 - 2 * \
- !!__builtin_types_compatible_p(typeof(a), \
- typeof(&a[0]))])) * 0)
+ #define countof(a) (sizeof(a) / sizeof(*(a)) + \
+ STATIC_ASSERT_EXPR( \
+ !__builtin_types_compatible_p( \
+ typeof(a), typeof(&a[0]))))
#else
#define countof(a) (sizeof(a) / sizeof(*(a)))
#endif