/*
LUFA Library
- Copyright (C) Dean Camera, 2011.
+ Copyright (C) Dean Camera, 2012.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
*/
/** \file
- * \brief Compiler specific macros for code optimization and correctness.
+ * \brief Compiler specific definitions for code optimization and correctness.
*
* \copydetails Group_CompilerSpecific
*
*/
/** \ingroup Group_Common
- * \defgroup Group_CompilerSpecific Compiler Specific Macros
- * \brief Compiler specific macros for code optimization and correctness.
+ * \defgroup Group_CompilerSpecific Compiler Specific Definitions
+ * \brief Compiler specific definitions for code optimization and correctness.
*
- * Compiler specific macros to expose certain compiler features which may increase the level of code optimization
+ * Compiler specific definitions to expose certain compiler features which may increase the level of code optimization
* for a specific compiler, or correct certain issues that may be present such as memory barriers for use in conjunction
- * with atomic variable access.
+ * with atomic variable access.
*
* Where possible, on alternative compilers, these macros will either have no effect, or default to returning a sane value
* so that they can be used in existing code without the need for extra compiler checks in the user application code.
*
* \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))
+ #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.
+ #define GCC_MEMORY_BARRIER() __asm__ __volatile__("" ::: "memory");
+
+ /** Determines 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.
+ * \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.
+ * \return Boolean true if the given value is known to be a compile time constant, false otherwise.
*/
- #define GCC_IS_COMPILE_CONST(x) __builtin_constant_p(x)
+ #define GCC_IS_COMPILE_CONST(x) __builtin_constant_p(x)
#else
#define GCC_FORCE_POINTER_ACCESS(StructPtr)
#define GCC_MEMORY_BARRIER()
- #define GCC_IS_COMPILE_CONST(x) 0
+ #define GCC_IS_COMPILE_CONST(x) 0
#endif
#endif