15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_SSE2_ASSIGNPACKIMPL_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_SSE2_ASSIGNPACKIMPL_H__ 25 #include <boost/type_traits/is_same.hpp> 26 #include <boost/type_traits/is_signed.hpp> 37 BasePack<ePackType::ePT_Sse, T>
39 typename boost::enable_if_c<sizeof(T) == 1 >::type>::act(
const T& value)
41 BasePack<ePackType::ePT_Sse, T> out;
42 out._val[0] = AssignReg<eInstructionSet::eIS_Sse2, T>::act(value);
50 typename boost::enable_if_c<sizeof(T) == 1 >::type>::act(
51 BasePack<ePackType::ePT_Sse, T>& pack,
const T& value)
53 AssignReg<eInstructionSet::eIS_Sse2, T>::act(pack._val[0], value);
58 BasePack<ePackType::ePT_Sse, T>
60 typename boost::enable_if_c<sizeof(T) == 2>::type>::act(
const T& value)
62 const typename Sse2Type<T>::Type value128 =
63 AssignReg<eInstructionSet::eIS_Sse2, T>::act(value);
64 BasePack<ePackType::ePT_Sse, T> out;
65 out._val[0] = value128;
66 out._val[1] = value128;
74 typename boost::enable_if_c<sizeof(T) == 2>::type>::act(
75 BasePack<ePackType::ePT_Sse, T>& pack,
const T& value)
77 typename Sse2Type<T>::Type value128;
78 AssignReg<eInstructionSet::eIS_Sse2, T>::act(value128, value);
79 pack._val[0] = value128;
80 pack._val[1] = value128;
85 BasePack<ePackType::ePT_Sse, T>
87 typename boost::enable_if_c<sizeof(T) == 4>::type>::act(
const T& value)
89 const typename Sse2Type<T>::Type value128 =
90 AssignReg<eInstructionSet::eIS_Sse2, T>::act(value);
92 BasePack<ePackType::ePT_Sse, T> out;
93 out._val[0] = value128;
94 out._val[1] = value128;
95 out._val[2] = value128;
96 out._val[3] = value128;
100 template <
typename T>
104 typename boost::enable_if_c<sizeof(T) == 4>::type>::act(
105 BasePack<ePackType::ePT_Sse, T>& pack,
const T& value)
107 typename Sse2Type<T>::Type value128;
108 AssignReg<eInstructionSet::eIS_Sse2, T>::act(value128, value);
109 pack._val[0] = value128;
110 pack._val[1] = value128;
111 pack._val[2] = value128;
112 pack._val[3] = value128;
115 template <
typename T>
117 BasePack<ePackType::ePT_Sse, T>
119 typename boost::enable_if_c<sizeof(T) == 8>::type>::act(
const T& value)
121 const typename Sse2Type<T>::Type value128 =
122 AssignReg<eInstructionSet::eIS_Sse2, T>::act(value);
123 BasePack<ePackType::ePT_Sse, T> out;
124 out._val[0] = value128;
125 out._val[1] = value128;
126 out._val[2] = value128;
127 out._val[3] = value128;
128 out._val[4] = value128;
129 out._val[5] = value128;
130 out._val[6] = value128;
131 out._val[7] = value128;
135 template <
typename T>
139 typename boost::enable_if_c<sizeof(T) == 8>::type>::act(
140 BasePack<ePackType::ePT_Sse, T>& pack,
const T& value)
142 typename Sse2Type<T>::Type value128;
143 AssignReg<eInstructionSet::eIS_Sse2, T>::act(value128, value);
144 pack._val[0] = value128;
145 pack._val[1] = value128;
146 pack._val[2] = value128;
147 pack._val[3] = value128;
148 pack._val[4] = value128;
149 pack._val[5] = value128;
150 pack._val[6] = value128;
151 pack._val[7] = value128;
163 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_SSE2_ASSIGNPACKIMPL_H__ Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition of import/export macro for library.
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36