IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
ShiftRightPack.h
Go to the documentation of this file.
1 // ShiftRightPack.h:
3 // -------------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_SSE2_SHIFTRIGHTPACK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_SSE2_SHIFTRIGHTPACK_H__
17 
25 
26 namespace ipsdk {
27 namespace simd {
28 namespace detail {
29 
32 
35 template <>
37 {
38  static IPSDK_FORCEINLINE
41  ipUInt8 nbBits)
42  {
44  out._val[0] = _mm_srli_epi16(in._val[0], nbBits);
45  out._val[1] = _mm_srli_epi16(in._val[1], nbBits);
46  return out;
47  }
48 
49  static IPSDK_FORCEINLINE
50  void
52  ipUInt8 nbBits,
54  {
55  out._val[0] = _mm_srli_epi16(in._val[0], nbBits);
56  out._val[1] = _mm_srli_epi16(in._val[1], nbBits);
57  }
58 };
59 
62 template <>
64 {
65  static IPSDK_FORCEINLINE
68  ipUInt8 nbBits)
69  {
71  out._val[0] = _mm_srai_epi16(in._val[0], nbBits);
72  out._val[1] = _mm_srai_epi16(in._val[1], nbBits);
73  return out;
74  }
75 
76  static IPSDK_FORCEINLINE
77  void
79  ipUInt8 nbBits,
81  {
82  out._val[0] = _mm_srai_epi16(in._val[0], nbBits);
83  out._val[1] = _mm_srai_epi16(in._val[1], nbBits);
84  }
85 };
86 
87 
88 
91 template <>
93 {
94  static IPSDK_FORCEINLINE
97  ipUInt8 nbBits)
98  {
100  out._val[0] = _mm_srli_epi32(in._val[0], nbBits);
101  out._val[1] = _mm_srli_epi32(in._val[1], nbBits);
102  out._val[2] = _mm_srli_epi32(in._val[2], nbBits);
103  out._val[3] = _mm_srli_epi32(in._val[3], nbBits);
104  return out;
105  }
106 
107  static IPSDK_FORCEINLINE
108  void
110  ipUInt8 nbBits,
112  {
113  out._val[0] = _mm_srli_epi32(in._val[0], nbBits);
114  out._val[1] = _mm_srli_epi32(in._val[1], nbBits);
115  out._val[2] = _mm_srli_epi32(in._val[2], nbBits);
116  out._val[3] = _mm_srli_epi32(in._val[3], nbBits);
117  }
118 };
119 
122 template <>
124 {
125  static IPSDK_FORCEINLINE
128  ipUInt8 nbBits)
129  {
131  out._val[0] = _mm_srai_epi32(in._val[0], nbBits);
132  out._val[1] = _mm_srai_epi32(in._val[1], nbBits);
133  out._val[2] = _mm_srai_epi32(in._val[2], nbBits);
134  out._val[3] = _mm_srai_epi32(in._val[3], nbBits);
135  return out;
136  }
137 
138  static IPSDK_FORCEINLINE
139  void
141  ipUInt8 nbBits,
143  {
144  out._val[0] = _mm_srai_epi32(in._val[0], nbBits);
145  out._val[1] = _mm_srai_epi32(in._val[1], nbBits);
146  out._val[2] = _mm_srai_epi32(in._val[2], nbBits);
147  out._val[3] = _mm_srai_epi32(in._val[3], nbBits);
148  }
149 };
150 
154 template <>
156 {
157  static IPSDK_FORCEINLINE
160  ipUInt8 nbBits)
161  {
162  return cast<eInstructionSet::eIS_Sse2, ipUInt8>(
164  cast<eInstructionSet::eIS_Sse2, ipUInt16>(in), nbBits));
165  }
166 
167  static IPSDK_FORCEINLINE
168  void
170  ipUInt8 nbBits,
172  {
174  cast<eInstructionSet::eIS_Sse2>(in, packUInt16);
176  packUInt16, nbBits, packUInt16);
177  cast<eInstructionSet::eIS_Sse2>(packUInt16, out);
178  }
179 };
180 
184 template <>
186 {
187  static IPSDK_FORCEINLINE
190  ipUInt8 nbBits)
191  {
192  return cast<eInstructionSet::eIS_Sse2, ipInt8>(
194  cast<eInstructionSet::eIS_Sse2, ipInt16>(in), nbBits));
195  }
196 
197  static IPSDK_FORCEINLINE
198  void
200  ipUInt8 nbBits,
202  {
204  cast<eInstructionSet::eIS_Sse2>(in, packInt16);
206  packInt16, nbBits, packInt16);
207  cast<eInstructionSet::eIS_Sse2>(packInt16, out);
208  }
209 };
210 
213 
214 } // end of namespace detail
215 } // end of namespace simd
216 } // end of namespace ipsdk
217 
218 #endif // __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_SSE2_SHIFTRIGHTPACK_H__
int8_t ipInt8
Base types definition.
Definition: BaseTypes.h:48
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>
int32_t ipInt32
Base types definition.
Definition: BaseTypes.h:52
int16_t ipInt16
Base types definition.
Definition: BaseTypes.h:50
uint8_t ipUInt8
Base types definition.
Definition: BaseTypes.h:49
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
function assigning a given value of type T to a given Pack<instructionSet, T>
Definition of import/export macro for library.
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36
uint16_t ipUInt16
Base types definition.
Definition: BaseTypes.h:51
Definition: ShiftRightPack.h:30
uint32_t ipUInt32
Base types definition.
Definition: BaseTypes.h:53
structure containing intrinsic registers used to store vectorized data
Definition: BasePackDecl.h:29