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