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 INAVECSSSE3FLOAT_HPP
6 : #define INAVECSSSE3FLOAT_HPP
7 :
8 : #include "InastempGlobal.h"
9 : #include "SSE3/InaVecSSE3Float.hpp"
10 :
11 : #ifndef INASTEMP_USE_SSSE3
12 : #error InaVecSSSE3<float> is included but SSSE3 is not enable in the configuration
13 : #endif
14 :
15 : #include <tmmintrin.h>
16 : #include <emmintrin.h>
17 :
18 : // Forward declarations
19 : template <class RealType>
20 : class InaVecSSSE3;
21 :
22 : // SSSE3 add _mm_sign_epi32/_mm_abs_epi32 but not useful here
23 : template <>
24 : class alignas(16) InaVecSSSE3<float> : public InaVecSSE3<float> {
25 : using Parent = InaVecSSE3<float>;
26 :
27 : public:
28 : using Parent::GetVecLength;
29 :
30 18326 : using InaVecSSE3<float>::InaVecSSE3;
31 :
32 369 : inline InaVecSSSE3(){}
33 :
34 : inline InaVecSSSE3(const InaVecSSE3<float>& other)
35 1589 : : Parent(other){}
36 :
37 : inline static const char* GetName(){
38 : return "InaVecSSSE3<float>";
39 : }
40 :
41 : inline static InaIfElse< InaVecSSSE3<float> >::ThenClass If(const typename Parent::MaskType& inTest) {
42 30 : return InaIfElse< InaVecSSSE3<float> >::IfClass().If(inTest);
43 : }
44 : };
45 :
46 : #endif
|