File indexing completed on 2025-01-31 10:25:43
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_SSE_CONST_DATA_H_
0029 #define VC_SSE_CONST_DATA_H_
0030
0031 #include "../common/data.h"
0032 #include "macros.h"
0033
0034 namespace Vc_VERSIONED_NAMESPACE
0035 {
0036 namespace SSE
0037 {
0038
0039 alignas(16) extern const unsigned int _IndexesFromZero4[4];
0040 alignas(16) extern const unsigned short _IndexesFromZero8[8];
0041 alignas(16) extern const unsigned char _IndexesFromZero16[16];
0042
0043 struct c_general
0044 {
0045 alignas(64) static const int absMaskFloat[4];
0046 alignas(16) static const unsigned int signMaskFloat[4];
0047 alignas(16) static const unsigned int highMaskFloat[4];
0048 alignas(16) static const short minShort[8];
0049
0050 alignas(16) static const unsigned short one16[8];
0051 alignas(16) static const unsigned int one32[4];
0052 alignas(16) static const float oneFloat[4];
0053
0054 alignas(16) static const unsigned long long highMaskDouble[2];
0055 alignas(16) static const double oneDouble[2];
0056 alignas(16) static const long long absMaskDouble[2];
0057 alignas(16) static const unsigned long long signMaskDouble[2];
0058 alignas(16) static const unsigned long long frexpMask[2];
0059 };
0060
0061 template<typename T> struct c_trig
0062 {
0063 alignas(64) static const T data[];
0064 };
0065 #ifndef Vc_MSVC
0066 template <> alignas(64) const float c_trig<float>::data[];
0067 template <> alignas(64) const double c_trig<double>::data[];
0068 #endif
0069
0070 template<typename T> struct c_log
0071 {
0072 enum VectorSize { Size = 16 / sizeof(T) };
0073 static Vc_ALWAYS_INLINE Vc_CONST const float *d(int i) { return reinterpret_cast<const float *>(&data[i * Size]); }
0074 alignas(64) static const unsigned int data[21 * Size];
0075 };
0076 #ifndef Vc_MSVC
0077 template<> alignas(64) const unsigned int c_log<float>::data[21 * 4];
0078 #endif
0079
0080 template<> struct c_log<double>
0081 {
0082 enum VectorSize { Size = 16 / sizeof(double) };
0083 static Vc_ALWAYS_INLINE Vc_CONST const double *d(int i) { return reinterpret_cast<const double *>(&data[i * Size]); }
0084 alignas(64) static const unsigned long long data[21 * Size];
0085 };
0086
0087 }
0088 }
0089
0090 #endif