clean up compiler attribute
This commit is contained in:
@@ -57,41 +57,35 @@
|
||||
#define BIT_CLR_(x, n) ( (x) & (~BIT_(n)) ) ///< clear n-th bit of x
|
||||
#define BIT_TEST_(x, n) ( ((x) & BIT_(n)) ? true : false ) ///< check if n-th bit of x is 1
|
||||
|
||||
static inline uint32_t bit_set(uint32_t value, uint8_t n) ATTR_CONST ATTR_ALWAYS_INLINE;
|
||||
static inline uint32_t bit_set(uint32_t value, uint8_t n)
|
||||
{
|
||||
return value | BIT_(n);
|
||||
}
|
||||
|
||||
static inline uint32_t bit_clear(uint32_t value, uint8_t n) ATTR_CONST ATTR_ALWAYS_INLINE;
|
||||
static inline uint32_t bit_clear(uint32_t value, uint8_t n)
|
||||
{
|
||||
return value & (~BIT_(n));
|
||||
}
|
||||
|
||||
static inline bool bit_test(uint32_t value, uint8_t n) ATTR_CONST ATTR_ALWAYS_INLINE;
|
||||
static inline bool bit_test(uint32_t value, uint8_t n)
|
||||
{
|
||||
return (value & BIT_(n)) ? true : false;
|
||||
}
|
||||
|
||||
///< create a mask with n-bit lsb set to 1
|
||||
static inline uint32_t bit_mask(uint8_t n) ATTR_CONST ATTR_ALWAYS_INLINE;
|
||||
static inline uint32_t bit_mask(uint8_t n)
|
||||
{
|
||||
return (n < 32) ? ( BIT_(n) - 1 ) : UINT32_MAX;
|
||||
}
|
||||
|
||||
static inline uint32_t bit_mask_range(uint8_t start, uint32_t end) ATTR_CONST ATTR_ALWAYS_INLINE;
|
||||
static inline uint32_t bit_mask_range(uint8_t start, uint32_t end)
|
||||
{
|
||||
return bit_mask(end+1) & ~ bit_mask(start);
|
||||
}
|
||||
|
||||
static inline uint32_t bit_set_range(uint32_t value, uint8_t start, uint8_t end, uint32_t pattern) ATTR_CONST ATTR_ALWAYS_INLINE;
|
||||
static inline uint32_t bit_set_range(uint32_t value, uint8_t start, uint8_t end, uint32_t pattern)
|
||||
{
|
||||
return ( value & ~bit_mask_range(start, end) ) | (pattern << start);
|
||||
return ( value & ~bit_mask_range(start, end) ) | (pattern << start);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@file compiler_gcc.h
|
||||
@file tusb_compiler_gcc.h
|
||||
@author hathach (tinyusb.org)
|
||||
|
||||
@section LICENSE
|
||||
@@ -49,72 +49,34 @@
|
||||
|
||||
#define ALIGN_OF(x) __alignof__(x)
|
||||
|
||||
/// Normally, the compiler places the objects it generates in sections like data or bss & function in text. Sometimes, however, you need additional sections, or you need certain particular variables to appear in special sections, for example to map to special hardware. The section attribute specifies that a variable (or function) lives in a particular section
|
||||
#define ATTR_SECTION(sec_name) __attribute__ (( section(#sec_name) ))
|
||||
|
||||
/// If this attribute is used on a function declaration and a call to such a function is not eliminated through dead code elimination or other optimizations, an error that includes message is diagnosed. This is useful for compile-time checking
|
||||
#define ATTR_ERROR(Message) __attribute__ ((error(Message)))
|
||||
|
||||
/// If this attribute is used on a function declaration and a call to such a function is not eliminated through dead code elimination or other optimizations, a warning that includes message is diagnosed. This is useful for compile-time checking
|
||||
#define ATTR_WARNING(Message) __attribute__ ((warning(Message)))
|
||||
|
||||
/** \defgroup Group_VariableAttr Variable Attributes
|
||||
* @{ */
|
||||
|
||||
/// This attribute specifies a minimum alignment for the variable or structure field, measured in bytes
|
||||
#define ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes)))
|
||||
|
||||
/// The packed attribute specifies that a variable or structure field should have the smallest possible alignment—one byte for a variable, and one bit for a field, unless you specify a larger value with the aligned attribute
|
||||
/// Place variable in a specific section
|
||||
#define ATTR_SECTION(sec_name) __attribute__ (( section(#sec_name) ))
|
||||
|
||||
/// The packed attribute specifies that a variable or structure field should have
|
||||
/// the smallest possible alignment—one byte for a variable, and one bit for a field.
|
||||
#define ATTR_PACKED __attribute__ ((packed))
|
||||
#define ATTR_PREPACKED
|
||||
|
||||
/** @} */
|
||||
|
||||
/** \defgroup Group_FuncAttr Function Attributes
|
||||
* @{ */
|
||||
|
||||
/// Generally, functions are not inlined unless optimization is specified. For functions declared inline, this attribute inlines the function even if no optimization level is specified
|
||||
/// This attribute inlines the function even if no optimization level is specified
|
||||
#define ATTR_ALWAYS_INLINE __attribute__ ((always_inline))
|
||||
|
||||
/// The nonnull attribute specifies that some function parameters should be non-null pointers. f the compiler determines that a null pointer is passed in an argument slot marked as non-null, and the -Wnonnull option is enabled, a warning is issued. All pointer arguments are marked as non-null
|
||||
#define ATTR_NON_NULL __attribute__ ((nonull))
|
||||
/// The deprecated attribute results in a warning if the function is used anywhere in the source file.
|
||||
/// This is useful when identifying functions that are expected to be removed in a future version of a program.
|
||||
#define ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess)))
|
||||
|
||||
/// Many functions have no effects except the return value and their return value depends only on the parameters and/or global variables. Such a function can be subject to common subexpression elimination and loop optimization just as an arithmetic operator would be. These functions should be declared with the attribute pure
|
||||
#define ATTR_PURE __attribute__ ((pure))
|
||||
|
||||
/// \brief Many functions do not examine any values except their arguments, and have no effects except the return value. Basically this is just slightly more strict class than the pure attribute below, since function is not allowed to read global memory.
|
||||
/// Note that a function that has pointer arguments and examines the data pointed to must not be declared const. Likewise, a function that calls a non-const function usually must not be const. It does not make sense for a const function to return void
|
||||
#define ATTR_CONST __attribute__ ((const))
|
||||
|
||||
/// The deprecated attribute results in a warning if the function is used anywhere in the source file. This is useful when identifying functions that are expected to be removed in a future version of a program. The warning also includes the location of the declaration of the deprecated function, to enable users to easily find further information about why the function is deprecated, or what they should do instead. Note that the warnings only occurs for uses
|
||||
#define ATTR_DEPRECATED __attribute__ ((deprecated))
|
||||
|
||||
/// Same as the deprecated attribute with optional message in the warning
|
||||
#define ATTR_DEPRECATED_MESS(mess) __attribute__ ((deprecated(mess)))
|
||||
|
||||
/// The weak attribute causes the declaration to be emitted as a weak symbol rather than a global. This is primarily useful in defining library functions that can be overridden in user code
|
||||
/// The weak attribute causes the declaration to be emitted as a weak symbol rather than a global.
|
||||
/// This is primarily useful in defining library functions that can be overridden in user code
|
||||
#define ATTR_WEAK __attribute__ ((weak))
|
||||
|
||||
/// The alias attribute causes the declaration to be emitted as an alias for another symbol, which must be specified
|
||||
#define ATTR_ALIAS(func) __attribute__ ((alias(#func)))
|
||||
|
||||
/// The weakref attribute marks a declaration as a weak reference. It is equivalent with weak + alias attribute, but require function is static
|
||||
#define ATTR_WEAKREF(func) __attribute__ ((weakref(#func)))
|
||||
|
||||
/// The warn_unused_result attribute causes a warning to be emitted if a caller of the function with this attribute does not use its return value. This is useful for functions where not checking the result is either a security problem or always a bug
|
||||
/// Warn if a caller of the function with this attribute does not use its return value.
|
||||
#define ATTR_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result))
|
||||
|
||||
/// This attribute, attached to a function, means that code must be emitted for the function even if it appears that the function is not referenced. This is useful, for example, when the function is referenced only in inline assembly.
|
||||
#define ATTR_USED __attribute__ ((used))
|
||||
|
||||
/// This attribute, attached to a function, means that the function is meant to be possibly unused. GCC does not produce a warning for this function.
|
||||
/// Function is meant to be possibly unused. GCC does not produce a warning for this function.
|
||||
#define ATTR_UNUSED __attribute__ ((unused))
|
||||
|
||||
/** @} */
|
||||
|
||||
/** \defgroup Group_BuiltinFunc Built-in Functions
|
||||
* @{ */
|
||||
|
||||
// TODO mcu specific
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
#define __n2be(x) __builtin_bswap32(x) ///< built-in function to convert 32-bit from native to Big Endian
|
||||
@@ -124,8 +86,6 @@
|
||||
#define __be2n_16(u16) __n2be_16(u16)
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@file compiler_iar.h
|
||||
@file tusb_compiler_iar.h
|
||||
@author hathach (tinyusb.org)
|
||||
|
||||
@section LICENSE
|
||||
@@ -36,15 +36,6 @@
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
/** \file
|
||||
* \brief IAR Compiler
|
||||
*/
|
||||
|
||||
/** \ingroup Group_Compiler
|
||||
* \defgroup Group_IAR IAR ARM
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _TUSB_COMPILER_IAR_H_
|
||||
#define _TUSB_COMPILER_IAR_H_
|
||||
|
||||
@@ -52,24 +43,17 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ALIGN_OF(x) __ALIGNOF__(x)
|
||||
#define ATTR_PREPACKED __packed
|
||||
#define ATTR_PACKED
|
||||
#define ALIGN_OF(x) __ALIGNOF__(x)
|
||||
#define ATTR_ALIGNED(bytes) _Pragma(XSTRING_(data_alignment=##bytes))
|
||||
//#define ATTR_SECTION(section) _Pragma((#section))
|
||||
#define ATTR_PREPACKED __packed
|
||||
#define ATTR_PACKED
|
||||
|
||||
#define ATTR_ALIGNED(bytes) _Pragma(XSTRING_(data_alignment=##bytes))
|
||||
|
||||
#ifndef ATTR_ALWAYS_INLINE
|
||||
/// Generally, functions are not inlined unless optimization is specified. For functions declared inline, this attribute inlines the function even if no optimization level is specified
|
||||
#define ATTR_ALWAYS_INLINE error
|
||||
#endif
|
||||
|
||||
#define ATTR_PURE // TODO IAR pure function attribute
|
||||
#define ATTR_CONST // TODO IAR const function attribute
|
||||
#define ATTR_ALWAYS_INLINE
|
||||
#define ATTR_DEPRECATED(mess)
|
||||
#define ATTR_WEAK __weak
|
||||
|
||||
#define ATTR_WARN_UNUSED_RESULT
|
||||
#define ATTR_USED
|
||||
#define ATTR_UNUSED
|
||||
|
||||
// built-in function to convert 32-bit Big-Endian to Little-Endian
|
||||
@@ -86,4 +70,3 @@
|
||||
|
||||
#endif /* _TUSB_COMPILER_IAR_H_ */
|
||||
|
||||
/** @} */
|
||||
|
||||
Reference in New Issue
Block a user