2013-05-06 07:50:19 +02:00
/**************************************************************************/
/*!
@ file compiler_iar . h
@ author hathach ( tinyusb . org )
2012-11-26 11:19:26 +01:00
2013-05-06 07:50:19 +02:00
@ section LICENSE
Software License Agreement ( BSD License )
Copyright ( c ) 2013 , hathach ( tinyusb . org )
All rights reserved .
Redistribution and use in source and binary forms , with or without
modification , are permitted provided that the following conditions are met :
1. Redistributions of source code must retain the above copyright
notice , this list of conditions and the following disclaimer .
2. Redistributions in binary form must reproduce the above copyright
notice , this list of conditions and the following disclaimer in the
documentation and / or other materials provided with the distribution .
3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission .
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ' ' AS IS ' ' AND ANY
EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES
INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ;
LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
This file is part of the tinyusb stack .
*/
/**************************************************************************/
2012-11-26 11:19:26 +01:00
2012-11-29 04:41:33 +01:00
/** \file
2012-12-04 12:18:29 +01:00
* \ brief IAR Compiler
2012-11-29 04:41:33 +01:00
*/
2012-12-04 12:18:29 +01:00
/** \ingroup Group_Compiler
* \ defgroup Group_IAR IAR ARM
2012-11-29 04:41:33 +01:00
* @ {
*/
2012-12-04 12:18:29 +01:00
# ifndef _TUSB_COMPILER_IAR_H_
# define _TUSB_COMPILER_IAR_H_
2012-11-27 09:21:47 +01:00
2012-12-04 12:18:29 +01:00
# ifdef __cplusplus
extern " C " {
# endif
2012-11-29 10:32:49 +01:00
2013-09-19 11:11:11 +02:00
# define ALIGN_OF(x) __ALIGNOF__(x)
2013-03-04 09:01:33 +01:00
2013-09-19 11:11:11 +02:00
# define ATTR_PACKED_STRUCT(x) __packed x
2012-12-04 12:18:29 +01:00
# define ATTR_PREPACKED __packed
# define ATTR_PACKED
2012-11-26 11:19:26 +01:00
2013-09-19 11:11:11 +02:00
# define ATTR_ALIGNED(Bytes) ATTR_ALIGNED_##Bytes
# define ATTR_ALIGNED_4096 _Pragma("data_alignment=4096")
# define ATTR_ALIGNED_2048 _Pragma("data_alignment=2048")
# define ATTR_ALIGNED_256 _Pragma("data_alignment=256")
# define ATTR_ALIGNED_128 _Pragma("data_alignment=128")
# define ATTR_ALIGNED_64 _Pragma("data_alignment=64")
# define ATTR_ALIGNED_48 _Pragma("data_alignment=48")
# define ATTR_ALIGNED_32 _Pragma("data_alignment=32")
# define ATTR_ALIGNED_4 _Pragma("data_alignment=4")
# 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_WEAK __weak
# define ATTR_WARN_UNUSED_RESULT
# define ATTR_USED
# define ATTR_UNUSED
2013-09-22 18:54:44 +02:00
// built-in function to convert 32-bit Big-Endian to Little-Endian
# define __be2le __REV
2013-09-25 11:20:38 +02:00
# define __le2be __be2le
2013-09-22 18:54:44 +02:00
2013-09-19 11:11:11 +02:00
#if 0
/** Indicates to the compiler that the function can not ever return, so that any stack restoring or
* return code may be omitted by the compiler in the resulting binary .
*/
# define ATTR_NO_RETURN
/** Indicates that the specified parameters of the function are pointers which should never be \c NULL.
* When applied as a 1 - based comma separated list the compiler will emit a warning if the specified
* parameters are known at compiler time to be \ c NULL at the point of calling the function .
*/
# define ATTR_NON_NULL_PTR_ARG(...)
/** Removes any preamble or postamble from the function. When used, the function will not have any
* register or stack saving code . This should be used with caution , and when used the programmer
* is responsible for maintaining stack and register integrity .
*/
# define ATTR_NAKED __attribute__ ((naked))
/** Prevents the compiler from considering a specified function for in-lining. When applied, the given
* function will not be in - lined under any circumstances .
*/
# define ATTR_NO_INLINE __attribute__ ((noinline))
/** Forces the compiler to inline the specified function. When applied, the given function will be
* in - lined under all circumstances .
*/
# define PRAGMA_ALWAYS_INLINE _Pragma("inline=forced")
# define ATTR_ALWAYS_INLINE
/** Indicates that the specified function is pure, in that it has no side-effects other than global
* or parameter variable access .
*/
# define ATTR_PURE __attribute__ ((pure))
/** Indicates that the specified function is constant, in that it has no side effects other than
* parameter access .
*/
# define ATTR_CONST
/** Marks a given function as deprecated, which produces a warning if the function is called. */
# define ATTR_DEPRECATED // __attribute__ ((deprecated))
/** Marks a function as a weak reference, which can be overridden by other functions with an
* identical name ( in which case the weak reference is discarded at link time ) .
*/
# define _PPTOSTR_(x) #x
# define PRAGMA_WEAK(name, vector) _Pragma(_PPTOSTR_(weak name=vector))
# define ATTR_WEAK
/** Marks a function as an alias for another function.
*
* \ param [ in ] Func Name of the function which the given function name should alias .
*/
# define ATTR_ALIAS(Func)
/** Forces the compiler to not automatically zero the given global variable on startup, so that the
* current RAM contents is retained . Under most conditions this value will be random due to the
* behaviour of volatile memory once power is removed , but may be used in some specific circumstances ,
* like the passing of values back after a system watchdog reset .
*/
# define ATTR_NO_INIT __attribute__ ((section (".noinit")))
/** Indicates the minimum alignment in bytes for a variable or struct element.
*
* \ param [ in ] Bytes Minimum number of bytes the item should be aligned to .
*/
# define PRAGMA_ALIGN_4096 _Pragma("data_alignment=4096")
# define PRAGMA_ALIGN_2048 _Pragma("data_alignment=2048")
# define PRAGMA_ALIGN_256 _Pragma("data_alignment=256")
# define PRAGMA_ALIGN_128 _Pragma("data_alignment=128")
# define PRAGMA_ALIGN_64 _Pragma("data_alignment=64")
# define PRAGMA_ALIGN_48 _Pragma("data_alignment=48")
# define PRAGMA_ALIGN_32 _Pragma("data_alignment=32")
# define PRAGMA_ALIGN_4 _Pragma("data_alignment=4")
# define ATTR_ALIGNED(Bytes)
//#define ATTR_DEPRECATED __attribute__ ((deprecated))
# define ATTR_ERROR(Message) // __attribute__ (( error(Message) ))
# define ATTR_WARNING(Message) // __attribute__ (( warning(Message) ))
# define ATTR_IAR_PACKED __packed
# define ATTR_PACKED
# endif
2012-12-04 12:18:29 +01:00
# ifdef __cplusplus
}
# endif
2012-11-29 09:40:57 +01:00
2012-12-04 12:18:29 +01:00
# endif /* _TUSB_COMPILER_IAR_H_ */
2012-11-29 09:40:57 +01:00
2012-12-04 12:18:29 +01:00
/** @} */