IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
IsEqualRegDecl.h
Go to the documentation of this file.
1 // IsEqualRegDecl.h:
3 // -------------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_SSE2_ISEQUALREGDECL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_SSE2_ISEQUALREGDECL_H__
17 
24 
25 #include <boost/mpl/and.hpp>
26 #include <boost/mpl/equal_to.hpp>
27 #include <boost/mpl/int.hpp>
28 #include <boost/type_traits/is_same.hpp>
29 #include <boost/type_traits/is_signed.hpp>
30 
31 namespace ipsdk {
32 namespace simd {
33 namespace detail {
34 
37 
38 template <typename T>
40  typename boost::enable_if<
41  typename boost::mpl::and_<
42  typename boost::is_integral<T>::type,
43  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<1> >::type
44  >::type
45  >::type
46 >
47 {
48  static IPSDK_FORCEINLINE
50  act(const typename Sse2Type<T>::Type& in1,
51  const typename Sse2Type<T>::Type& in2);
52 
53  static IPSDK_FORCEINLINE
54  void
55  act(const typename Sse2Type<T>::Type& in1,
56  const typename Sse2Type<T>::Type& in2,
58 };
59 
60 template <typename T>
62  typename boost::enable_if<
63  typename boost::mpl::and_<
64  typename boost::is_integral<T>::type,
65  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<2> >::type
66  >::type
67  >::type
68 >
69 {
70  static IPSDK_FORCEINLINE
72  act(const typename Sse2Type<T>::Type& in1,
73  const typename Sse2Type<T>::Type& in2);
74 
75  static IPSDK_FORCEINLINE
76  void
77  act(const typename Sse2Type<T>::Type& in1,
78  const typename Sse2Type<T>::Type& in2,
80 };
81 
82 template <typename T>
84  typename boost::enable_if<
85  typename boost::mpl::and_<
86  typename boost::is_integral<T>::type,
87  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<4> >::type
88  >::type
89  >::type
90 >
91 {
92  static IPSDK_FORCEINLINE
94  act(const typename Sse2Type<T>::Type& in1,
95  const typename Sse2Type<T>::Type& in2);
96 
97  static IPSDK_FORCEINLINE
98  void
99  act(const typename Sse2Type<T>::Type& in1,
100  const typename Sse2Type<T>::Type& in2,
102 };
103 
104 template <typename T>
106  typename boost::enable_if<
107  typename boost::mpl::and_<
108  typename boost::is_integral<T>::type,
109  typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<8> >::type
110  >::type
111  >::type
112 >
113 {
114  static IPSDK_FORCEINLINE
116  act(const typename Sse2Type<T>::Type& in1,
117  const typename Sse2Type<T>::Type& in2);
118 
119  static IPSDK_FORCEINLINE
120  void
121  act(const typename Sse2Type<T>::Type& in1,
122  const typename Sse2Type<T>::Type& in2,
124 };
125 
126 template <>
128 {
129  static IPSDK_FORCEINLINE
131  act(const Sse2Type<ipReal32>::Type& in1,
132  const Sse2Type<ipReal32>::Type& in2);
133 
134  static IPSDK_FORCEINLINE
135  void
136  act(const Sse2Type<ipReal32>::Type& in1,
137  const Sse2Type<ipReal32>::Type& in2,
139 };
140 
141 template <>
143 {
144  static IPSDK_FORCEINLINE
146  act(const Sse2Type<ipReal64>::Type& in1,
147  const Sse2Type<ipReal64>::Type& in2);
148 
149  static IPSDK_FORCEINLINE
150  void
151  act(const Sse2Type<ipReal64>::Type& in1,
152  const Sse2Type<ipReal64>::Type& in2,
154 
155 };
156 
159 
160 } // end of namespace detail
161 } // end of namespace simd
162 } // end of namespace ipsdk
163 
164 #endif // __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_SSE2_ISEQUALREGDECL_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: IsEqualRegDecl.h:35
IsEqualReg<eInstructionSet::domain instructionSet, typename T, typename Enable=void> structure...
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.
RegMaskType class.
Definition of import/export macro for library.
Definition: RegMaskType.h:29
Predefined types for masks for Sse2 instruction set management.
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36
structure used to retrieve SSE2 type associated to a base type
Definition: Sse2Types.h:32
float ipReal32
Base types definition.
Definition: BaseTypes.h:56