15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_ADDPACK_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_ADDPACK_H__ 23 #include <IPSDKUtil/InstructionSet/Arithmetic/detail/AddReg.h> 27 #include <boost/type_traits/is_same.hpp> 28 #include <boost/utility/enable_if.hpp> 43 template <eInstructionSet::domain instructionSet,
54 template <eInstructionSet::domain instructionSet,
typename TIn1,
typename TIn2>
55 struct AddPack<instructionSet, TIn1, TIn2,
56 typename
boost::enable_if_c<boost::is_same<TIn1, TIn2>::value>::type>
75 BinaryPackOp<instructionSet, TIn1, AddReg<instructionSet, TIn1> >::act(
81 template <eInstructionSet::domain instructionSet,
typename TIn1,
typename TIn2>
82 struct AddPack<instructionSet, TIn1, TIn2,
83 typename
boost::enable_if_c<!boost::is_same<TIn1, TIn2>::value
84 && boost::is_same<TIn1, typename PromotedType<TIn1, TIn2>::Type>::value
89 typename IS2Pack<instructionSet, TIn1>::Type
90 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
91 const typename IS2Pack<instructionSet, TIn2>::Type& in2)
93 typename IS2Pack<instructionSet, TIn1>::Type in2Promoted =
94 cast<instructionSet, TIn2, TIn1>(in2);
95 return BinaryPackOp<instructionSet, TIn1,
96 AddReg<instructionSet, TIn1> >::act(in1, in2Promoted);
102 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
103 const typename IS2Pack<instructionSet, TIn2>::Type& in2,
104 typename IS2Pack<instructionSet, TIn1>::Type& out)
106 typename IS2Pack<instructionSet, TIn1>::Type in2Promoted;
107 cast<instructionSet, TIn2, TIn1>(in2, in2Promoted);
108 BinaryPackOp<instructionSet, TIn1, AddReg<instructionSet, TIn1> >::act(
109 in1, in2Promoted, out);
114 template <eInstructionSet::domain instructionSet,
typename TIn1,
typename TIn2>
115 struct AddPack<instructionSet, TIn1, TIn2,
116 typename
boost::enable_if_c<!boost::is_same<TIn1, TIn2>::value
117 && !boost::is_same<TIn1, typename PromotedType<TIn1, TIn2>::Type>::value
122 typename IS2Pack<instructionSet, TIn2>::Type
123 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
124 const typename IS2Pack<instructionSet, TIn2>::Type& in2)
126 return AddPack<instructionSet, TIn2, TIn1>::act(in2, in1);
132 act(
const typename IS2Pack<instructionSet, TIn1>::Type& in1,
133 const typename IS2Pack<instructionSet, TIn2>::Type& in2,
134 typename IS2Pack<instructionSet, TIn2>::Type& out)
136 AddPack<instructionSet, TIn2, TIn1>::act(in2, in1, out);
149 #endif // __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_ADDPACK_H__
Defines the IPSDK_FORCEINLINE.
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.
template structure which is specialized to implement the arithmetic addition on 2 scalars or 2 regist...
Definition: AddReg.h:37
Definition: BinaryPackOp.h:31