emmintrin.h revision 92d66868a1d446a3878cbb2373679c05cbc14045
137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson/*===---- xmmintrin.h - SSE intrinsics -------------------------------------===
237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson *
337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * Permission is hereby granted, free of charge, to any person obtaining a copy
437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * of this software and associated documentation files (the "Software"), to deal
537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * in the Software without restriction, including without limitation the rights
637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * copies of the Software, and to permit persons to whom the Software is
837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * furnished to do so, subject to the following conditions:
937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson *
1037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * The above copyright notice and this permission notice shall be included in
1137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * all copies or substantial portions of the Software.
1237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson *
1337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson * THE SOFTWARE.
2037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson *
2137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson *===-----------------------------------------------------------------------===
2237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson */
2337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#ifndef __EMMINTRIN_H
2537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#define __EMMINTRIN_H
2637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#ifndef __SSE2__
2837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#error "SSE2 instruction set not enabled"
2937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#else
3037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#include <xmmintrin.h>
3237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssontypedef double __m128d __attribute__((__vector_size__(16)));
3437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssontypedef long long __m128i __attribute__((__vector_size__(16)));
3537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssontypedef int __v4si __attribute__((__vector_size__(16)));
3707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssontypedef short __v8hi __attribute__((__vector_size__(16)));
38445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssontypedef char __v16qi __attribute__((__vector_size__(16)));
3937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_add_sd(__m128d a, __m128d b)
4137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
4237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_addsd(a, b);
4337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
4437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_add_pd(__m128d a, __m128d b)
4637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
4737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a + b;
4837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
4937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
5037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_sub_sd(__m128d a, __m128d b)
5137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
5237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_subsd(a, b);
5337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
5437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
5537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_sub_pd(__m128d a, __m128d b)
5637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
5737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a - b;
5837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
5937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
6037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_mul_sd(__m128d a, __m128d b)
6137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
6237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_mulsd(a, b);
6337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
6437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
6537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_mul_pd(__m128d a, __m128d b)
6637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
6737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a * b;
6837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
6937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
7037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_div_sd(__m128d a, __m128d b)
7137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
7237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_divsd(a, b);
7337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
7437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
7537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_div_pd(__m128d a, __m128d b)
7637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
7737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a / b;
7837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
7937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
8037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_sqrt_sd(__m128d a, __m128d b)
8137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
8237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  __m128d c = __builtin_ia32_sqrtsd(b);
8337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d) { c[0], a[1] };
8437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
8537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
8637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_sqrt_pd(__m128d a)
8737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
8837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_sqrtpd(a);
8937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
9037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
9137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_min_sd(__m128d a, __m128d b)
9237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
9337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_minsd(a, b);
9437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
9537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
9637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_min_pd(__m128d a, __m128d b)
9737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
9837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_minpd(a, b);
9937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
10037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
10137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_max_sd(__m128d a, __m128d b)
10237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
10337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_maxsd(a, b);
10437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
10537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
10637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_max_pd(__m128d a, __m128d b)
10737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
10837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_maxpd(a, b);
10937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
11037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
11137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_and_pd(__m128d a, __m128d b)
11237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
11337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_andpd(a, b);
11437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
11537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
11637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_andnot_pd(__m128d a, __m128d b)
11737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
11837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_andnpd(a, b);
11937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
12037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
12137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_or_pd(__m128d a, __m128d b)
12237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
12337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_orpd(a, b);
12437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
12537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
12637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_xor_pd(__m128d a, __m128d b)
12737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
12837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_xorpd(a, b);
12937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
13037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
13137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpeq_pd(__m128d a, __m128d b)
13237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
13337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpeqpd(a, b);
13437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
13537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
13637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmplt_pd(__m128d a, __m128d b)
13737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
13837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpltpd(a, b);
13937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
14037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
14137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmple_pd(__m128d a, __m128d b)
14237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
14337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmplepd(a, b);
14437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
14537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
14637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpgt_pd(__m128d a, __m128d b)
14737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
14837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpltpd(b, a);
14937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
15037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
15137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpge_pd(__m128d a, __m128d b)
15237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
15337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmplepd(b, a);
15437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
15537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
15637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpord_pd(__m128d a, __m128d b)
15737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
15837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpordpd(a, b);
15937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
16037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
16137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpunord_pd(__m128d a, __m128d b)
16237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
16337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpunordpd(a, b);
16437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
16537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
16637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpneq_pd(__m128d a, __m128d b)
16737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
16837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpneqpd(a, b);
16937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
17037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
17137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpnlt_pd(__m128d a, __m128d b)
17237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
17337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnltpd(a, b);
17437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
17537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
17637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpnle_pd(__m128d a, __m128d b)
17737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
17837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnlepd(a, b);
17937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
18037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
18137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpngt_pd(__m128d a, __m128d b)
18237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
18337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnltpd(b, a);
18437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
18537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
18637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpnge_pd(__m128d a, __m128d b)
18737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
18837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnlepd(b, a);
18937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
19037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
19137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpeq_sd(__m128d a, __m128d b)
19237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
19337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpeqsd(a, b);
19437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
19537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
19637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmplt_sd(__m128d a, __m128d b)
19737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
19837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpltsd(a, b);
19937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
20037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
20137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmple_sd(__m128d a, __m128d b)
20237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
20337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmplesd(a, b);
20437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
20537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
20637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpgt_sd(__m128d a, __m128d b)
20737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
20837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpltsd(b, a);
20937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
21037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
21137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpge_sd(__m128d a, __m128d b)
21237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
21337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmplesd(b, a);
21437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
21537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
21637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpord_sd(__m128d a, __m128d b)
21737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
21837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpordsd(a, b);
21937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
22037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
22137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpunord_sd(__m128d a, __m128d b)
22237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
22337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpunordsd(a, b);
22437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
22537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
22637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpneq_sd(__m128d a, __m128d b)
22737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
22837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpneqsd(a, b);
22937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
23037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
23137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpnlt_sd(__m128d a, __m128d b)
23237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
23337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnltsd(a, b);
23437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
23537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
23637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpnle_sd(__m128d a, __m128d b)
23737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
23837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnlesd(a, b);
23937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
24037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
24137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpngt_sd(__m128d a, __m128d b)
24237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
24337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnltsd(b, a);
24437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
24537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
24637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cmpnge_sd(__m128d a, __m128d b)
24737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
24837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d)__builtin_ia32_cmpnlesd(b, a);
24937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
25037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
25137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_comieq_sd(__m128d a, __m128d b)
25237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
25337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdeq(a, b);
25437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
25537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
25637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_comilt_sd(__m128d a, __m128d b)
25737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
25837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdlt(a, b);
25937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
26037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
26137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_comile_sd(__m128d a, __m128d b)
26237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
26337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdle(a, b);
26437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
26537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
26637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_comigt_sd(__m128d a, __m128d b)
26737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
26837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdgt(a, b);
26937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
27037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
27137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_comineq_sd(__m128d a, __m128d b)
27237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
27337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdneq(a, b);
27437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
27537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
27637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_ucomieq_sd(__m128d a, __m128d b)
27737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
27837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdeq(a, b);
27937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
28037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
28137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_ucomilt_sd(__m128d a, __m128d b)
28237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
28337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdlt(a, b);
28437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
28537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
28637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_ucomile_sd(__m128d a, __m128d b)
28737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
28837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdle(a, b);
28937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
29037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
29137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_ucomigt_sd(__m128d a, __m128d b)
29237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
29337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdgt(a, b);
29437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
29537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
29637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_ucomineq_sd(__m128d a, __m128d b)
29737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
29837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdneq(a, b);
29937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
30037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
30137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128 __attribute__((__always_inline__)) _mm_cvtpd_ps(__m128d a)
30237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
30337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtpd2ps(a);
30437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
30537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
30637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cvtps_pd(__m128 a)
30737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
30837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtps2pd(a);
30937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
31037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
31137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cvtepi32_pd(__m128i a)
31237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
31337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtdq2pd((__v4si)a);
31437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
31537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
31637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cvtpd_epi32(__m128d a)
31737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
31837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtpd2dq(a);
31937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
32037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
32137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_cvtsd_si32(__m128d a)
32237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
32337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtsd2si(a);
32437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
32537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
32637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128 __attribute__((__always_inline__)) _mm_cvtsd_ss(__m128 a, __m128d b)
32737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
32837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtsd2ss(a, b);
32937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
33037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
33137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cvtsi32_sd(__m128d a, int b)
33237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
33337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtsi2sd(a, b);
33437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
33537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
33637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cvtss_sd(__m128d a, __m128 b)
33737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
33837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtss2sd(a, b);
33937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
34037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
34137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cvttpd_epi32(__m128d a)
34237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
34337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128i)__builtin_ia32_cvttpd2dq(a);
34437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
34537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
34637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_cvttsd_si32(__m128d a)
34737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
34837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvttsd2si(a);
34937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
35037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
35137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m64 __attribute__((__always_inline__)) _mm_cvtpd_pi32(__m128d a)
35237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
35337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m64)__builtin_ia32_cvtpd2pi(a);
35437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
35537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
35637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m64 __attribute__((__always_inline__)) _mm_cvttpd_pi32(__m128d a)
35737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
35837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m64)__builtin_ia32_cvttpd2pi(a);
35937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
36037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
36137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cvtpi32_pd(__m64 a)
36237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
36337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtpi2pd((__v2si)a);
36437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
36537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
36637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlssonstatic inline double __attribute__((__always_inline__)) _mm_cvtsd_f64(__m128d a)
36737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
36837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a[0];
36937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
37037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
371445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_load_pd(double const *dp)
372445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
373445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return *(__m128d*)dp;
374445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
375445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
376445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_load1_pd(double const *dp)
377445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
378445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ dp[0], dp[0] };
379445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
380445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
381445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_loadr_pd(double const *dp)
382445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
383445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ dp[1], dp[0] };
384445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
385445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
386445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_loadu_pd(double const *dp)
387445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
388445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return __builtin_ia32_loadupd(dp);
389445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
390445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
391445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_load_sd(double const *dp)
392445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
393445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ *dp, 0.0 };
394445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
395445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
396445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_loadh_pd(__m128d a, double const *dp)
397445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
398445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return __builtin_shufflevector(a, *(__m128d *)dp, 0, 2);
399445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
400445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
401445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_loadl_pd(__m128d a, double const *dp)
402445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
403445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return __builtin_shufflevector(a, *(__m128d *)dp, 2, 1);
404445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
405445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
406445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_set_sd(double w)
407445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
408445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ w, 0 };
409445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
410445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
411445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_set1_pd(double w)
412445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
413445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ w, w };
414445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
415445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
416445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_set_pd(double w, double x)
417445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
418445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ w, x };
419445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
420445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
421445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_setr_pd(double w, double x)
422445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
423445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ x, w };
424445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
425445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
426445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_setzero_pd(void)
427445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
428445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ 0, 0 };
429445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
430445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
431445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_move_sd(__m128d a, __m128d b)
432445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
433445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ b[0], a[1] };
434445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
435445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
436445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_store_sd(double *dp, __m128d a)
437445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
438445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[0] = a[0];
439445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
440445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
441445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_store1_pd(double *dp, __m128d a)
442445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
443445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[0] = a[0];
444445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[1] = a[0];
445445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
446445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
447445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_store_pd(double *dp, __m128d a)
448445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
449445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  *(__m128d *)dp = a;
450445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
451445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
452445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_storeu_pd(double *dp, __m128d a)
453445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
454445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  __builtin_ia32_storeupd(dp, a);
455445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
456445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
457445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_storer_pd(double *dp, __m128d a)
458445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
459445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[0] = a[1];
460445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[1] = a[0];
461445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
462445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
463445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_storeh_pd(double *dp, __m128d a)
464445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
465445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[0] = a[1];
466445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
467445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
468445afa04f5170292727b7601fb52c129420bc6a4Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_storel_pd(double *dp, __m128d a)
469445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
470445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  dp[0] = a[0];
471445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
472445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
47307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_add_epi8(__m128i a, __m128i b)
47407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
47507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v16qi)a + (__v16qi)b);
47607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
47707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
47807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_add_epi16(__m128i a, __m128i b)
47907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
48007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v8hi)a + (__v8hi)b);
48107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
48207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
48307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_add_epi32(__m128i a, __m128i b)
48407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
48507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v4si)a + (__v4si)b);
48607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
48707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
488dfb0911b958b7ee84616e5e2061d000aff61a16fAnders Carlssonstatic inline __m64 __attribute__((__always_inline__)) _mm_add_si64(__m64 a, __m64 b)
48907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
49007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a + b;
49107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
49207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
49307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_add_epi64(__m128i a, __m128i b)
49407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
49507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a + b;
49607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
49707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
49807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_adds_epi8(__m128i a, __m128i b)
49907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
50007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddsb128((__v16qi)a, (__v16qi)b);
50107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
50207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
50307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_adds_epi16(__m128i a, __m128i b)
50407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
50507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddsw128((__v8hi)a, (__v8hi)b);
50607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
50707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
50807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_adds_epu8(__m128i a, __m128i b)
50907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
51007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddusb128((__v16qi)a, (__v16qi)b);
51107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
51207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
51307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_adds_epu16(__m128i a, __m128i b)
51407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
51507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddusw128((__v8hi)a, (__v8hi)b);
51607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
51707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
51807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_avg_epu8(__m128i a, __m128i b)
51907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
52007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pavgb128((__v16qi)a, (__v16qi)b);
52107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
52207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
52307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_avg_epu16(__m128i a, __m128i b)
52407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
52507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pavgw128((__v8hi)a, (__v8hi)b);
52607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
52707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
52807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_madd_epi16(__m128i a, __m128i b)
52907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
53007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)a, (__v8hi)b);
53107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
53207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
53307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_max_epi16(__m128i a, __m128i b)
53407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
53507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)a, (__v8hi)b);
53607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
53707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
53807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_max_epu8(__m128i a, __m128i b)
53907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
54007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmaxub128((__v16qi)a, (__v16qi)b);
54107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
54207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
54307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_min_epi16(__m128i a, __m128i b)
54407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
54507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pminsw128((__v8hi)a, (__v8hi)b);
54607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
54707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
54807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_min_epu8(__m128i a, __m128i b)
54907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
55007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pminub128((__v16qi)a, (__v16qi)b);
55107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
55207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
55307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_mulhi_epi16(__m128i a, __m128i b)
55407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
55507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmulhw128((__v8hi)a, (__v8hi)b);
55607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
55707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
55807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_mulhi_epu16(__m128i a, __m128i b)
55907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
56007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)a, (__v8hi)b);
56107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
56207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
56307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_mullo_epi16(__m128i a, __m128i b)
56407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
56507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmullw128((__v8hi)a, (__v8hi)b);
56607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
56707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
5680727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m64 __attribute__((__always_inline__)) _mm_mul_su32(__m64 a, __m64 b)
56907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
57007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return __builtin_ia32_pmuludq((__v2si)a, (__v2si)b);
57107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
57207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
57307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_mul_epu32(__m128i a, __m128i b)
57407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
57507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return __builtin_ia32_pmuludq128((__v4si)a, (__v4si)b);
57607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
57707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
57807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sad_epu(__m128i a, __m128i b)
57907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
58007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return __builtin_ia32_psadbw128((__v16qi)a, (__v16qi)b);
58107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
58207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
58307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sub_epi8(__m128i a, __m128i b)
58407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
58507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v16qi)a - (__v16qi)b);
58607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
58707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
58807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sub_epi16(__m128i a, __m128i b)
58907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
59007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v8hi)a - (__v8hi)b);
59107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
59207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
59307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sub_epi32(__m128i a, __m128i b)
59407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
59507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v4si)a - (__v4si)b);
59607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
59707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
5980727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m64 __attribute__((__always_inline__)) _mm_sub_si64(__m64 a, __m64 b)
59907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
60007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a - b;
60107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
60207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
60307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sub_epi64(__m128i a, __m128i b)
60407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
60507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a - b;
60607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
60707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
60807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_subs_epi8(__m128i a, __m128i b)
60907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
61007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubsb128((__v16qi)a, (__v16qi)b);
61107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
61207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
61307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_subs_epi16(__m128i a, __m128i b)
61407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
61507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubsw128((__v8hi)a, (__v8hi)b);
61607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
61707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
61807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_subs_epu8(__m128i a, __m128i b)
61907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
62007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubusb128((__v16qi)a, (__v16qi)b);
62107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
62207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
62307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_subs_epu16(__m128i a, __m128i b)
62407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
62507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubusw128((__v8hi)a, (__v8hi)b);
62607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
62707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6280727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_and_si128(__m128i a, __m128i b)
6290727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6300727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_pand128(a, b);
6310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6320727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6330727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_andnot_si128(__m128i a, __m128i b)
6340727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6350727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_pandn128(a, b);
6360727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6370727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6380727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_or_si128(__m128i a, __m128i b)
6390727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6400727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_por128(a, b);
6410727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6420727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6430727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_xor_si128(__m128i a, __m128i b)
6440727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6450727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_pxor128(a, b);
6460727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6470727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6480727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_slli_si128(__m128i a, int imm)
6490727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6500727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_pslldqi128(a, imm * 8);
6510727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6520727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6530727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_slli_epi16(__m128i a, int count)
6540727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6550727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psllwi128((__v8hi)a, count);
6560727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6570727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6580727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sll_epi16(__m128i a, __m128i count)
6590727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6600727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psllw128((__v8hi)a, (__v8hi)count);
6610727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6620727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6630727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_slli_epi32(__m128i a, int count)
6640727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6650727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pslldi128((__v4si)a, count);
6660727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6670727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6680727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sll_epi32(__m128i a, __m128i count)
6690727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6700727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pslld128((__v4si)a, (__v4si)count);
6710727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6720727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6730727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_slli_epi64(__m128i a, int count)
6740727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6750727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psllqi128(a, count);
6760727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6770727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6780727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sll_epi64(__m128i a, __m128i count)
6790727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6800727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psllq128(a, count);
6810727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6820727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6830727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srai_epi16(__m128i a, int count)
6840727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6850727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrawi128((__v8hi)a, count);
6860727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6870727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6880727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sra_epi16(__m128i a, __m128i count)
6890727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6900727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psraw128((__v8hi)a, (__v8hi)count);
6910727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6920727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6930727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srai_epi32(__m128i a, int count)
6940727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
6950727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psradi128((__v4si)a, count);
6960727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
6970727df0c4118755e3f8462f077091443389021b6Anders Carlsson
6980727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_sra_epi32(__m128i a, __m128i count)
6990727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7000727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrad128((__v4si)a, (__v4si)count);
7010727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7020727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7030727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srli_si128(__m128i a, int imm)
7040727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7050727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrldqi128(a, imm * 8);
7060727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7070727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7080727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srli_epi16(__m128i a, int count)
7090727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7100727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrlwi128((__v8hi)a, count);
7110727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7120727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7130727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srl_epi16(__m128i a, __m128i count)
7140727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7150727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrlw128((__v8hi)a, (__v8hi)count);
7160727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7170727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7180727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srli_epi32(__m128i a, int count)
7190727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7200727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrldi128((__v4si)a, count);
7210727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7220727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7230727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srl_epi32(__m128i a, __m128i count)
7240727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7250727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrld128((__v4si)a, (__v4si)count);
7260727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7270727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7280727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srli_epi64(__m128i a, int count)
7290727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7300727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrlqi128(a, count);
7310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7320727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7330727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_srl_epi64(__m128i a, __m128i count)
7340727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7350727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrlq128(a, count);
7360727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7370727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7380727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmpeq_epi8(__m128i a, __m128i b)
7390727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7400727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpeqb128((__v16qi)a, (__v16qi)b);
7410727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7420727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7430727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmpeq_epi16(__m128i a, __m128i b)
7440727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7450727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpeqw128((__v8hi)a, (__v8hi)b);
7460727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7470727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7480727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmpeq_epi32(__m128i a, __m128i b)
7490727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7500727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpeqd128((__v4si)a, (__v4si)b);
7510727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7520727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7530727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmpgt_epi8(__m128i a, __m128i b)
7540727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7550727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpgtb128((__v16qi)a, (__v16qi)b);
7560727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7570727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7580727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmpgt_epi16(__m128i a, __m128i b)
7590727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7600727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpgtw128((__v8hi)a, (__v8hi)b);
7610727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7620727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7630727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmpgt_epi32(__m128i a, __m128i b)
7640727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7650727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpgtd128((__v4si)a, (__v4si)b);
7660727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7670727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7680727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmplt_epi8(__m128i a, __m128i b)
7690727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7700727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpgtb128((__v16qi)b, (__v16qi)a);
7710727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7720727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7730727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmplt_epi16(__m128i a, __m128i b)
7740727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7750727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpgtw128((__v8hi)b, (__v8hi)a);
7760727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7770727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7780727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cmplt_epi32(__m128i a, __m128i b)
7790727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7800727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pcmpgtd128((__v4si)b, (__v4si)a);
7810727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7820727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7830727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
7840727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_cvtsi64_sd(__m128d a, long long b)
7850727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7860727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtsi642sd(a, b);
7870727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7880727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7890727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline long long __attribute__((__always_inline__)) _mm_cvtsd_si64(__m128d a)
7900727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7910727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtsd2si64(a);
7920727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7930727df0c4118755e3f8462f077091443389021b6Anders Carlsson
7940727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline long long __attribute__((__always_inline__)) _mm_cvttsd_si64(__m128d a)
7950727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
7960727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvttsd2si64(a);
7970727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
7980727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
7990727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8000727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128 __attribute__((__always_inline__)) _mm_cvtepi32_ps(__m128i a)
8010727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8020727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtdq2ps((__v4si)a);
8030727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8040727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8050727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cvtps_epi32(__m128 a)
8060727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8070727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_cvtps2dq(a);
8080727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8090727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8100727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cvttps_epi32(__m128 a)
8110727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8120727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_cvttps2dq(a);
8130727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8140727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8150727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cvtsi32_si128(int a)
8160727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8170727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ a, 0, 0, 0 };
8180727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8190727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8200727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
8210727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_cvtsi64_si128(long long a)
8220727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8230727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ a, 0 };
8240727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8250727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
8260727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8270727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_cvtsi128_si32(__m128i a)
8280727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8290727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __v4si b = (__v4si)a;
8300727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return b[0];
8310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8320727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8330727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
8340727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline long long __attribute__((__always_inline__)) _mm_cvtsi128_si64(__m128i a)
8350727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8360727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return a[0];
8370727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8380727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
8390727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8400727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_load_si128(__m128i const *p)
8410727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8420727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return *p;
8430727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8440727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8450727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_loadu_si128(__m128i const *p)
8460727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8470727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_loaddqu((char const *)p);
8480727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8490727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8500727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_loadl_epi64(__m128i const *p)
8510727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8520727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_loadlv4si((__v2si *)p);
8530727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8540727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8550727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set_epi64(__m64 q1, __m64 q0)
8560727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8570727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q0, (long long)q1 };
8580727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8590727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8600727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set_epi32(int i3, int i2, int i1, int i0)
8610727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8620727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i0, i1, i2, i3};
8630727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8640727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8650727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0)
8660727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8670727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
8680727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8690727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8700727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set_epi8(char b15, char b14, char b13, char b12, char b11, char b10, char b9, char b8, char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0)
8710727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8720727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
8730727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8740727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8750727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set1_epi64(__m64 q)
8760727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8770727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q, (long long)q };
8780727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8790727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8800727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set1_epi32(int i)
8810727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8820727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i, i, i, i };
8830727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8840727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8850727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set1_epi16(short w)
8860727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8870727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w, w, w, w, w, w, w, w };
8880727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8890727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8900727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_set1_epi8(char b)
8910727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8920727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b };
8930727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8940727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8950727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_setr_epi64(__m64 q0, __m64 q1)
8960727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8970727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q0, (long long)q1 };
8980727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8990727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9000727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_setr_epi32(int i0, int i1, int i2, int i3)
9010727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9020727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i0, i1, i2, i3};
9030727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9040727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9050727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7)
9060727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9070727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
9080727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9090727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9100727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_setr_epi8(char b0, char b1, char b2, char b3, char b4, char b5, char b6, char b7, char b8, char b9, char b10, char b11, char b12, char b13, char b14, char b15)
9110727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9120727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
9130727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9140727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9150727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_setzero_si128(void)
9160727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9170727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ 0LL, 0LL };
9180727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9190727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9200727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_store_si128(__m128i *p, __m128i b)
9210727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9220727df0c4118755e3f8462f077091443389021b6Anders Carlsson  *p = b;
9230727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9240727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9250727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_storeu_si128(__m128i *p, __m128i b)
9260727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9270727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_storedqu((char *)p, (__v16qi)b);
9280727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9290727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9300727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_maskmoveu_si128(__m128i d, __m128i n, char *p)
9310727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9320727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_maskmovdqu((__v16qi)d, (__v16qi)n, p);
9330727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9340727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9350727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_storel_epi64(__m128i *p, __m128i a)
9360727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9370727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_storelv4si((__v2si *)p, a);
9380727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9390727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9400727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_stream_pd(double *p, __m128d a)
9410727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9420727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movntpd(p, a);
9430727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9440727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9450727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_stream_si128(__m128i *p, __m128i a)
9460727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9470727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movntdq(p, a);
9480727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9490727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9500727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_stream_si32(int *p, int a)
9510727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9520727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movnti(p, a);
9530727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9540727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9550727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_clflush(void const *p)
9560727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9570727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_clflush(p);
9580727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9590727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9600727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_lfence(void)
9610727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9620727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_lfence();
9630727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9640727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9650727df0c4118755e3f8462f077091443389021b6Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_mfence(void)
9660727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9670727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_mfence();
9680727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9690727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9704547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_packs_epi16(__m128i a, __m128i b)
9714547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
9724547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packsswb128((__v8hi)a, (__v8hi)b);
9734547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
9744547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
9754547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_packs_epi32(__m128i a, __m128i b)
9764547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
9774547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packssdw128((__v4si)a, (__v4si)b);
9784547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
9794547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
9804547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_packus_epi16(__m128i a, __m128i b)
9814547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
9824547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packuswb128((__v8hi)a, (__v8hi)b);
9834547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
9844547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
9854547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_extract_epi16(__m128i a, int imm)
9864547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
9874547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  __v8hi b = (__v8hi)a;
9884547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return b[imm];
9894547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
9904547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
9914547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_insert_epi16(__m128i a, int b, int imm)
9924547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
9934547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_vec_set_v8hi((__v8hi)a, b, imm);
9944547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
9954547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
9964547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_movemask_epi8(__m128i a)
9974547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
9984547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return __builtin_ia32_pmovmskb128((__v16qi)a);
9994547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10004547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
100192d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson#define _mm_shuffle_epi32(a, imm) ((__m128i)__builtin_ia32_pshufd((__v4si)(a), (imm)))
100292d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson#define _mm_shufflehi_epi16(a, imm) ((__m128i)__builtin_ia32_pshufhw((__v8hi)(a), (imm)))
100392d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson#define _mm_shufflelo_epi16(a, imm) ((__m128i)__builtin_ia32_pshuflw((__v8hi)(a), (imm)))
10044547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10054547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpackhi_epi8(__m128i a, __m128i b)
10064547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
100792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v16qi)a, (__v16qi)b, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15);
10084547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10094547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10104547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpackhi_epi16(__m128i a, __m128i b)
10114547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
101292d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v8hi)a, (__v8hi)b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7);
10134547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10144547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10154547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpackhi_epi32(__m128i a, __m128i b)
10164547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
101792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v4si)a, (__v4si)b, 2, 4+2, 3, 4+3);
10184547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10194547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10204547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpackhi_epi64(__m128i a, __m128i b)
10214547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
102292d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector(a, b, 1, 2+1);
10234547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10244547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10254547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpacklo_epi8(__m128i a, __m128i b)
10264547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
102792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v16qi)a, (__v16qi)b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7);
10284547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10294547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10304547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpacklo_epi16(__m128i a, __m128i b)
10314547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
103292d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v8hi)a, (__v8hi)b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3);
10334547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10344547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10354547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpacklo_epi32(__m128i a, __m128i b)
10364547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
103792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v4si)a, (__v4si)b, 0, 4+0, 1, 4+1);
10384547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10394547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10404547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_unpacklo_epi64(__m128i a, __m128i b)
10414547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
104292d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector(a, b, 0, 2+0);
10434547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10444547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10454547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m64 __attribute__((__always_inline__)) _mm_movepi64_pi64(__m128i a)
10464547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10474547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m64)a[0];
10484547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10494547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10504547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_movpi64_pi64(__m64 a)
10514547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10524547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i){ (long long)a, 0 };
10534547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10544547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10554547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_move_epi64(__m128i a)
10564547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10574547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i){ a[0], 0 };
10584547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10594547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10604547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_unpackhi_pd(__m128d a, __m128d b)
10614547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
106292d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return __builtin_shufflevector(a, b, 1, 2+1);
10634547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10644547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10654547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_unpacklo_pd(__m128d a, __m128d b)
10664547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
106792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return __builtin_shufflevector(a, b, 0, 2+0);
10684547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10694547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10704547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline int __attribute__((__always_inline__)) _mm_movemask_pd(__m128d a)
10714547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10724547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return __builtin_ia32_movmskpd(a);
10734547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10744547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10754547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson#define _mm_shuffle_pd(a, b, i) (__builtin_ia32_shufpd((a), (b), (i)))
10764547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10774547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128 __attribute__((__always_inline__)) _mm_castpd_ps(__m128d in)
10784547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10794547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128)in;
10804547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10814547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10824547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_castpd_si128(__m128d in)
10834547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10844547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)in;
10854547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10864547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10874547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_castps_pd(__m128 in)
10884547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10894547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128d)in;
10904547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10914547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10924547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128i __attribute__((__always_inline__)) _mm_castps_si128(__m128 in)
10934547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10944547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)in;
10954547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
10964547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
10974547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128 __attribute__((__always_inline__)) _mm_castsi128_ps(__m128i in)
10984547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
10994547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128)in;
11004547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
11014547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
11024547075dbb504de3fbae7cef669c773834ca1b40Anders Carlssonstatic inline __m128d __attribute__((__always_inline__)) _mm_castsi128_pd(__m128i in)
11034547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
11044547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128d)in;
11054547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
11064547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
1107f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlssonstatic inline void __attribute__((__always_inline__)) _mm_pause(void)
1108f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson{
1109f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson  asm("pause");
1110f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson}
1111f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson
1112f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson#define _MM_SHUFFLE(x, y) (((x) << 1) | (y))
1113f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson
111437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#endif /* __SSE2__ */
111537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
111637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#endif /* __EMMINTRIN_H */
1117