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_AVX512_UNARYPACKOPRETMASK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_UNARYPACKOPRETMASK_H__
17 
21 
22 namespace ipsdk {
23 namespace simd {
24 namespace detail {
25 
28 
29 // template structure associated to unload function
30 template <typename T,
31  class OpClass>
33  typename boost::enable_if_c<sizeof(T) == 1>::type>
34 {
35  static IPSDK_FORCEINLINE
38  {
40  out._val[0] = OpClass::act(in._val[0]);
41  return out;
42  }
43 
44  static IPSDK_FORCEINLINE
45  void
48  {
49  OpClass::act(in._val[0], out._val[0]);
50  }
51 };
52 
53 template <typename T, class OpClass>
55  typename boost::enable_if_c<sizeof(T) == 2>::type>
56 {
57  static IPSDK_FORCEINLINE
60  {
62  out._val[0] = OpClass::act(in._val[0]);
63  out._val[1] = OpClass::act(in._val[1]);
64  return out;
65  }
66 
67  static IPSDK_FORCEINLINE
68  void
71  {
72  OpClass::act(in._val[0], out._val[0]);
73  OpClass::act(in._val[1], out._val[1]);
74  }
75 };
76 
77 template <typename T, class OpClass>
79  typename boost::enable_if_c<sizeof(T) == 4>::type>
80 {
81  static IPSDK_FORCEINLINE
84  {
86  out._val[0] = OpClass::act(in._val[0]);
87  out._val[1] = OpClass::act(in._val[1]);
88  out._val[2] = OpClass::act(in._val[2]);
89  out._val[3] = OpClass::act(in._val[3]);
90  return out;
91  }
92 
93  static IPSDK_FORCEINLINE
94  void
97  {
98  OpClass::act(in._val[0], out._val[0]);
99  OpClass::act(in._val[1], out._val[1]);
100  OpClass::act(in._val[2], out._val[2]);
101  OpClass::act(in._val[3], out._val[3]);
102  }
103 };
104 
105 template <typename T, class OpClass>
107  typename boost::enable_if_c<sizeof(T) == 8>::type>
108 {
109  static IPSDK_FORCEINLINE
112  {
114  out._val[0] = OpClass::act(in._val[0]);
115  out._val[1] = OpClass::act(in._val[1]);
116  out._val[2] = OpClass::act(in._val[2]);
117  out._val[3] = OpClass::act(in._val[3]);
118  out._val[4] = OpClass::act(in._val[4]);
119  out._val[5] = OpClass::act(in._val[5]);
120  out._val[6] = OpClass::act(in._val[6]);
121  out._val[7] = OpClass::act(in._val[7]);
122  return out;
123  }
124 
125  static IPSDK_FORCEINLINE
126  void
129  {
130  OpClass::act(in._val[0], out._val[0]);
131  OpClass::act(in._val[1], out._val[1]);
132  OpClass::act(in._val[2], out._val[2]);
133  OpClass::act(in._val[3], out._val[3]);
134  OpClass::act(in._val[4], out._val[4]);
135  OpClass::act(in._val[5], out._val[5]);
136  OpClass::act(in._val[6], out._val[6]);
137  OpClass::act(in._val[7], out._val[7]);
138  }
139 };
140 
143 
144 } // end of namespace detail
145 } // end of namespace simd
146 } // end of namespace ipsdk
147 
148 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_UNARYPACKOPRETMASK_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: UnaryPackOpRetMask.h:31
(including fundation and byte and word instructions)
Definition: InstructionSetTypes.h:51
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Predefined types associated to instruction set management.
Definition of import/export macro for library.