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_AVX2_UNARYPACKOPRETMASK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_UNARYPACKOPRETMASK_H__
17 
22 
23 namespace ipsdk {
24 namespace simd {
25 namespace detail {
26 
29 
30 // template structure associated to unload function
31 template <typename T,
32  class OpClass>
34  typename boost::enable_if_c<sizeof(T) == 1>::type>
35 {
36  static IPSDK_FORCEINLINE
38  act(const BasePack<ePackType::ePT_Avx, T>& in)
39  {
41  out._val[0] = OpClass::act(in._val[0]);
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  }
52 };
53 
54 template <typename T, class OpClass>
56  typename boost::enable_if_c<sizeof(T) == 2>::type>
57 {
58  static IPSDK_FORCEINLINE
60  act(const BasePack<ePackType::ePT_Avx, T>& in)
61  {
63  out._val[0] = OpClass::act(in._val[0]);
64  out._val[1] = OpClass::act(in._val[1]);
65  return out;
66  }
67 
68  static IPSDK_FORCEINLINE
69  void
70  act(const BasePack<ePackType::ePT_Avx, T>& in,
72  {
73  OpClass::act(in._val[0], out._val[0]);
74  OpClass::act(in._val[1], out._val[1]);
75  }
76 };
77 
78 template <typename T, class OpClass>
80  typename boost::enable_if_c<sizeof(T) == 4>::type>
81 {
82  static IPSDK_FORCEINLINE
84  act(const BasePack<ePackType::ePT_Avx, T>& in)
85  {
87  out._val[0] = OpClass::act(in._val[0]);
88  out._val[1] = OpClass::act(in._val[1]);
89  out._val[2] = OpClass::act(in._val[2]);
90  out._val[3] = OpClass::act(in._val[3]);
91  return out;
92  }
93 
94  static IPSDK_FORCEINLINE
95  void
96  act(const BasePack<ePackType::ePT_Avx, T>& in,
98  {
99  OpClass::act(in._val[0], out._val[0]);
100  OpClass::act(in._val[1], out._val[1]);
101  OpClass::act(in._val[2], out._val[2]);
102  OpClass::act(in._val[3], out._val[3]);
103  }
104 };
105 
106 template <typename T, class OpClass>
108  typename boost::enable_if_c<sizeof(T) == 8>::type>
109 {
110  static IPSDK_FORCEINLINE
112  act(const BasePack<ePackType::ePT_Avx, T>& in)
113  {
115  out._val[0] = OpClass::act(in._val[0]);
116  out._val[1] = OpClass::act(in._val[1]);
117  out._val[2] = OpClass::act(in._val[2]);
118  out._val[3] = OpClass::act(in._val[3]);
119  out._val[4] = OpClass::act(in._val[4]);
120  out._val[5] = OpClass::act(in._val[5]);
121  out._val[6] = OpClass::act(in._val[6]);
122  out._val[7] = OpClass::act(in._val[7]);
123  return out;
124  }
125 
126  static IPSDK_FORCEINLINE
127  void
128  act(const BasePack<ePackType::ePT_Avx, T>& in,
130  {
131  OpClass::act(in._val[0], out._val[0]);
132  OpClass::act(in._val[1], out._val[1]);
133  OpClass::act(in._val[2], out._val[2]);
134  OpClass::act(in._val[3], out._val[3]);
135  OpClass::act(in._val[4], out._val[4]);
136  OpClass::act(in._val[5], out._val[5]);
137  OpClass::act(in._val[6], out._val[6]);
138  OpClass::act(in._val[7], out._val[7]);
139  }
140 };
141 
144 
145 } // end of namespace detail
146 } // end of namespace simd
147 } // end of namespace ipsdk
148 
149 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_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 2.
Definition: InstructionSetTypes.h:48
Predefined types associated to instruction set management.
Definition of import/export macro for library.