blob: 1125bc639df12049beb74d27ee0c32d09096f690 [file] [log] [blame]
Anders Carlsson37958ee2008-03-03 19:29:06 +00001/*===---- mmintrin.h - MMX intrinsics --------------------------------------===
2 *
3 * Copyright (c) 2008 Anders Carlsson
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 * THE SOFTWARE.
22 *
23 *===-----------------------------------------------------------------------===
24 */
25
26#ifndef __MMINTRIN_H
27#define __MMINTRIN_H
28
29#ifndef __MMX__
30#error "MMX instruction set not enabled"
31#else
32
33typedef long long __m64 __attribute__((vector_size(8)));
34
35typedef int __v2si __attribute__((vector_size(8)));
36typedef short __v4hi __attribute__((vector_size(8)));
37typedef char __v8qi __attribute__((vector_size(8)));
38
Anders Carlsson365db3b2008-03-04 21:11:29 +000039inline void __attribute__((__always_inline__)) _mm_empty()
Anders Carlsson37958ee2008-03-03 19:29:06 +000040{
41 __builtin_ia32_emms();
42}
43
Anders Carlsson365db3b2008-03-04 21:11:29 +000044inline __m64 __attribute__((__always_inline__)) _mm_cvtsi32_si64(int i)
Anders Carlsson37958ee2008-03-03 19:29:06 +000045{
46 return (__m64)(__v2si){i, 0};
47}
48
Anders Carlsson365db3b2008-03-04 21:11:29 +000049inline int __attribute__((__always_inline__)) _mm_cvtsi64_si32(__m64 m)
Anders Carlsson37958ee2008-03-03 19:29:06 +000050{
Eli Friedman1e6d14f2008-05-14 20:11:29 +000051 __v2si __mmx_var2 = (__v2si)m;
52 return __mmx_var2[0];
Anders Carlsson37958ee2008-03-03 19:29:06 +000053}
54
Anders Carlsson365db3b2008-03-04 21:11:29 +000055inline __m64 __attribute__((__always_inline__)) _mm_cvtsi64_m64(long long i)
Anders Carlsson37958ee2008-03-03 19:29:06 +000056{
57 return (__m64)i;
58}
59
Anders Carlsson365db3b2008-03-04 21:11:29 +000060inline long long __attribute__((__always_inline__)) _mm_cvtm64_si64(__m64 m)
Anders Carlsson37958ee2008-03-03 19:29:06 +000061{
62 return (long long)m;
63}
64
Anders Carlsson365db3b2008-03-04 21:11:29 +000065inline __m64 __attribute__((__always_inline__)) _mm_packs_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000066{
67 return (__m64)__builtin_ia32_packsswb((__v4hi)m1, (__v4hi)m2);
68}
69
Anders Carlsson365db3b2008-03-04 21:11:29 +000070inline __m64 __attribute__((__always_inline__)) _mm_packs_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000071{
72 return (__m64)__builtin_ia32_packssdw((__v2si)m1, (__v2si)m2);
73}
74
Anders Carlsson365db3b2008-03-04 21:11:29 +000075inline __m64 __attribute__((__always_inline__)) _mm_packs_pu16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000076{
77 return (__m64)__builtin_ia32_packuswb((__v4hi)m1, (__v4hi)m2);
78}
79
Anders Carlsson365db3b2008-03-04 21:11:29 +000080inline __m64 __attribute__((__always_inline__)) _mm_unpackhi_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000081{
Eli Friedman1e6d14f2008-05-14 20:11:29 +000082 return (__m64)__builtin_shufflevector((__v8qi)m1, (__v8qi)m2, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7);
Anders Carlsson37958ee2008-03-03 19:29:06 +000083}
84
Anders Carlsson365db3b2008-03-04 21:11:29 +000085inline __m64 __attribute__((__always_inline__)) _mm_unpackhi_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000086{
Eli Friedman1e6d14f2008-05-14 20:11:29 +000087 return (__m64)__builtin_shufflevector((__v4hi)m1, (__v4hi)m2, 2, 4+2, 3, 4+3);
Anders Carlsson37958ee2008-03-03 19:29:06 +000088}
89
Anders Carlsson365db3b2008-03-04 21:11:29 +000090inline __m64 __attribute__((__always_inline__)) _mm_unpackhi_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000091{
Eli Friedman1e6d14f2008-05-14 20:11:29 +000092 return (__m64)__builtin_shufflevector((__v2si)m1, (__v2si)m2, 1, 2+1);
Anders Carlsson37958ee2008-03-03 19:29:06 +000093}
94
Anders Carlsson365db3b2008-03-04 21:11:29 +000095inline __m64 __attribute__((__always_inline__)) _mm_unpacklo_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +000096{
Eli Friedman1e6d14f2008-05-14 20:11:29 +000097 return (__m64)__builtin_shufflevector((__v8qi)m1, (__v8qi)m2, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3);
Anders Carlsson37958ee2008-03-03 19:29:06 +000098}
99
Anders Carlsson365db3b2008-03-04 21:11:29 +0000100inline __m64 __attribute__((__always_inline__)) _mm_unpacklo_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000101{
Eli Friedman1e6d14f2008-05-14 20:11:29 +0000102 return (__m64)__builtin_shufflevector((__v4hi)m1, (__v4hi)m2, 0, 4+0, 1, 4+1);
Anders Carlsson37958ee2008-03-03 19:29:06 +0000103}
104
Anders Carlsson365db3b2008-03-04 21:11:29 +0000105inline __m64 __attribute__((__always_inline__)) _mm_unpacklo_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000106{
Eli Friedman1e6d14f2008-05-14 20:11:29 +0000107 return (__m64)__builtin_shufflevector((__v2si)m1, (__v2si)m2, 0, 2+0);
Anders Carlsson37958ee2008-03-03 19:29:06 +0000108}
109
Anders Carlsson365db3b2008-03-04 21:11:29 +0000110inline __m64 __attribute__((__always_inline__)) _mm_add_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000111{
112 return (__m64)((__v8qi)m1 + (__v8qi)m2);
113}
114
Anders Carlsson365db3b2008-03-04 21:11:29 +0000115inline __m64 __attribute__((__always_inline__)) _mm_add_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000116{
117 return (__m64)((__v4hi)m1 + (__v4hi)m2);
118}
119
Anders Carlsson365db3b2008-03-04 21:11:29 +0000120inline __m64 __attribute__((__always_inline__)) _mm_add_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000121{
122 return (__m64)((__v2si)m1 + (__v2si)m2);
123}
124
Anders Carlsson365db3b2008-03-04 21:11:29 +0000125inline __m64 __attribute__((__always_inline__)) _mm_adds_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000126{
127 return (__m64)__builtin_ia32_paddsb((__v8qi)m1, (__v8qi)m2);
128}
129
Anders Carlsson365db3b2008-03-04 21:11:29 +0000130inline __m64 __attribute__((__always_inline__)) _mm_adds_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000131{
132 return (__m64)__builtin_ia32_paddsw((__v4hi)m1, (__v4hi)m2);
133}
134
Anders Carlsson365db3b2008-03-04 21:11:29 +0000135inline __m64 __attribute__((__always_inline__)) _mm_adds_pu8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000136{
137 return (__m64)__builtin_ia32_paddusb((__v8qi)m1, (__v8qi)m2);
138}
139
Anders Carlsson365db3b2008-03-04 21:11:29 +0000140inline __m64 __attribute__((__always_inline__)) _mm_adds_pu16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000141{
142 return (__m64)__builtin_ia32_paddusw((__v4hi)m1, (__v4hi)m2);
143}
144
Anders Carlsson365db3b2008-03-04 21:11:29 +0000145inline __m64 __attribute__((__always_inline__)) _mm_sub_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000146{
147 return (__m64)((__v8qi)m1 - (__v8qi)m2);
148}
149
Anders Carlsson365db3b2008-03-04 21:11:29 +0000150inline __m64 __attribute__((__always_inline__)) _mm_sub_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000151{
152 return (__m64)((__v4hi)m1 - (__v4hi)m2);
153}
154
Anders Carlsson365db3b2008-03-04 21:11:29 +0000155inline __m64 __attribute__((__always_inline__)) _mm_sub_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000156{
157 return (__m64)((__v2si)m1 - (__v2si)m2);
158}
159
Anders Carlsson365db3b2008-03-04 21:11:29 +0000160inline __m64 __attribute__((__always_inline__)) _mm_subs_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000161{
162 return (__m64)__builtin_ia32_psubsb((__v8qi)m1, (__v8qi)m2);
163}
164
Anders Carlsson365db3b2008-03-04 21:11:29 +0000165inline __m64 __attribute__((__always_inline__)) _mm_subs_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000166{
167 return (__m64)__builtin_ia32_psubsw((__v4hi)m1, (__v4hi)m2);
168}
169
Anders Carlsson365db3b2008-03-04 21:11:29 +0000170inline __m64 __attribute__((__always_inline__)) _mm_subs_pu8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000171{
172 return (__m64)__builtin_ia32_psubusb((__v8qi)m1, (__v8qi)m2);
173}
174
Anders Carlsson365db3b2008-03-04 21:11:29 +0000175inline __m64 __attribute__((__always_inline__)) _mm_subs_pu16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000176{
177 return (__m64)__builtin_ia32_psubusw((__v4hi)m1, (__v4hi)m2);
178}
179
Anders Carlsson365db3b2008-03-04 21:11:29 +0000180inline __m64 __attribute__((__always_inline__)) _mm_madd_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000181{
182 return (__m64)__builtin_ia32_pmaddwd((__v4hi)m1, (__v4hi)m2);
183}
184
Anders Carlsson365db3b2008-03-04 21:11:29 +0000185inline __m64 __attribute__((__always_inline__)) _mm_mulhi_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000186{
187 return (__m64)__builtin_ia32_pmulhw((__v4hi)m1, (__v4hi)m2);
188}
189
Anders Carlsson365db3b2008-03-04 21:11:29 +0000190inline __m64 __attribute__((__always_inline__)) _mm_mullo_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000191{
192 return (__m64)((__v4hi)m1 * (__v4hi)m2);
193}
194
Anders Carlsson365db3b2008-03-04 21:11:29 +0000195inline __m64 __attribute__((__always_inline__)) _mm_sll_pi16(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000196{
197 return (__m64)__builtin_ia32_psllw((__v4hi)m, count);
198}
199
Anders Carlsson365db3b2008-03-04 21:11:29 +0000200inline __m64 __attribute__((__always_inline__)) _mm_slli_pi16(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000201{
202 return (__m64)__builtin_ia32_psllwi((__v4hi)m, count);
203}
204
Anders Carlsson365db3b2008-03-04 21:11:29 +0000205inline __m64 __attribute__((__always_inline__)) _mm_sll_pi32(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000206{
207 return (__m64)__builtin_ia32_pslld((__v2si)m, count);
208}
209
Anders Carlsson365db3b2008-03-04 21:11:29 +0000210inline __m64 __attribute__((__always_inline__)) _mm_slli_pi32(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000211{
212 return (__m64)__builtin_ia32_pslldi((__v2si)m, count);
213}
214
Anders Carlsson365db3b2008-03-04 21:11:29 +0000215inline __m64 __attribute__((__always_inline__)) _mm_sll_pi64(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000216{
217 return __builtin_ia32_psllq(m, count);
218}
219
Anders Carlsson365db3b2008-03-04 21:11:29 +0000220inline __m64 __attribute__((__always_inline__)) _mm_slli_pi64(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000221{
222 return __builtin_ia32_psllqi(m, count);
223}
224
Anders Carlsson365db3b2008-03-04 21:11:29 +0000225inline __m64 __attribute__((__always_inline__)) _mm_sra_pi16(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000226{
227 return (__m64)__builtin_ia32_psraw((__v4hi)m, count);
228}
229
Anders Carlsson365db3b2008-03-04 21:11:29 +0000230inline __m64 __attribute__((__always_inline__)) _mm_srai_pi16(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000231{
232 return (__m64)__builtin_ia32_psrawi((__v4hi)m, count);
233}
234
Anders Carlsson365db3b2008-03-04 21:11:29 +0000235inline __m64 __attribute__((__always_inline__)) _mm_sra_pi32(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000236{
237 return (__m64)__builtin_ia32_psrad((__v2si)m, count);
238}
239
Anders Carlsson365db3b2008-03-04 21:11:29 +0000240inline __m64 __attribute__((__always_inline__)) _mm_srai_pi32(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000241{
242 return (__m64)__builtin_ia32_psradi((__v2si)m, count);
243}
244
Anders Carlsson365db3b2008-03-04 21:11:29 +0000245inline __m64 __attribute__((__always_inline__)) _mm_srl_pi16(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000246{
247 return (__m64)__builtin_ia32_psrlw((__v4hi)m, count);
248}
249
Anders Carlsson365db3b2008-03-04 21:11:29 +0000250inline __m64 __attribute__((__always_inline__)) _mm_srli_pi16(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000251{
252 return (__m64)__builtin_ia32_psrlwi((__v4hi)m, count);
253}
254
Anders Carlsson365db3b2008-03-04 21:11:29 +0000255inline __m64 __attribute__((__always_inline__)) _mm_srl_pi32(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000256{
257 return (__m64)__builtin_ia32_psrld((__v2si)m, count);
258}
259
Anders Carlsson365db3b2008-03-04 21:11:29 +0000260inline __m64 __attribute__((__always_inline__)) _mm_srli_pi32(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000261{
262 return (__m64)__builtin_ia32_psrldi((__v2si)m, count);
263}
264
Anders Carlsson365db3b2008-03-04 21:11:29 +0000265inline __m64 __attribute__((__always_inline__)) _mm_srl_pi64(__m64 m, __m64 count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000266{
267 return (__m64)__builtin_ia32_psrlq(m, count);
268}
269
Anders Carlsson365db3b2008-03-04 21:11:29 +0000270inline __m64 __attribute__((__always_inline__)) _mm_srli_pi64(__m64 m, int count)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000271{
272 return __builtin_ia32_psrlqi(m, count);
273}
274
Anders Carlsson365db3b2008-03-04 21:11:29 +0000275inline __m64 __attribute__((__always_inline__)) _mm_and_si64(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000276{
277 return m1 & m2;
278}
279
Anders Carlsson365db3b2008-03-04 21:11:29 +0000280inline __m64 __attribute__((__always_inline__)) _mm_andnot_si64(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000281{
282 return ~m1 & m2;
283}
284
Anders Carlsson365db3b2008-03-04 21:11:29 +0000285inline __m64 __attribute__((__always_inline__)) _mm_or_si64(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000286{
287 return m1 | m2;
288}
289
Anders Carlsson365db3b2008-03-04 21:11:29 +0000290inline __m64 __attribute__((__always_inline__)) _mm_xor_si64(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000291{
292 return m1 ^ m2;
293}
294
Anders Carlsson365db3b2008-03-04 21:11:29 +0000295inline __m64 __attribute__((__always_inline__)) _mm_cmpeq_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000296{
297 return (__m64)__builtin_ia32_pcmpeqb((__v8qi)m1, (__v8qi)m2);
298}
299
Anders Carlsson365db3b2008-03-04 21:11:29 +0000300inline __m64 __attribute__((__always_inline__)) _mm_cmpeq_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000301{
302 return (__m64)__builtin_ia32_pcmpeqw((__v4hi)m1, (__v4hi)m2);
303}
304
Anders Carlsson365db3b2008-03-04 21:11:29 +0000305inline __m64 __attribute__((__always_inline__)) _mm_cmpeq_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000306{
307 return (__m64)__builtin_ia32_pcmpeqd((__v2si)m1, (__v2si)m2);
308}
309
Anders Carlsson365db3b2008-03-04 21:11:29 +0000310inline __m64 __attribute__((__always_inline__)) _mm_cmpgt_pi8(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000311{
312 return (__m64)__builtin_ia32_pcmpgtb((__v8qi)m1, (__v8qi)m2);
313}
314
Anders Carlsson365db3b2008-03-04 21:11:29 +0000315inline __m64 __attribute__((__always_inline__)) _mm_cmpgt_pi16(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000316{
317 return (__m64)__builtin_ia32_pcmpgtw((__v4hi)m1, (__v4hi)m2);
318}
319
Anders Carlsson365db3b2008-03-04 21:11:29 +0000320inline __m64 __attribute__((__always_inline__)) _mm_cmpgt_pi32(__m64 m1, __m64 m2)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000321{
322 return (__m64)__builtin_ia32_pcmpgtd((__v2si)m1, (__v2si)m2);
323}
324
Anders Carlsson365db3b2008-03-04 21:11:29 +0000325inline __m64 __attribute__((__always_inline__)) _mm_setzero_si64()
Anders Carlsson37958ee2008-03-03 19:29:06 +0000326{
327 return (__m64){ 0LL };
328}
329
Anders Carlsson365db3b2008-03-04 21:11:29 +0000330inline __m64 __attribute__((__always_inline__)) _mm_set_pi32(int i1, int i0)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000331{
332 return (__m64)(__v2si){ i0, i1 };
333}
334
Anders Carlsson365db3b2008-03-04 21:11:29 +0000335inline __m64 __attribute__((__always_inline__)) _mm_set_pi16(short s3, short s2, short s1, short s0)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000336{
337 return (__m64)(__v4hi){ s0, s1, s2, s3 };
338}
339
Anders Carlsson365db3b2008-03-04 21:11:29 +0000340inline __m64 __attribute__((__always_inline__)) _mm_set_pi8(char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000341{
342 return (__m64)(__v8qi){ b0, b1, b2, b3, b4, b5, b6, b7 };
343}
344
Anders Carlsson365db3b2008-03-04 21:11:29 +0000345inline __m64 __attribute__((__always_inline__)) _mm_set1_pi32(int i)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000346{
347 return (__m64)(__v2si){ i, i };
348}
349
Anders Carlsson365db3b2008-03-04 21:11:29 +0000350inline __m64 __attribute__((__always_inline__)) _mm_set1_pi16(short s)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000351{
352 return (__m64)(__v4hi){ s };
353}
354
Anders Carlsson365db3b2008-03-04 21:11:29 +0000355inline __m64 __attribute__((__always_inline__)) _mm_set1_pi8(char b)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000356{
357 return (__m64)(__v8qi){ b };
358}
359
Anders Carlsson365db3b2008-03-04 21:11:29 +0000360inline __m64 __attribute__((__always_inline__)) _mm_setr_pi32(int i1, int i0)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000361{
362 return (__m64)(__v2si){ i1, i0 };
363}
364
Anders Carlsson365db3b2008-03-04 21:11:29 +0000365inline __m64 __attribute__((__always_inline__)) _mm_setr_pi16(short s3, short s2, short s1, short s0)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000366{
367 return (__m64)(__v4hi){ s3, s2, s1, s0 };
368}
369
Anders Carlsson365db3b2008-03-04 21:11:29 +0000370inline __m64 __attribute__((__always_inline__)) _mm_setr_pi8(char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0)
Anders Carlsson37958ee2008-03-03 19:29:06 +0000371{
372 return (__m64)(__v8qi){ b7, b6, b5, b4, b3, b2, b1, b0 };
373}
374
375#endif /* __MMX__ */
376
377#endif /* __MMINTRIN_H */
378