Line data Source code
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 "InastempGlobal.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 Parent::GetVecLength;
27 :
28 4153 : using InaVecSSE41<double>::InaVecSSE41;
29 :
30 72 : inline InaVecSSE42(){}
31 :
32 : inline InaVecSSE42(const InaVecSSE41<double>& other)
33 28 : : Parent(other){}
34 :
35 : inline static const char* GetName(){
36 : return "InaVecSSE42<double>";
37 : }
38 :
39 : inline static InaIfElse< InaVecSSE42<double> >::ThenClass If(const typename Parent::MaskType& inTest) {
40 30 : return InaIfElse< InaVecSSE42<double> >::IfClass().If(inTest);
41 : }
42 : };
43 :
44 : #endif
|