IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
GatherRegDecl.h
1 // GatherRegDecl.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_GATHER_DETAIL_AVX512_GATHERREGDECL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_GATHER_DETAIL_AVX512_GATHERREGDECL_H__
17 
23 
24 #include <boost/mpl/and.hpp>
25 #include <boost/mpl/equal_to.hpp>
26 #include <boost/mpl/int.hpp>
27 #include <boost/type_traits/is_same.hpp>
28 #include <boost/type_traits/is_signed.hpp>
29 
30 namespace ipsdk {
31 namespace simd {
32 namespace detail {
33 
36 
37 template <typename T>
39  typename boost::enable_if<
40  typename boost::mpl::and_<typename boost::is_integral<T>::type,
41  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<1> >::type
42  >::type
43  >::type
44 >
45 {
46  static
47  IPSDK_FORCEINLINE
48  void
49  act(const T* baseAddress,
50  const ipUInt32* indexes,
51  typename Avx512Type<T>::Type& out);
52 
53  static
54  IPSDK_FORCEINLINE
55  void
56  act(const T* baseAddress,
57  const typename Avx512Type<ipUInt32>::Type& indexes1,
58  const typename Avx512Type<ipUInt32>::Type& indexes2,
59  const typename Avx512Type<ipUInt32>::Type& indexes3,
60  const typename Avx512Type<ipUInt32>::Type& indexes4,
61  typename Avx512Type<T>::Type& out);
62 };
63 
64 template <typename T>
66  typename boost::enable_if<
67  typename boost::mpl::and_<typename boost::is_integral<T>::type,
68  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<2> >::type
69  >::type
70  >::type
71 >
72 {
73  static
74  IPSDK_FORCEINLINE
75  void
76  act(const T* baseAddress,
77  const ipUInt32* indexes,
78  typename Avx512Type<T>::Type& out);
79 
80  static
81  IPSDK_FORCEINLINE
82  void
83  act(const T* baseAddress,
84  const typename Avx512Type<ipUInt32>::Type& indexes1,
85  const typename Avx512Type<ipUInt32>::Type& indexes2,
86  typename Avx512Type<T>::Type& out);
87 };
88 
89 template <typename T>
91  typename boost::enable_if<
92  typename boost::mpl::and_<typename boost::is_integral<T>::type,
93  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<4> >::type
94  >::type
95  >::type
96 >
97 {
98  static
99  IPSDK_FORCEINLINE
100  void
101  act(const T* baseAddress,
102  const ipUInt32* indexes,
103  typename Avx512Type<T>::Type& out);
104 
105  static
106  IPSDK_FORCEINLINE
107  void
108  act(const T* baseAddress, const typename Avx512Type<ipUInt32>::Type& indexes,
109  typename Avx512Type<T>::Type& out);
110 };
111 
112 template <>
114 {
115  static
116  IPSDK_FORCEINLINE
117  void
118  act(const ipReal32* baseAddress,
119  const ipUInt32* indexes,
121 
122  static
123  IPSDK_FORCEINLINE
124  void
125  act(const ipReal32* baseAddress, const Avx512Type<ipUInt32>::Type& indexes,
127 };
128 
129 template <>
131 {
132  static
133  IPSDK_FORCEINLINE
134  void
135  act(const ipReal64* baseAddress,
136  const ipUInt32* indexes,
138 
139  static
140  IPSDK_FORCEINLINE
141  void
142  act(const ipReal64* baseAddress, const __m256i& indexes,
144 };
145 
148 
149 } // end of namespace detail
150 } // end of namespace simd
151 } // end of namespace ipsdk
152 
153 #endif // __IPSDKUTIL_INSTRUCTIONSET_GATHER_DETAIL_AVX512_GATHERREGDECL_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
(including fundation and byte and word instructions)
Definition: InstructionSetTypes.h:51
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Predefined types for Avx512 instruction set management.
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Definition: GatherReg.h:30
float ipReal32
Base types definition.
Definition: BaseTypes.h:56
uint32_t ipUInt32
Base types definition.
Definition: BaseTypes.h:53
structure used to retrieve AVX512 type associated to a base type
Definition: Avx512Types.h:36