18 #ifndef __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_SUBPACK_H__ 19 #define __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_SUBPACK_H__ 29 #include <boost/type_traits/is_same.hpp> 30 #include <boost/utility/enable_if.hpp> 44 template <eInstructionSet::domain instructionSet,
55 template <eInstructionSet::domain instructionSet,
typename TIn1,
typename TIn2>
56 struct SubPack<instructionSet, TIn1, TIn2,
57 typename
boost::enable_if_c<boost::is_same<TIn1, TIn2>::value>::type>
76 BinaryPackOp<instructionSet, TIn1,
77 SubReg<instructionSet, TIn1> >::act(in1, in2, out);
82 template <eInstructionSet::domain instructionSet,
typename TIn1,
typename TIn2>
83 struct SubPack<instructionSet, TIn1, TIn2,
84 typename
boost::enable_if_c<!boost::is_same<TIn1, TIn2>::value
85 && boost::is_same<TIn1, typename PromotedType<TIn1, TIn2>::Type>::value
90 typename IS2Pack<instructionSet, TIn1>::Type
91 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
92 const typename IS2Pack<instructionSet, TIn2>::Type& in2)
94 typename IS2Pack<instructionSet, TIn1>::Type in2Promoted =
95 cast<instructionSet, TIn2, TIn1>(in2);
96 return BinaryPackOp<instructionSet, TIn1,
97 SubReg<instructionSet, TIn1> >::act(in1, in2Promoted);
103 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
104 const typename IS2Pack<instructionSet, TIn2>::Type& in2,
105 typename IS2Pack<instructionSet, TIn1>::Type& out)
107 typename IS2Pack<instructionSet, TIn1>::Type in2Promoted;
108 cast<instructionSet, TIn2, TIn1>(in2, in2Promoted);
109 BinaryPackOp<instructionSet, TIn1,
110 SubReg<instructionSet, TIn1> >::act(in1, in2Promoted, out);
115 template <eInstructionSet::domain instructionSet,
typename TIn1,
typename TIn2>
116 struct SubPack<instructionSet, TIn1, TIn2,
117 typename
boost::enable_if_c<!boost::is_same<TIn1, TIn2>::value
118 && !boost::is_same<TIn1, typename PromotedType<TIn1, TIn2>::Type>::value
123 typename IS2Pack<instructionSet, TIn2>::Type
124 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
125 const typename IS2Pack<instructionSet, TIn2>::Type& in2)
127 return SubPack<instructionSet, TIn2, TIn1>::act(in2, in1);
133 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
134 const typename IS2Pack<instructionSet, TIn2>::Type& in2,
135 typename IS2Pack<instructionSet, TIn2>::Type& out)
137 SubPack<instructionSet, TIn2, TIn1>::act(in2, in1, out);
149 #endif // __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_SUBPACK_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
cast function; casts a Pack<instructionSet, TIn> to a Pack<instructionSet, TOut>
Definition: DataItemNodeHdrMacrosDetails.h:48
BasePack class; defines a set of scalars (for instruction set "standard") or registers (for all other...
defines template structures PromotedType<T1, T2> and PromotedType3<T1, T2, T3>; their attribute Type ...
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Definition: BinaryPackOp.h:31