IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
LoadPack.h
Go to the documentation of this file.
1 // LoadPack.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_LOADPACK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_LOADPACK_H__
17 
22 
23 namespace ipsdk {
24 namespace simd {
25 namespace detail {
26 
29 
30 // load implementation for AVX512 for integral types
31 template<typename T>
33  typename boost::enable_if_c<sizeof(T) == 1>::type>
34 {
35  static IPSDK_FORCEINLINE
36  BasePack<ePackType::ePT_Avx512, T> act(const T* pT)
37  {
40  return pack;
41  }
42 
43  static IPSDK_FORCEINLINE
44  void act(BasePack<ePackType::ePT_Avx512, T>& pack, const T* pT)
45  {
47  }
48 };
49 
50 template<typename T>
52  typename boost::enable_if_c<sizeof(T) == 2>::type>
53 {
54  static IPSDK_FORCEINLINE
55  BasePack<ePackType::ePT_Avx512, T> act(const T* pT)
56  {
61  return pack;
62  }
63 
64  static IPSDK_FORCEINLINE
65  void
66  act(BasePack<ePackType::ePT_Avx512, T>& pack, const T* pT)
67  {
71  }
72 };
73 
74 template<typename T>
76  typename boost::enable_if_c<sizeof(T) == 4>::type>
77 {
78  static IPSDK_FORCEINLINE
79  BasePack<ePackType::ePT_Avx512, T> act(const T* pT)
80  {
86  pT + 2*Avx512Step<T>::Value);
88  pT + 3*Avx512Step<T>::Value);
89  return pack;
90  }
91 
92  static IPSDK_FORCEINLINE
93  void act(BasePack<ePackType::ePT_Avx512, T>& pack, const T* pT)
94  {
99  pT + 2*Avx512Step<T>::Value);
101  pT + 3*Avx512Step<T>::Value);
102  }
103 };
104 
105 template<typename T>
107  typename boost::enable_if_c<sizeof(T) == 8>::type>
108 {
109  static IPSDK_FORCEINLINE
110  BasePack<ePackType::ePT_Avx512, T> act(const T* pT)
111  {
115  pT + Avx512Step<T>::Value);
117  pT + 2*Avx512Step<T>::Value);
119  pT + 3*Avx512Step<T>::Value);
121  pT + 4*Avx512Step<T>::Value);
123  pT + 5*Avx512Step<T>::Value);
125  pT + 6*Avx512Step<T>::Value);
127  pT + 7*Avx512Step<T>::Value);
128  return pack;
129  }
130 
131  static IPSDK_FORCEINLINE
132  void
134  const T* pT)
135  {
138  pT + Avx512Step<T>::Value);
140  pT + 2*Avx512Step<T>::Value);
142  pT + 3*Avx512Step<T>::Value);
144  pT + 4*Avx512Step<T>::Value);
146  pT + 5*Avx512Step<T>::Value);
148  pT + 6*Avx512Step<T>::Value);
150  pT + 7*Avx512Step<T>::Value);
151  }
152 };
153 
156 
157 } // end of namespace detail
158 } // end of namespace simd
159 } // end of namespace ipsdk
160 
161 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_LOADPACK_H__
Definition: BasePack.h:30
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: LoadPack.h:31
(including fundation and byte and word instructions)
Definition: InstructionSetTypes.h:51
BasePack class; defines a set of scalars (for instruction set "standard") or registers (for all other...
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Definition: LoadRegDecl.h:30