IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
UnaryPackOp.h
Go to the documentation of this file.
1 // UnaryPackOp.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_UNARYPACKOP_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_UNARYPACKOP_H__
17 
21 
22 namespace ipsdk {
23 namespace simd {
24 namespace detail {
25 
28 
29 template <typename T, class OpClass>
30 struct UnaryPackOp<eInstructionSet::eIS_Avx, T, OpClass,
31  typename boost::enable_if_c<sizeof(T) == 4>::type>
32 {
33  static IPSDK_FORCEINLINE
35  act(const BasePack<ePackType::ePT_Avx, T>& in)
36  {
38  out._val[0] = OpClass::act(in._val[0]);
39  out._val[1] = OpClass::act(in._val[1]);
40  out._val[2] = OpClass::act(in._val[2]);
41  out._val[3] = OpClass::act(in._val[3]);
42  return out;
43  }
44 
45  static IPSDK_FORCEINLINE
46  void
47  act(const BasePack<ePackType::ePT_Avx, T>& in,
49  {
50  OpClass::act(in._val[0], out._val[0]);
51  OpClass::act(in._val[1], out._val[1]);
52  OpClass::act(in._val[2], out._val[2]);
53  OpClass::act(in._val[3], out._val[3]);
54  }
55 };
56 
57 template <typename T, class OpClass>
58 struct UnaryPackOp<eInstructionSet::eIS_Avx, T, OpClass,
59  typename boost::enable_if_c<sizeof(T) == 8>::type>
60 {
61  static IPSDK_FORCEINLINE
63  act(const BasePack<ePackType::ePT_Avx, T>& in)
64  {
66  out._val[0] = OpClass::act(in._val[0]);
67  out._val[1] = OpClass::act(in._val[1]);
68  out._val[2] = OpClass::act(in._val[2]);
69  out._val[3] = OpClass::act(in._val[3]);
70  out._val[4] = OpClass::act(in._val[4]);
71  out._val[5] = OpClass::act(in._val[5]);
72  out._val[6] = OpClass::act(in._val[6]);
73  out._val[7] = OpClass::act(in._val[7]);
74  return out;
75  }
76 
77  static IPSDK_FORCEINLINE
78  void
79  act(const BasePack<ePackType::ePT_Avx, T>& in,
81  {
82  OpClass::act(in._val[0], out._val[0]);
83  OpClass::act(in._val[1], out._val[1]);
84  OpClass::act(in._val[2], out._val[2]);
85  OpClass::act(in._val[3], out._val[3]);
86  OpClass::act(in._val[4], out._val[4]);
87  OpClass::act(in._val[5], out._val[5]);
88  OpClass::act(in._val[6], out._val[6]);
89  OpClass::act(in._val[7], out._val[7]);
90  }
91 };
92 
95 
96 } // end of namespace detail
97 } // end of namespace simd
98 } // end of namespace ipsdk
99 
100 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_UNARYPACKOP_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Advanced Vector Extensions.
Definition: InstructionSetTypes.h:44
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Definition: UnaryPackOp.h:31