X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcfg%2Fcompiler.h;h=4d0c33be9a11a6eac62421476db70d5887712b9a;hb=0638e6c0ca69a05d5d023186abebe63645210b1b;hp=87cdd9425a4159617880e40e2a803d929089a397;hpb=a0709949ddb69e5e28d79f7898c37ebf281696b0;p=bertos.git diff --git a/bertos/cfg/compiler.h b/bertos/cfg/compiler.h index 87cdd942..4d0c33be 100644 --- a/bertos/cfg/compiler.h +++ b/bertos/cfg/compiler.h @@ -181,6 +181,12 @@ #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. */ @@ -190,6 +196,10 @@ #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))) @@ -323,6 +333,9 @@ #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 */ @@ -441,7 +454,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). */ @@ -490,6 +503,16 @@ typedef unsigned char page_t; /**< Type for banked memory pages. */ */ #define countof(a) (sizeof(a) / sizeof(*(a))) #endif +#ifndef alignof + /** + * Return the alignment in memory of a generic data type. + * + * \note We need to worry about alignment when allocating memory that + * will be used later by unknown objects (e.g., malloc()) or, more + * generally, whenever creating generic container types. + */ + #define alignof(type) offsetof(struct { char c; type member; }, member) +#endif /** * Cast a member of a structure out to the containing structure.