IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
UnaryPackOpRetMask.h
Go to the documentation of this file.
1 // UnaryPackOpRetMask.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_UNARYPACKOPRETMASK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_UNARYPACKOPRETMASK_H__
17 
22 
23 namespace ipsdk {
24 namespace simd {
25 namespace detail {
26 
29 
30 template <typename T, class OpClass>
32  typename boost::enable_if_c<sizeof(T) == 4>::type>
33 {
34  static IPSDK_FORCEINLINE
36  act(const BasePack<ePackType::ePT_Avx, T>& in)
37  {
39  out._val[0] = OpClass::act(in._val[0]);
40  out._val[1] = OpClass::act(in._val[1]);
41  out._val[2] = OpClass::act(in._val[2]);
42  out._val[3] = OpClass::act(in._val[3]);
43  return out;
44  }
45 
46  static IPSDK_FORCEINLINE
47  void
48  act(const BasePack<ePackType::ePT_Avx, T>& in,
50  {
51  OpClass::act(in._val[0], out._val[0]);
52  OpClass::act(in._val[1], out._val[1]);
53  OpClass::act(in._val[2], out._val[2]);
54  OpClass::act(in._val[3], out._val[3]);
55  }
56 };
57 
58 template <typename T, class OpClass>
60  typename boost::enable_if_c<sizeof(T) == 8>::type>
61 {
62  static IPSDK_FORCEINLINE
64  act(const BasePack<ePackType::ePT_Avx, T>& in)
65  {
67  out._val[0] = OpClass::act(in._val[0]);
68  out._val[1] = OpClass::act(in._val[1]);
69  out._val[2] = OpClass::act(in._val[2]);
70  out._val[3] = OpClass::act(in._val[3]);
71  out._val[4] = OpClass::act(in._val[4]);
72  out._val[5] = OpClass::act(in._val[5]);
73  out._val[6] = OpClass::act(in._val[6]);
74  out._val[7] = OpClass::act(in._val[7]);
75  return out;
76  }
77 
78  static IPSDK_FORCEINLINE
79  void
80  act(const BasePack<ePackType::ePT_Avx, T>& in,
82  {
83  OpClass::act(in._val[0], out._val[0]);
84  OpClass::act(in._val[1], out._val[1]);
85  OpClass::act(in._val[2], out._val[2]);
86  OpClass::act(in._val[3], out._val[3]);
87  OpClass::act(in._val[4], out._val[4]);
88  OpClass::act(in._val[5], out._val[5]);
89  OpClass::act(in._val[6], out._val[6]);
90  OpClass::act(in._val[7], out._val[7]);
91  }
92 };
93 
96 
97 } // end of namespace detail
98 } // end of namespace simd
99 } // end of namespace ipsdk
100 
101 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_UNARYPACKOPRETMASK_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: UnaryPackOpRetMask.h:31
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.