BitField: Optimize generated assembly by forcing inlining.

This commit is contained in:
Tony Wasserka 2014-04-13 11:53:44 +02:00
parent 1b9addd594
commit 12841928df
1 changed files with 5 additions and 3 deletions

View File

@ -36,6 +36,8 @@
#include <limits> #include <limits>
#include <type_traits> #include <type_traits>
#include "Common.h"
/* /*
* Abstract bitfield class * Abstract bitfield class
* *
@ -113,13 +115,13 @@ public:
// so that we can use this within unions // so that we can use this within unions
BitField() = default; BitField() = default;
BitField& operator=(T val) __forceinline BitField& operator=(T val)
{ {
storage = (storage & ~GetMask()) | ((val << position) & GetMask()); storage = (storage & ~GetMask()) | ((val << position) & GetMask());
return *this; return *this;
} }
operator T() const __forceinline operator T() const
{ {
if (std::numeric_limits<T>::is_signed) if (std::numeric_limits<T>::is_signed)
{ {
@ -144,7 +146,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;
StorageType GetMask() const __forceinline StorageType GetMask() const
{ {
return ((~(StorageTypeU)0) >> (8*sizeof(T) - bits)) << position; return ((~(StorageTypeU)0) >> (8*sizeof(T) - bits)) << position;
} }