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_SSE2_GATHERREGDECL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_GATHER_DETAIL_SSE2_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 Sse2Type<T>::Type& out);
52 
53  static
54  IPSDK_FORCEINLINE
55  void
56  act(const T* baseAddress,
57  const typename Sse2Type<ipUInt32>::Type& indexes1,
58  const typename Sse2Type<ipUInt32>::Type& indexes2,
59  const typename Sse2Type<ipUInt32>::Type& indexes3,
60  const typename Sse2Type<ipUInt32>::Type& indexes4,
61  typename Sse2Type<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 Sse2Type<T>::Type& out);
79 
80  static
81  IPSDK_FORCEINLINE
82  void
83  act(const T* baseAddress,
84  const typename Sse2Type<ipUInt32>::Type& indexes1,
85  const typename Sse2Type<ipUInt32>::Type& indexes2,
86  typename Sse2Type<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, const ipUInt32* indexes,
102  typename Sse2Type<T>::Type& out);
103 
104  static
105  IPSDK_FORCEINLINE
106  void
107  act(const T* baseAddress, const typename Sse2Type<ipUInt32>::Type& indexes,
108  typename Sse2Type<T>::Type& out);
109 };
110 
111 template <>
113 {
114  static
115  IPSDK_FORCEINLINE
116  void
117  act(const ipReal32* baseAddress, const ipUInt32* indexes,
119 
120  static
121  IPSDK_FORCEINLINE
122  void
123  act(const ipReal32* baseAddress, const Sse2Type<ipUInt32>::Type& indexes,
125 };
126 
127 template <>
129 {
130  static
131  IPSDK_FORCEINLINE
132  void
133  act(const ipReal64* baseAddress, const ipUInt32* indexes,
135 };
136 
139 
140 } // end of namespace detail
141 } // end of namespace simd
142 } // end of namespace ipsdk
143 
144 #endif // __IPSDKUTIL_INSTRUCTIONSET_GATHER_DETAIL_SSE2_GATHERREGDECL_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Predefined types for Sse2 instruction set management.
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36
structure used to retrieve SSE2 type associated to a base type
Definition: Sse2Types.h:32
Definition: GatherReg.h:30
float ipReal32
Base types definition.
Definition: BaseTypes.h:56
uint32_t ipUInt32
Base types definition.
Definition: BaseTypes.h:53