IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
BinaryMaskPackOp.h
Go to the documentation of this file.
1 // BinaryMaskPackOp.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_BINARYMASKPACKOP_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_BINARYMASKPACKOP_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 IPSDK_FORCEINLINE
58  void
61  {
62  OpClass::act(inOut1._val[0], inOut2._val[0]);
63  OpClass::act(inOut1._val[1], inOut2._val[1]);
64  OpClass::act(inOut1._val[2], inOut2._val[2]);
65  OpClass::act(inOut1._val[3], inOut2._val[3]);
66  }
67 };
68 
69 template <class OpClass, typename Scalar>
71 {
72  static IPSDK_FORCEINLINE
76  {
78  out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
79  out._val[1] = OpClass::act(in1._val[1], in2._val[1]);
80  out._val[2] = OpClass::act(in1._val[2], in2._val[2]);
81  out._val[3] = OpClass::act(in1._val[3], in2._val[3]);
82  out._val[4] = OpClass::act(in1._val[4], in2._val[4]);
83  out._val[5] = OpClass::act(in1._val[5], in2._val[5]);
84  out._val[6] = OpClass::act(in1._val[6], in2._val[6]);
85  out._val[7] = OpClass::act(in1._val[7], in2._val[7]);
86  return out;
87  }
88 
89  static IPSDK_FORCEINLINE
90  void
94  {
95  OpClass::act(in1._val[0], in2._val[0], out._val[0]);
96  OpClass::act(in1._val[1], in2._val[1], out._val[1]);
97  OpClass::act(in1._val[2], in2._val[2], out._val[2]);
98  OpClass::act(in1._val[3], in2._val[3], out._val[3]);
99  OpClass::act(in1._val[4], in2._val[4], out._val[4]);
100  OpClass::act(in1._val[5], in2._val[5], out._val[5]);
101  OpClass::act(in1._val[6], in2._val[6], out._val[6]);
102  OpClass::act(in1._val[7], in2._val[7], out._val[7]);
103  }
104 
105  static IPSDK_FORCEINLINE
106  void
109  {
110  OpClass::act(inOut1._val[0], inOut2._val[0]);
111  OpClass::act(inOut1._val[1], inOut2._val[1]);
112  OpClass::act(inOut1._val[2], inOut2._val[2]);
113  OpClass::act(inOut1._val[3], inOut2._val[3]);
114  OpClass::act(inOut1._val[4], inOut2._val[4]);
115  OpClass::act(inOut1._val[5], inOut2._val[5]);
116  OpClass::act(inOut1._val[6], inOut2._val[6]);
117  OpClass::act(inOut1._val[7], inOut2._val[7]);
118  }
119 };
120 
123 
124 } // end of namespace detail
125 } // end of namespace simd
126 } // end of namespace ipsdk
127 
128 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_BINARYMASKPACKOP_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: BinaryMaskPackOp.h:30
structure containing set of masks for vectorized operations
Definition: BaseMaskPackDecl.h:29
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