File indexing completed on 2025-01-31 10:25:31
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifndef VC_AVX_CONST_DATA_H_
0029 #define VC_AVX_CONST_DATA_H_
0030
0031 #include "../common/data.h"
0032 #include "macros.h"
0033
0034 namespace Vc_VERSIONED_NAMESPACE
0035 {
0036 namespace AVX
0037 {
0038
0039 alignas(64) extern const unsigned int _IndexesFromZero32[ 8];
0040 alignas(16) extern const unsigned short _IndexesFromZero16[16];
0041 alignas(16) extern const unsigned char _IndexesFromZero8 [32];
0042
0043 struct alignas(64) c_general
0044 {
0045 static const float oneFloat;
0046 static const unsigned int absMaskFloat[2];
0047 static const unsigned int signMaskFloat[2];
0048 static const unsigned int highMaskFloat;
0049 static const unsigned short minShort[2];
0050 static const unsigned short one16[2];
0051 static const float _2power31;
0052 static const double oneDouble;
0053 static const unsigned long long frexpMask;
0054 static const unsigned long long highMaskDouble;
0055 };
0056
0057 template<typename T> struct c_trig
0058 {
0059 alignas(64) static const T data[];
0060 };
0061 #ifndef Vc_MSVC
0062 template <> alignas(64) const float c_trig<float>::data[];
0063 template <> alignas(64) const double c_trig<double>::data[];
0064 #endif
0065
0066 template<typename T> struct c_log
0067 {
0068 typedef float floatAlias Vc_MAY_ALIAS;
0069 static Vc_ALWAYS_INLINE float d(int i) { return *reinterpret_cast<const floatAlias *>(&data[i]); }
0070 alignas(64) static const unsigned int data[21];
0071 };
0072 #ifndef Vc_MSVC
0073 template<> alignas(64) const unsigned int c_log<float>::data[21];
0074 #endif
0075
0076 template<> struct c_log<double>
0077 {
0078 enum VectorSize { Size = 16 / sizeof(double) };
0079 typedef double doubleAlias Vc_MAY_ALIAS;
0080 static Vc_ALWAYS_INLINE double d(int i) { return *reinterpret_cast<const doubleAlias *>(&data[i]); }
0081 alignas(64) static const unsigned long long data[21];
0082 };
0083
0084 }
0085 }
0086
0087 namespace Vc_VERSIONED_NAMESPACE
0088 {
0089 namespace AVX2
0090 {
0091 using AVX::_IndexesFromZero8;
0092 using AVX::_IndexesFromZero16;
0093 using AVX::_IndexesFromZero32;
0094 using AVX::c_general;
0095 using AVX::c_trig;
0096 using AVX::c_log;
0097 }
0098 }
0099
0100 #endif