1
0
Fork 0
forked from suyu/suyu

Stop defining GCC always_inline attributes as __forceinline

__forceinline is a MSVC extension, which may confuse some people working on the codebase.
Furthermore, the C++ standard dictates that all names which contain adjacent underscores are reserved.
This commit is contained in:
archshift 2015-08-11 19:45:15 -07:00
parent 35f3360663
commit d1ae413ffd
2 changed files with 8 additions and 7 deletions

View file

@ -141,22 +141,22 @@ public:
BitField& operator=(const BitField&) = delete; BitField& operator=(const BitField&) = delete;
#endif #endif
__forceinline BitField& operator=(T val) FORCE_INLINE BitField& operator=(T val)
{ {
Assign(val); Assign(val);
return *this; return *this;
} }
__forceinline operator T() const FORCE_INLINE operator T() const
{ {
return Value(); return Value();
} }
__forceinline void Assign(const T& value) { FORCE_INLINE void Assign(const T& value) {
storage = (storage & ~GetMask()) | (((StorageType)value << position) & GetMask()); storage = (storage & ~GetMask()) | (((StorageType)value << position) & GetMask());
} }
__forceinline T Value() const FORCE_INLINE T Value() const
{ {
if (std::numeric_limits<T>::is_signed) if (std::numeric_limits<T>::is_signed)
{ {
@ -170,7 +170,7 @@ public:
} }
// TODO: we may want to change this to explicit operator bool() if it's bug-free in VS2015 // TODO: we may want to change this to explicit operator bool() if it's bug-free in VS2015
__forceinline bool ToBool() const FORCE_INLINE bool ToBool() const
{ {
return Value() != 0; return Value() != 0;
} }
@ -187,7 +187,7 @@ private:
// Unsigned version of StorageType // Unsigned version of StorageType
typedef typename std::make_unsigned<StorageType>::type StorageTypeU; typedef typename std::make_unsigned<StorageType>::type StorageTypeU;
__forceinline StorageType GetMask() const FORCE_INLINE StorageType GetMask() const
{ {
return (((StorageTypeU)~0) >> (8 * sizeof(T)-bits)) << position; return (((StorageTypeU)~0) >> (8 * sizeof(T)-bits)) << position;
} }

View file

@ -20,12 +20,13 @@
#ifdef _WIN32 #ifdef _WIN32
// Alignment // Alignment
#define FORCE_INLINE __forceinline
#define MEMORY_ALIGNED16(x) __declspec(align(16)) x #define MEMORY_ALIGNED16(x) __declspec(align(16)) x
#define MEMORY_ALIGNED32(x) __declspec(align(32)) x #define MEMORY_ALIGNED32(x) __declspec(align(32)) x
#define MEMORY_ALIGNED64(x) __declspec(align(64)) x #define MEMORY_ALIGNED64(x) __declspec(align(64)) x
#define MEMORY_ALIGNED128(x) __declspec(align(128)) x #define MEMORY_ALIGNED128(x) __declspec(align(128)) x
#else #else
#define __forceinline inline __attribute__((always_inline)) #define FORCE_INLINE inline __attribute__((always_inline))
#define MEMORY_ALIGNED16(x) __attribute__((aligned(16))) x #define MEMORY_ALIGNED16(x) __attribute__((aligned(16))) x
#define MEMORY_ALIGNED32(x) __attribute__((aligned(32))) x #define MEMORY_ALIGNED32(x) __attribute__((aligned(32))) x
#define MEMORY_ALIGNED64(x) __attribute__((aligned(64))) x #define MEMORY_ALIGNED64(x) __attribute__((aligned(64))) x