compiler.hh (11168:f98eb2da15a4) compiler.hh (12225:314b451761dc)
1/*
1/*
2 * Copyright (c) 2012 ARM Limited
2 * Copyright (c) 2012,2017 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 27 unchanged lines hidden (view full) ---

38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Authors: Ali Saidi
41 */
42
43#ifndef __BASE_COMPILER_HH__
44#define __BASE_COMPILER_HH__
45
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 27 unchanged lines hidden (view full) ---

38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Authors: Ali Saidi
41 */
42
43#ifndef __BASE_COMPILER_HH__
44#define __BASE_COMPILER_HH__
45
46#include <memory>
47
46// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
47
48#if defined(__GNUC__) // clang or gcc
49# define M5_ATTR_NORETURN __attribute__((noreturn))
50# define M5_DUMMY_RETURN
51# define M5_VAR_USED __attribute__((unused))
52# define M5_ATTR_PACKED __attribute__ ((__packed__))
53# define M5_NO_INLINE __attribute__ ((__noinline__))
54# define M5_DEPRECATED __attribute__((deprecated))
55# define M5_DEPRECATED_MSG(MSG) __attribute__((deprecated(MSG)))
56#endif
57
58#if defined(__clang__)
59# define M5_CLASS_VAR_USED M5_VAR_USED
60#else
61# define M5_CLASS_VAR_USED
62#endif
63
48// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
49
50#if defined(__GNUC__) // clang or gcc
51# define M5_ATTR_NORETURN __attribute__((noreturn))
52# define M5_DUMMY_RETURN
53# define M5_VAR_USED __attribute__((unused))
54# define M5_ATTR_PACKED __attribute__ ((__packed__))
55# define M5_NO_INLINE __attribute__ ((__noinline__))
56# define M5_DEPRECATED __attribute__((deprecated))
57# define M5_DEPRECATED_MSG(MSG) __attribute__((deprecated(MSG)))
58#endif
59
60#if defined(__clang__)
61# define M5_CLASS_VAR_USED M5_VAR_USED
62#else
63# define M5_CLASS_VAR_USED
64#endif
65
66// std::make_unique redefined for C++11 compilers
67namespace m5
68{
69
70#if __cplusplus == 201402L // C++14
71
72using std::make_unique;
73
74#else // C++11
75
76/** Defining custom version of make_unique: m5::make_unique<>() */
77template<typename T, typename... Args>
78std::unique_ptr<T>
79make_unique( Args&&... constructor_args )
80{
81 return std::unique_ptr<T>(
82 new T( std::forward<Args>(constructor_args)... )
83 );
84}
85
86#endif // __cplusplus == 201402L
87
88} //namespace m5
89
64#endif // __BASE_COMPILER_HH__
90#endif // __BASE_COMPILER_HH__