IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
IsGreaterEqualRegImpl.h
Go to the documentation of this file.
1 // IsGreaterEqualRegImpl.h:
3 // -------------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX2_ISGREATEREQUALREGIMPL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX2_ISGREATEREQUALREGIMPL_H__
17 
23 
24 namespace ipsdk {
25 namespace simd {
26 namespace detail {
27 
30 
31 template <typename T>
32 IPSDK_FORCEINLINE
33 typename RegMaskType<eInstructionSet::eIS_Avx2, T>::Type
34 IsGreaterEqualReg<eInstructionSet::eIS_Avx2, T,
35  typename boost::enable_if_c<
36  boost::is_integral<T>::value
37  >::type
38 >::act(
39  const typename AvxType<T>::Type& in1,
40  const typename AvxType<T>::Type& in2)
41 {
42  return BitwiseNotReg<eInstructionSet::eIS_Avx2, T>::act(
43  IsLessReg<eInstructionSet::eIS_Avx2, T>::act(in1, in2));
44 }
45 
46 template <typename T>
47 IPSDK_FORCEINLINE
48 void
49 IsGreaterEqualReg<eInstructionSet::eIS_Avx2, T,
50  typename boost::enable_if_c<
51  boost::is_integral<T>::value
52  >::type
53 >::act(
54  const typename AvxType<T>::Type& in1,
55  const typename AvxType<T>::Type& in2,
56  typename RegMaskType<eInstructionSet::eIS_Avx2, T>::Type& out)
57 {
58  IsLessReg<eInstructionSet::eIS_Avx2, T>::act(in1, in2, out);
59  BitwiseNotReg<eInstructionSet::eIS_Avx2, T>::act(out, out);
60 }
61 
62 IPSDK_FORCEINLINE
63 RegMaskType<eInstructionSet::eIS_Avx2, ipReal32>::Type
64 IsGreaterEqualReg<eInstructionSet::eIS_Avx2, ipReal32>::act(
65  const AvxType<ipReal32>::Type& in1,
66  const AvxType<ipReal32>::Type& in2)
67 {
68  return IsGreaterEqualReg<eInstructionSet::eIS_Avx, ipReal32>::act(in1, in2);
69 }
70 
71 IPSDK_FORCEINLINE
72 void
73 IsGreaterEqualReg<eInstructionSet::eIS_Avx2, ipReal32>::act(
74  const AvxType<ipReal32>::Type& in1,
75  const AvxType<ipReal32>::Type& in2,
76  RegMaskType<eInstructionSet::eIS_Avx2, ipReal32>::Type& out)
77 {
78  IsGreaterEqualReg<eInstructionSet::eIS_Avx, ipReal32>::act(in1, in2, out);
79 }
80 
81 IPSDK_FORCEINLINE
82 RegMaskType<eInstructionSet::eIS_Avx2, ipReal64>::Type
83 IsGreaterEqualReg<eInstructionSet::eIS_Avx2, ipReal64>::act(
84  const AvxType<ipReal64>::Type& in1,
85  const AvxType<ipReal64>::Type& in2)
86 {
87  return IsGreaterEqualReg<eInstructionSet::eIS_Avx, ipReal64>::act(in1, in2);
88 }
89 
90 IPSDK_FORCEINLINE
91 void
92 IsGreaterEqualReg<eInstructionSet::eIS_Avx2, ipReal64>::act(
93  const AvxType<ipReal64>::Type& in1,
94  const AvxType<ipReal64>::Type& in2,
95  RegMaskType<eInstructionSet::eIS_Avx2, ipReal64>::Type& out)
96 {
97  IsGreaterEqualReg<eInstructionSet::eIS_Avx, ipReal64>::act(in1, in2, out);
98 }
99 
102 
103 } // end of namespace detail
104 } // end of namespace simd
105 } // end of namespace ipsdk
106 
110 
111 #endif // __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX2_ISGREATEREQUALREGIMPL_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Advanced Vector Extensions 2.
Definition: InstructionSetTypes.h:48