IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
BinaryPackOpRetMask.h
Go to the documentation of this file.
1 // BinaryPackOpRetMask.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_BINARYPACKOPRETMASK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_BINARYPACKOPRETMASK_H__
17 
21 
22 namespace ipsdk {
23 namespace simd {
24 namespace detail {
25 
28 
29 template <class OpClass, typename Scalar>
31 {
32  static IPSDK_FORCEINLINE
36  {
38  out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
39  out._val[1] = OpClass::act(in1._val[1], in2._val[1]);
40  out._val[2] = OpClass::act(in1._val[2], in2._val[2]);
41  out._val[3] = OpClass::act(in1._val[3], in2._val[3]);
42  return out;
43  }
44 
45  static IPSDK_FORCEINLINE
46  void
50  {
51  OpClass::act(in1._val[0], in2._val[0], out._val[0]);
52  OpClass::act(in1._val[1], in2._val[1], out._val[1]);
53  OpClass::act(in1._val[2], in2._val[2], out._val[2]);
54  OpClass::act(in1._val[3], in2._val[3], out._val[3]);
55  }
56 
57  static
58  IPSDK_FORCEINLINE
59  void
60  actPackScalar(const BasePack<ePackType::ePT_Avx, ipReal32>& in1,
61  const Scalar& in2,
63  {
64  OpClass::act(in1._val[0], in2, out._val[0]);
65  OpClass::act(in1._val[1], in2, out._val[1]);
66  OpClass::act(in1._val[2], in2, out._val[2]);
67  OpClass::act(in1._val[3], in2, out._val[3]);
68  }
69 };
70 
71 template <class OpClass, typename Scalar>
73 {
74  static IPSDK_FORCEINLINE
78  {
80  out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
81  out._val[1] = OpClass::act(in1._val[1], in2._val[1]);
82  out._val[2] = OpClass::act(in1._val[2], in2._val[2]);
83  out._val[3] = OpClass::act(in1._val[3], in2._val[3]);
84  out._val[4] = OpClass::act(in1._val[4], in2._val[4]);
85  out._val[5] = OpClass::act(in1._val[5], in2._val[5]);
86  out._val[6] = OpClass::act(in1._val[6], in2._val[6]);
87  out._val[7] = OpClass::act(in1._val[7], in2._val[7]);
88  return out;
89  }
90 
91  static IPSDK_FORCEINLINE
92  void
96  {
97  OpClass::act(in1._val[0], in2._val[0], out._val[0]);
98  OpClass::act(in1._val[1], in2._val[1], out._val[1]);
99  OpClass::act(in1._val[2], in2._val[2], out._val[2]);
100  OpClass::act(in1._val[3], in2._val[3], out._val[3]);
101  OpClass::act(in1._val[4], in2._val[4], out._val[4]);
102  OpClass::act(in1._val[5], in2._val[5], out._val[5]);
103  OpClass::act(in1._val[6], in2._val[6], out._val[6]);
104  OpClass::act(in1._val[7], in2._val[7], out._val[7]);
105  }
106 
107  static
108  IPSDK_FORCEINLINE
109  void
110  actPackScalar(const BasePack<ePackType::ePT_Avx, ipReal64>& in1,
111  const Scalar& in2,
113  {
114  OpClass::act(in1._val[0], in2, out._val[0]);
115  OpClass::act(in1._val[1], in2, out._val[1]);
116  OpClass::act(in1._val[2], in2, out._val[2]);
117  OpClass::act(in1._val[3], in2, out._val[3]);
118  OpClass::act(in1._val[4], in2, out._val[4]);
119  OpClass::act(in1._val[5], in2, out._val[5]);
120  OpClass::act(in1._val[6], in2, out._val[6]);
121  OpClass::act(in1._val[7], in2, out._val[7]);
122  }
123 };
124 
127 
128 } // end of namespace detail
129 } // end of namespace simd
130 } // end of namespace ipsdk
131 
132 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_BINARYPACKOPRETMASK_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
structure containing set of masks for vectorized operations
Definition: BaseMaskPackDecl.h:29
Definition: BinaryPackOpRetMask.h:31
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
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.
float ipReal32
Base types definition.
Definition: BaseTypes.h:56
structure containing intrinsic registers used to store vectorized data
Definition: BasePackDecl.h:29