Split out compiler specific helper macros into a new CompilerSpecific.h header file inside the library, for future expansion.

This commit is contained in:
Dean Camera 2011-07-06 02:11:13 +00:00
parent 7932ce86bd
commit bfa22eca26
3 changed files with 102 additions and 30 deletions

View file

@ -71,6 +71,7 @@
#include "LUFAConfig.h"
#endif
#include "CompilerSpecific.h"
#include "Architectures.h"
#include "Attributes.h"
#include "BoardTypes.h"
@ -228,31 +229,6 @@
#define pgm_read_ptr(Address) (void*)pgm_read_word(Address)
#endif
#endif
/** Forces GCC to use pointer indirection (via the device's pointer register pairs) when accessing the given
* struct pointer. In some cases GCC will emit non-optimal assembly code when accessing a structure through
* a pointer, resulting in a larger binary. When this macro is used on a (non \c const) structure pointer before
* use, it will force GCC to use pointer indirection on the elements rather than direct store and load
* instructions.
*
* \param[in, out] StructPtr Pointer to a structure which is to be forced into indirect access mode.
*/
#define GCC_FORCE_POINTER_ACCESS(StructPtr) __asm__ __volatile__("" : "=b" (StructPtr) : "0" (StructPtr))
/** Forces GCC to create a memory barrier, ensuring that memory accesses are not reordered past the barrier point.
* This can be used before ordering-critical operations, to ensure that the compiler does not re-order the resulting
* assembly output in an unexpected manner on sections of code that are ordering-specific.
*/
#define GCC_MEMORY_BARRIER() __asm__ __volatile__("" ::: "memory");
/** Evaluates to boolean true if the specified value can be determined at compile time to be a constant value
* when compiling under GCC.
*
* \param[in] x Value to check compile time constantness of.
*
* \return Boolean true if the given value is known to be a compile time constant.
*/
#define GCC_IS_COMPILE_CONST(x) __builtin_constant_p(x)
#if !defined(ISR) || defined(__DOXYGEN__)
/** Macro for the definition of interrupt service routines, so that the compiler can insert the required