15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_FMA3_TERNARYPACKOP_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_FMA3_TERNARYPACKOP_H__ 33 typename boost::enable_if_c<sizeof(T) == 1>::type>
35 static IPSDK_FORCEINLINE
42 out._val[0] = OpClass::act(in1._val[0], in2._val[0], in3._val[0]);
46 static IPSDK_FORCEINLINE
53 OpClass::act(in1._val[0], in2._val[0], in3._val[0], out._val[0]);
57 template <
typename T,
class OpClass>
59 typename boost::enable_if_c<sizeof(T) == 2>::type>
61 static IPSDK_FORCEINLINE
68 out._val[0] = OpClass::act(in1._val[0], in2._val[0], in3._val[0]);
69 out._val[1] = OpClass::act(in1._val[1], in2._val[1], in3._val[1]);
73 static IPSDK_FORCEINLINE
80 OpClass::act(in1._val[0], in2._val[0], in3._val[0], out._val[0]);
81 OpClass::act(in1._val[1], in2._val[1], in3._val[1], out._val[1]);
85 template <
typename T,
class OpClass>
87 typename boost::enable_if_c<sizeof(T) == 4>::type>
89 static IPSDK_FORCEINLINE
96 out._val[0] = OpClass::act(in1._val[0], in2._val[0], in3._val[0]);
97 out._val[1] = OpClass::act(in1._val[1], in2._val[1], in3._val[1]);
98 out._val[2] = OpClass::act(in1._val[2], in2._val[2], in3._val[2]);
99 out._val[3] = OpClass::act(in1._val[3], in2._val[3], in3._val[3]);
103 static IPSDK_FORCEINLINE
110 OpClass::act(in1._val[0], in2._val[0], in3._val[0], out._val[0]);
111 OpClass::act(in1._val[1], in2._val[1], in3._val[1], out._val[1]);
112 OpClass::act(in1._val[2], in2._val[2], in3._val[2], out._val[2]);
113 OpClass::act(in1._val[3], in2._val[3], in3._val[3], out._val[3]);
117 template <
typename T,
class OpClass>
119 typename boost::enable_if_c<sizeof(T) == 8>::type>
121 static IPSDK_FORCEINLINE
128 out._val[0] = OpClass::act(in1._val[0], in2._val[0], in3._val[0]);
129 out._val[1] = OpClass::act(in1._val[1], in2._val[1], in3._val[1]);
130 out._val[2] = OpClass::act(in1._val[2], in2._val[2], in3._val[2]);
131 out._val[3] = OpClass::act(in1._val[3], in2._val[3], in3._val[3]);
132 out._val[4] = OpClass::act(in1._val[4], in2._val[4], in3._val[4]);
133 out._val[5] = OpClass::act(in1._val[5], in2._val[5], in3._val[5]);
134 out._val[6] = OpClass::act(in1._val[6], in2._val[6], in3._val[6]);
135 out._val[7] = OpClass::act(in1._val[7], in2._val[7], in3._val[7]);
139 static IPSDK_FORCEINLINE
146 OpClass::act(in1._val[0], in2._val[0], in3._val[0], out._val[0]);
147 OpClass::act(in1._val[1], in2._val[1], in3._val[1], out._val[1]);
148 OpClass::act(in1._val[2], in2._val[2], in3._val[2], out._val[2]);
149 OpClass::act(in1._val[3], in2._val[3], in3._val[3], out._val[3]);
150 OpClass::act(in1._val[4], in2._val[4], in3._val[4], out._val[4]);
151 OpClass::act(in1._val[5], in2._val[5], in3._val[5], out._val[5]);
152 OpClass::act(in1._val[6], in2._val[6], in3._val[6], out._val[6]);
153 OpClass::act(in1._val[7], in2._val[7], in3._val[7], out._val[7]);
164 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_FMA3_TERNARYPACKOP_H__ Fused multiplyadd.
Definition: InstructionSetTypes.h:46
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Definition: TernaryPackOp.h:31
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Definition: BasePack.h:37