1 /////////////////////////////////////////////////////////////////////////// 2 // Inastemp - Berenger Bramas MPCDF - 2016 3 // Under MIT Licence, please you must read the LICENCE file. 4 /////////////////////////////////////////////////////////////////////////// 5 #ifndef INAVECSSE42DOUBLE_HPP 6 #define INAVECSSE42DOUBLE_HPP 7 8 #include "InastempConfig.h" 9 #include "SSE41/InaVecSSE41Double.hpp" 10 11 #ifndef INASTEMP_USE_SSE42 12 #error InaVecSSE42<double> is included but SSE42 is not enable in the configuration 13 #endif 14 15 #include <tmmintrin.h> 16 #include <emmintrin.h> 17 18 template <class RealType> 19 class InaVecSSE42; 20 21 template <> 22 class alignas(16) InaVecSSE42<double> : public InaVecSSE41<double> { 23 using Parent = InaVecSSE41<double>; 24 25 public: 26 using InaVecSSE41<double>::InaVecSSE41; 27 InaVecSSE42()28 inline InaVecSSE42(){} 29 InaVecSSE42(const InaVecSSE41<double> & other)30 inline InaVecSSE42(const InaVecSSE41<double>& other) 31 : Parent(other){} 32 GetName()33 inline static const char* GetName(){ 34 return "InaVecSSE42<double>"; 35 } 36 If(const typename Parent::MaskType & inTest)37 inline static InaIfElse< InaVecSSE42<double> >::ThenClass If(const typename Parent::MaskType& inTest) { 38 return InaIfElse< InaVecSSE42<double> >::IfClass().If(inTest); 39 } 40 }; 41 42 #endif 43