10930b6e6c819aa5c871c4cfb7f8f4bb5a15af5afBenjamin Kramer/*===---- emmintrin.h - SSE2 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 */
230930b6e6c819aa5c871c4cfb7f8f4bb5a15af5afBenjamin Kramer
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
36faf9404ae2001b949dd0b7ba9cd72a41d629a90bEric Christopher/* Type defines.  */
37faf9404ae2001b949dd0b7ba9cd72a41d629a90bEric Christophertypedef double __v2df __attribute__ ((__vector_size__ (16)));
38faf9404ae2001b949dd0b7ba9cd72a41d629a90bEric Christophertypedef long long __v2di __attribute__ ((__vector_size__ (16)));
3907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlssontypedef short __v8hi __attribute__((__vector_size__(16)));
404bf4e3034e23cc3c177b7c6dda39b28e689e7ed6Anders Carlssontypedef char __v16qi __attribute__((__vector_size__(16)));
4137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
421bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
43dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_sd(__m128d a, __m128d b)
4437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
4580c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] += b[0];
4680c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
4737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
4837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
491bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
50dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_pd(__m128d a, __m128d b)
5137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
5237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a + b;
5337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
5437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
551bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
56dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_sd(__m128d a, __m128d b)
5737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
5880c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] -= b[0];
5980c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
6037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
6137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
621bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
63dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_pd(__m128d a, __m128d b)
6437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
6537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a - b;
6637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
6737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
681bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
69dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mul_sd(__m128d a, __m128d b)
7037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
7180c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] *= b[0];
7280c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
7337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
7437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
751bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
76dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mul_pd(__m128d a, __m128d b)
7737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
7837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a * b;
7937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
8037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
811bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
82dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_div_sd(__m128d a, __m128d b)
8337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
8480c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] /= b[0];
8580c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
8637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
8737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
881bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
89dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_div_pd(__m128d a, __m128d b)
9037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
9137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a / b;
9237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
9337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
941bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
95dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sqrt_sd(__m128d a, __m128d b)
9637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
9737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  __m128d c = __builtin_ia32_sqrtsd(b);
9837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128d) { c[0], a[1] };
9937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
10037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1011bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
102dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sqrt_pd(__m128d a)
10337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
10437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_sqrtpd(a);
10537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
10637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1071bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
108dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_min_sd(__m128d a, __m128d b)
10937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
11037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_minsd(a, b);
11137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
11237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1131bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
114dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_min_pd(__m128d a, __m128d b)
11537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
11637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_minpd(a, b);
11737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
11837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1191bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
120dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_max_sd(__m128d a, __m128d b)
12137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
12237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_maxsd(a, b);
12337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
12437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1251bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
126dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_max_pd(__m128d a, __m128d b)
12737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
12837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_maxpd(a, b);
12937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
13037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1311bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
132dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_and_pd(__m128d a, __m128d b)
13337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
13417d2e3a7d15dc809a25896973d4aa2205e63c122Eli Friedman  return (__m128d)((__v4si)a & (__v4si)b);
13537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
13637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1371bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
138dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_andnot_pd(__m128d a, __m128d b)
13937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
14017d2e3a7d15dc809a25896973d4aa2205e63c122Eli Friedman  return (__m128d)(~(__v4si)a & (__v4si)b);
14137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
14237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1431bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
144dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_or_pd(__m128d a, __m128d b)
14537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
14617d2e3a7d15dc809a25896973d4aa2205e63c122Eli Friedman  return (__m128d)((__v4si)a | (__v4si)b);
14737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
14837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1491bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
150dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_xor_pd(__m128d a, __m128d b)
15137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
15217d2e3a7d15dc809a25896973d4aa2205e63c122Eli Friedman  return (__m128d)((__v4si)a ^ (__v4si)b);
15337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
15437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1551bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
156dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_pd(__m128d a, __m128d b)
15737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
15879dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 0);
15937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
16037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1611bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
162dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_pd(__m128d a, __m128d b)
16337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
16479dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 1);
16537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
16637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1671bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
168dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmple_pd(__m128d a, __m128d b)
16937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
17079dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 2);
17137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
17237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1731bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
174dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_pd(__m128d a, __m128d b)
17537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
17679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(b, a, 1);
17737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
17837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1791bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
180dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpge_pd(__m128d a, __m128d b)
18137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
18279dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(b, a, 2);
18337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
18437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1851bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
186dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpord_pd(__m128d a, __m128d b)
18737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
18879dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 7);
18937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
19037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1911bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
192dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpunord_pd(__m128d a, __m128d b)
19337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
19479dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 3);
19537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
19637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
1971bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
198dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpneq_pd(__m128d a, __m128d b)
19937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
20079dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 4);
20137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
20237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2031bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
204dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpnlt_pd(__m128d a, __m128d b)
20537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
20679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 5);
20737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
20837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2091bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
210dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpnle_pd(__m128d a, __m128d b)
21137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
21279dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(a, b, 6);
21337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
21437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2151bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
216dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpngt_pd(__m128d a, __m128d b)
21737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
21879dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(b, a, 5);
21937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
22037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2211bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
222dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpnge_pd(__m128d a, __m128d b)
22337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
22479dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmppd(b, a, 6);
22537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
22637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2271bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
228dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_sd(__m128d a, __m128d b)
22937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
23079dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 0);
23137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
23237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2331bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
234dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_sd(__m128d a, __m128d b)
23537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
23679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 1);
23737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
23837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2391bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
240dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmple_sd(__m128d a, __m128d b)
24137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
24279dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 2);
24337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
24437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2451bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
246dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_sd(__m128d a, __m128d b)
24737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
24879dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(b, a, 1);
24937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
25037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2511bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
252dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpge_sd(__m128d a, __m128d b)
25337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
25479dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(b, a, 2);
25537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
25637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2571bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
258dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpord_sd(__m128d a, __m128d b)
25937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
26079dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 7);
26137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
26237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2631bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
264dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpunord_sd(__m128d a, __m128d b)
26537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
26679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 3);
26737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
26837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2691bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
270dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpneq_sd(__m128d a, __m128d b)
27137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
27279dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 4);
27337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
27437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2751bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
276dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpnlt_sd(__m128d a, __m128d b)
27737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
27879dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 5);
27937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
28037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2811bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
282dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpnle_sd(__m128d a, __m128d b)
28337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
28479dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(a, b, 6);
28537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
28637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2871bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
288dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpngt_sd(__m128d a, __m128d b)
28937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
29079dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(b, a, 5);
29137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
29237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2931bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
294dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpnge_sd(__m128d a, __m128d b)
29537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
29679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  return (__m128d)__builtin_ia32_cmpsd(b, a, 6);
29737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
29837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
2991bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
300dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_comieq_sd(__m128d a, __m128d b)
30137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
30237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdeq(a, b);
30337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
30437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3051bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
306dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_comilt_sd(__m128d a, __m128d b)
30737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
30837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdlt(a, b);
30937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
31037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3111bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
312dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_comile_sd(__m128d a, __m128d b)
31337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
31437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdle(a, b);
31537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
31637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3171bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
318dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_comigt_sd(__m128d a, __m128d b)
31937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
32037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdgt(a, b);
32137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
32237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3231bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
3248052a4f1f62afb2a20fd453fa465fb4a11cfc5c6Eli Friedman_mm_comige_sd(__m128d a, __m128d b)
3258052a4f1f62afb2a20fd453fa465fb4a11cfc5c6Eli Friedman{
3268052a4f1f62afb2a20fd453fa465fb4a11cfc5c6Eli Friedman  return __builtin_ia32_comisdge(a, b);
3278052a4f1f62afb2a20fd453fa465fb4a11cfc5c6Eli Friedman}
3288052a4f1f62afb2a20fd453fa465fb4a11cfc5c6Eli Friedman
3298052a4f1f62afb2a20fd453fa465fb4a11cfc5c6Eli Friedmanstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
330dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_comineq_sd(__m128d a, __m128d b)
33137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
33237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_comisdneq(a, b);
33337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
33437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3351bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
336dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_ucomieq_sd(__m128d a, __m128d b)
33737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
33837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdeq(a, b);
33937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
34037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3411bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
342dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_ucomilt_sd(__m128d a, __m128d b)
34337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
34437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdlt(a, b);
34537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
34637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3471bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
348dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_ucomile_sd(__m128d a, __m128d b)
34937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
35037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdle(a, b);
35137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
35237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3531bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
354dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_ucomigt_sd(__m128d a, __m128d b)
35537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
35637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdgt(a, b);
35737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
35837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3591bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
360ef534ce30f70aa3bbedefc2a25a8e38110ae270dEli Friedman_mm_ucomige_sd(__m128d a, __m128d b)
361ef534ce30f70aa3bbedefc2a25a8e38110ae270dEli Friedman{
362ef534ce30f70aa3bbedefc2a25a8e38110ae270dEli Friedman  return __builtin_ia32_ucomisdge(a, b);
363ef534ce30f70aa3bbedefc2a25a8e38110ae270dEli Friedman}
364ef534ce30f70aa3bbedefc2a25a8e38110ae270dEli Friedman
365ef534ce30f70aa3bbedefc2a25a8e38110ae270dEli Friedmanstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
366dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_ucomineq_sd(__m128d a, __m128d b)
36737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
36837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_ucomisdneq(a, b);
36937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
37037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3711bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
372dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtpd_ps(__m128d a)
37337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
37437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtpd2ps(a);
37537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
37637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3771bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
378dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtps_pd(__m128 a)
37937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
38037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtps2pd(a);
38137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
38237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3831bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
384dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtepi32_pd(__m128i a)
38537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
38637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtdq2pd((__v4si)a);
38737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
38837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3891bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
390dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtpd_epi32(__m128d a)
39137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
39237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtpd2dq(a);
39337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
39437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
3951bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
396dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsd_si32(__m128d a)
39737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
39837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtsd2si(a);
39937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
40037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4011bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
402dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsd_ss(__m128 a, __m128d b)
40337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
40480c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] = b[0];
40580c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
40637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
40737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4081bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
409dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi32_sd(__m128d a, int b)
41037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
411098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman  a[0] = b;
412098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman  return a;
41337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
41437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4151bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
416dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtss_sd(__m128d a, __m128 b)
41737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
41880c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] = b[0];
41980c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
42037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
42137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4221bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
423dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttpd_epi32(__m128d a)
42437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
42537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m128i)__builtin_ia32_cvttpd2dq(a);
42637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
42737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4281bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
429dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttsd_si32(__m128d a)
43037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
43180c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a[0];
43237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
43337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
435dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtpd_pi32(__m128d a)
43637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
43737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m64)__builtin_ia32_cvtpd2pi(a);
43837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
43937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4401bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
441dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttpd_pi32(__m128d a)
44237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
44337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return (__m64)__builtin_ia32_cvttpd2pi(a);
44437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
44537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4461bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
447dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtpi32_pd(__m64 a)
44837f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
44937f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return __builtin_ia32_cvtpi2pd((__v2si)a);
45037f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
45137f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4521bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ double __attribute__((__always_inline__, __nodebug__))
453dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsd_f64(__m128d a)
45437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson{
45537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson  return a[0];
45637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson}
45737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
4581bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
459dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_load_pd(double const *dp)
460445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
461445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return *(__m128d*)dp;
462445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
463445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
4641bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
465dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_load1_pd(double const *dp)
466445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
4677c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_load1_pd_struct {
4687c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
4697c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
4707c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  double u = ((struct __mm_load1_pd_struct*)dp)->u;
4717c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return (__m128d){ u, u };
472445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
473445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
474db7351af8e9f9b46075e62137a29a84c666404b2Eli Friedman#define        _mm_load_pd1(dp)        _mm_load1_pd(dp)
475db7351af8e9f9b46075e62137a29a84c666404b2Eli Friedman
4761bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
477dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadr_pd(double const *dp)
478445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
4797c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  __m128d u = *(__m128d*)dp;
4807c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return __builtin_shufflevector(u, u, 1, 0);
481445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
482445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
4831bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
484dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadu_pd(double const *dp)
485445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
486eed92a18829575f316313659d6294fd2ef275838Bill Wendling  struct __loadu_pd {
487eed92a18829575f316313659d6294fd2ef275838Bill Wendling    __m128d v;
4888e3ec9caeb2653b676896ddf05cdf826edc2c3f1Bill Wendling  } __attribute__((packed, may_alias));
489eed92a18829575f316313659d6294fd2ef275838Bill Wendling  return ((struct __loadu_pd*)dp)->v;
490445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
491445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
4921bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
493dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_load_sd(double const *dp)
494445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
4957c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_load_sd_struct {
4967c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
4977c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
4987c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  double u = ((struct __mm_load_sd_struct*)dp)->u;
4997c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return (__m128d){ u, 0 };
500445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
501445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5021bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
503dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadh_pd(__m128d a, double const *dp)
504445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5057c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_loadh_pd_struct {
5067c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
5077c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
5087c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  double u = ((struct __mm_loadh_pd_struct*)dp)->u;
5097c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return (__m128d){ a[0], u };
510445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
511445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5121bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
513dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadl_pd(__m128d a, double const *dp)
514445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5157c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_loadl_pd_struct {
5167c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
5177c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
5187c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  double u = ((struct __mm_loadl_pd_struct*)dp)->u;
5197c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return (__m128d){ u, a[1] };
520445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
521445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5221bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
523dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_sd(double w)
524445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
525445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ w, 0 };
526445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
527445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5281bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
529dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_pd(double w)
530445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
531445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ w, w };
532445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
533445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
535dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_pd(double w, double x)
536445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5379436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson  return (__m128d){ x, w };
538445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
539445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5401bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
541dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_pd(double w, double x)
542445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5439436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson  return (__m128d){ w, x };
544445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
545445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5461bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
547dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setzero_pd(void)
548445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
549445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ 0, 0 };
550445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
551445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5521bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
553dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_move_sd(__m128d a, __m128d b)
554445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
555445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  return (__m128d){ b[0], a[1] };
556445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
557445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5581bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
559dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_store_sd(double *dp, __m128d a)
560445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5617c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_store_sd_struct {
5627c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
5637c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
5647c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  ((struct __mm_store_sd_struct*)dp)->u = a[0];
565445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
566445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5671bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
568dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_store1_pd(double *dp, __m128d a)
569445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5707c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_store1_pd_struct {
5717c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u[2];
5727c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
5737c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  ((struct __mm_store1_pd_struct*)dp)->u[0] = a[0];
5747c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  ((struct __mm_store1_pd_struct*)dp)->u[1] = a[0];
575445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
576445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5771bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
578dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_store_pd(double *dp, __m128d a)
579445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
580445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  *(__m128d *)dp = a;
581445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
582445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5831bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
584dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storeu_pd(double *dp, __m128d a)
585445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
586445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson  __builtin_ia32_storeupd(dp, a);
587445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
588445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5891bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
590dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storer_pd(double *dp, __m128d a)
591445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5927c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  a = __builtin_shufflevector(a, a, 1, 0);
5937c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  *(__m128d *)dp = a;
594445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
595445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
5961bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
597dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storeh_pd(double *dp, __m128d a)
598445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
5997c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_storeh_pd_struct {
6007c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
6017c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
6027c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  ((struct __mm_storeh_pd_struct*)dp)->u = a[1];
603445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
604445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
6051bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
606dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storel_pd(double *dp, __m128d a)
607445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson{
6087c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_storeh_pd_struct {
6097c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    double u;
6107c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
6117c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  ((struct __mm_storeh_pd_struct*)dp)->u = a[0];
612445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson}
613445afa04f5170292727b7601fb52c129420bc6a4Anders Carlsson
6141bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
615dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_epi8(__m128i a, __m128i b)
61607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
61707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v16qi)a + (__v16qi)b);
61807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
61907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6201bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
621dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_epi16(__m128i a, __m128i b)
62207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
62307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v8hi)a + (__v8hi)b);
62407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
62507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6261bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
627dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_epi32(__m128i a, __m128i b)
62807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
62907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v4si)a + (__v4si)b);
63007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
63107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6321bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
633dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_si64(__m64 a, __m64 b)
63407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
63507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a + b;
63607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
63707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6381bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
639dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_add_epi64(__m128i a, __m128i b)
64007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
64107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a + b;
64207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
64307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6441bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
645dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_adds_epi8(__m128i a, __m128i b)
64607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
64707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddsb128((__v16qi)a, (__v16qi)b);
64807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
64907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6501bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
651dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_adds_epi16(__m128i a, __m128i b)
65207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
65307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddsw128((__v8hi)a, (__v8hi)b);
65407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
65507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6561bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
657dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_adds_epu8(__m128i a, __m128i b)
65807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
65907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddusb128((__v16qi)a, (__v16qi)b);
66007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
66107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6621bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
663dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_adds_epu16(__m128i a, __m128i b)
66407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
66507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_paddusw128((__v8hi)a, (__v8hi)b);
66607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
66707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6681bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
669dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_avg_epu8(__m128i a, __m128i b)
67007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
67107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pavgb128((__v16qi)a, (__v16qi)b);
67207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
67307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6741bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
675dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_avg_epu16(__m128i a, __m128i b)
67607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
67707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pavgw128((__v8hi)a, (__v8hi)b);
67807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
67907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6801bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
681dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_madd_epi16(__m128i a, __m128i b)
68207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
68307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)a, (__v8hi)b);
68407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
68507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6861bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
687dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_max_epi16(__m128i a, __m128i b)
68807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
68907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)a, (__v8hi)b);
69007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
69107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6921bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
693dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_max_epu8(__m128i a, __m128i b)
69407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
69507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmaxub128((__v16qi)a, (__v16qi)b);
69607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
69707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
6981bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
699dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_min_epi16(__m128i a, __m128i b)
70007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
70107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pminsw128((__v8hi)a, (__v8hi)b);
70207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
70307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7041bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
705dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_min_epu8(__m128i a, __m128i b)
70607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
70707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pminub128((__v16qi)a, (__v16qi)b);
70807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
70907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7101bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
711dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mulhi_epi16(__m128i a, __m128i b)
71207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
71307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmulhw128((__v8hi)a, (__v8hi)b);
71407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
71507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7161bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
717dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mulhi_epu16(__m128i a, __m128i b)
71807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
71907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)a, (__v8hi)b);
72007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
72107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7221bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
723dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mullo_epi16(__m128i a, __m128i b)
72407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
725098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman  return (__m128i)((__v8hi)a * (__v8hi)b);
72607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
72707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7281bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
729dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mul_su32(__m64 a, __m64 b)
73007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
73107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return __builtin_ia32_pmuludq((__v2si)a, (__v2si)b);
73207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
73307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
735dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mul_epu32(__m128i a, __m128i b)
73607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
73707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return __builtin_ia32_pmuludq128((__v4si)a, (__v4si)b);
73807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
73907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7401bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
741ae8ecdd6dbaac2fc3e10f3146ec6bae28428cea3Anders Carlsson_mm_sad_epu8(__m128i a, __m128i b)
74207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
74307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return __builtin_ia32_psadbw128((__v16qi)a, (__v16qi)b);
74407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
74507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7461bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
747dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_epi8(__m128i a, __m128i b)
74807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
74907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v16qi)a - (__v16qi)b);
75007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
75107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7521bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
753dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_epi16(__m128i a, __m128i b)
75407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
75507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v8hi)a - (__v8hi)b);
75607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
75707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7581bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
759dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_epi32(__m128i a, __m128i b)
76007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
76107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)((__v4si)a - (__v4si)b);
76207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
76307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7641bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
765dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_si64(__m64 a, __m64 b)
76607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
76707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a - b;
76807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
76907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7701bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
771dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sub_epi64(__m128i a, __m128i b)
77207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
77307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return a - b;
77407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
77507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7761bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
777dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_subs_epi8(__m128i a, __m128i b)
77807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
77907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubsb128((__v16qi)a, (__v16qi)b);
78007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
78107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7821bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
783dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_subs_epi16(__m128i a, __m128i b)
78407603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
78507603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubsw128((__v8hi)a, (__v8hi)b);
78607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
78707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7881bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
789dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_subs_epu8(__m128i a, __m128i b)
79007603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
79107603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubusb128((__v16qi)a, (__v16qi)b);
79207603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
79307603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
7941bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
795dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_subs_epu16(__m128i a, __m128i b)
79607603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson{
79707603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson  return (__m128i)__builtin_ia32_psubusw128((__v8hi)a, (__v8hi)b);
79807603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson}
79907603aa9e57dc13889dd330cd29159003f1c45c3Anders Carlsson
8001bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
801dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_and_si128(__m128i a, __m128i b)
8020727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
80380c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a & b;
8040727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8050727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8061bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
807dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_andnot_si128(__m128i a, __m128i b)
8080727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
80980c800465865aa15ec4b094407170c149ce344cdEli Friedman  return ~a & b;
8100727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8110727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8121bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
813dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_or_si128(__m128i a, __m128i b)
8140727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
81580c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a | b;
8160727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8170727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8181bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
819dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_xor_si128(__m128i a, __m128i b)
8200727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
82180c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a ^ b;
8220727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8230727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8248a72034e41781e947fa16c42cce912e13868f912Chris Lattner#define _mm_slli_si128(VEC, IMM) \
825fcb0b2587ddd2e2250b2460e8dd942151380f359Chris Lattner  ((__m128i)__builtin_ia32_pslldqi128((__m128i)(VEC), (IMM)*8))
8260727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8271bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
828dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_slli_epi16(__m128i a, int count)
8290727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8300727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psllwi128((__v8hi)a, count);
8310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8320727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8331bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
834dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sll_epi16(__m128i a, __m128i count)
8350727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8360727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psllw128((__v8hi)a, (__v8hi)count);
8370727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8380727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8391bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
840dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_slli_epi32(__m128i a, int count)
8410727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8420727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pslldi128((__v4si)a, count);
8430727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8440727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8451bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
846dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sll_epi32(__m128i a, __m128i count)
8470727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8480727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pslld128((__v4si)a, (__v4si)count);
8490727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8500727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8511bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
852dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_slli_epi64(__m128i a, int count)
8530727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8540727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psllqi128(a, count);
8550727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8560727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8571bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
858dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sll_epi64(__m128i a, __m128i count)
8590727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8600727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psllq128(a, count);
8610727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8620727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8631bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
864dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srai_epi16(__m128i a, int count)
8650727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8660727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrawi128((__v8hi)a, count);
8670727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8680727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8691bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
870dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sra_epi16(__m128i a, __m128i count)
8710727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8720727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psraw128((__v8hi)a, (__v8hi)count);
8730727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8740727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8751bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
876dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srai_epi32(__m128i a, int count)
8770727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8780727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psradi128((__v4si)a, count);
8790727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8800727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8811bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
882dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sra_epi32(__m128i a, __m128i count)
8830727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8840727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrad128((__v4si)a, (__v4si)count);
8850727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8860727df0c4118755e3f8462f077091443389021b6Anders Carlsson
887fcb0b2587ddd2e2250b2460e8dd942151380f359Chris Lattner
888fcb0b2587ddd2e2250b2460e8dd942151380f359Chris Lattner#define _mm_srli_si128(VEC, IMM) \
889fcb0b2587ddd2e2250b2460e8dd942151380f359Chris Lattner  ((__m128i)__builtin_ia32_psrldqi128((__m128i)(VEC), (IMM)*8))
8900727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8911bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
892dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srli_epi16(__m128i a, int count)
8930727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8940727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrlwi128((__v8hi)a, count);
8950727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8960727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8971bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
898dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srl_epi16(__m128i a, __m128i count)
8990727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9000727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrlw128((__v8hi)a, (__v8hi)count);
9010727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9020727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9031bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
904dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srli_epi32(__m128i a, int count)
9050727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9060727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrldi128((__v4si)a, count);
9070727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9080727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9091bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
910dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srl_epi32(__m128i a, __m128i count)
9110727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9120727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrld128((__v4si)a, (__v4si)count);
9130727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9140727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9151bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
916dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srli_epi64(__m128i a, int count)
9170727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9180727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrlqi128(a, count);
9190727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9200727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9211bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
922dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srl_epi64(__m128i a, __m128i count)
9230727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9240727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrlq128(a, count);
9250727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9260727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9271bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
928dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_epi8(__m128i a, __m128i b)
9290727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9303a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v16qi)a == (__v16qi)b);
9310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9320727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9331bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
934dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_epi16(__m128i a, __m128i b)
9350727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9363a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v8hi)a == (__v8hi)b);
9370727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9380727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9391bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
940dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_epi32(__m128i a, __m128i b)
9410727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9423a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v4si)a == (__v4si)b);
9430727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9440727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9451bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
946dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_epi8(__m128i a, __m128i b)
9470727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9483a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v16qi)a > (__v16qi)b);
9490727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9500727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9511bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
952dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_epi16(__m128i a, __m128i b)
9530727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9543a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v8hi)a > (__v8hi)b);
9550727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9560727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9571bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
958dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_epi32(__m128i a, __m128i b)
9590727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9603a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v4si)a > (__v4si)b);
9610727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9620727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9631bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
964dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_epi8(__m128i a, __m128i b)
9650727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9663a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return _mm_cmpgt_epi8(b,a);
9670727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9680727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9691bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
970dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_epi16(__m128i a, __m128i b)
9710727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9723a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return _mm_cmpgt_epi16(b,a);
9730727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9740727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9751bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
976dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_epi32(__m128i a, __m128i b)
9770727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9783a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return _mm_cmpgt_epi32(b,a);
9790727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9800727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9810727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
9821bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
983dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi64_sd(__m128d a, long long b)
9840727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
98580c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] = b;
98680c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
9870727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9880727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9891bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ long long __attribute__((__always_inline__, __nodebug__))
990dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsd_si64(__m128d a)
9910727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9920727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtsd2si64(a);
9930727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9940727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9951bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ long long __attribute__((__always_inline__, __nodebug__))
996dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttsd_si64(__m128d a)
9970727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
99880c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a[0];
9990727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10000727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
10010727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10021bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
1003dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtepi32_ps(__m128i a)
10040727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10050727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtdq2ps((__v4si)a);
10060727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10070727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10081bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1009dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtps_epi32(__m128 a)
10100727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10110727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_cvtps2dq(a);
10120727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10130727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10141bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1015dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttps_epi32(__m128 a)
10160727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10170727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_cvttps2dq(a);
10180727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10190727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10201bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1021dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi32_si128(int a)
10220727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10230727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ a, 0, 0, 0 };
10240727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10250727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10260727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
10271bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1028dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi64_si128(long long a)
10290727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10300727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ a, 0 };
10310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10320727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
10330727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1035dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi128_si32(__m128i a)
10360727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10370727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __v4si b = (__v4si)a;
10380727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return b[0];
10390727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10400727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10410727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
10421bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ long long __attribute__((__always_inline__, __nodebug__))
1043dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi128_si64(__m128i a)
10440727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10450727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return a[0];
10460727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10470727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
10480727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10491bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1050dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_load_si128(__m128i const *p)
10510727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10520727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return *p;
10530727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10540727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10551bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1056dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadu_si128(__m128i const *p)
10570727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
1058eed92a18829575f316313659d6294fd2ef275838Bill Wendling  struct __loadu_si128 {
1059eed92a18829575f316313659d6294fd2ef275838Bill Wendling    __m128i v;
10608e3ec9caeb2653b676896ddf05cdf826edc2c3f1Bill Wendling  } __attribute__((packed, may_alias));
1061eed92a18829575f316313659d6294fd2ef275838Bill Wendling  return ((struct __loadu_si128*)p)->v;
10620727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10630727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10641bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1065dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadl_epi64(__m128i const *p)
10660727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10677c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_loadl_epi64_struct {
10687c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    long long u;
10697c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
10707c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return (__m128i) { ((struct __mm_loadl_epi64_struct*)p)->u, 0};
10710727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10720727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10731bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
10749436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson_mm_set_epi64x(long long q1, long long q0)
10759436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson{
10769436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson  return (__m128i){ q0, q1 };
10779436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson}
10789436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson
10791bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1080dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_epi64(__m64 q1, __m64 q0)
10810727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10820727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q0, (long long)q1 };
10830727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10840727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10851bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1086dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_epi32(int i3, int i2, int i1, int i0)
10870727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10880727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i0, i1, i2, i3};
10890727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10900727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10911bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1092dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0)
10930727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10940727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
10950727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10960727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10971bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1098dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_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)
10990727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11000727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
11010727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11020727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11031bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
11049436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson_mm_set1_epi64x(long long q)
11059436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson{
11069436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson  return (__m128i){ q, q };
11079436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson}
11089436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson
11091bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1110dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi64(__m64 q)
11110727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11120727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q, (long long)q };
11130727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11140727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11151bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1116dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi32(int i)
11170727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11180727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i, i, i, i };
11190727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11200727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11211bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1122dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi16(short w)
11230727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11240727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w, w, w, w, w, w, w, w };
11250727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11260727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11271bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1128dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi8(char b)
11290727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11300727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b };
11310727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11320727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11331bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1134dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_epi64(__m64 q0, __m64 q1)
11350727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11360727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q0, (long long)q1 };
11370727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11380727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11391bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1140dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_epi32(int i0, int i1, int i2, int i3)
11410727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11420727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i0, i1, i2, i3};
11430727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11440727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11451bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1146dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7)
11470727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11480727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
11490727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11500727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11511bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1152dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_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)
11530727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11540727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
11550727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11560727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11571bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1158dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setzero_si128(void)
11590727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11600727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ 0LL, 0LL };
11610727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11620727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11631bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1164dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_store_si128(__m128i *p, __m128i b)
11650727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11660727df0c4118755e3f8462f077091443389021b6Anders Carlsson  *p = b;
11670727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11680727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11691bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1170dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storeu_si128(__m128i *p, __m128i b)
11710727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11720727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_storedqu((char *)p, (__v16qi)b);
11730727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11740727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11751bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1176dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_maskmoveu_si128(__m128i d, __m128i n, char *p)
11770727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11780727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_maskmovdqu((__v16qi)d, (__v16qi)n, p);
11790727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11800727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11811bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1182dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storel_epi64(__m128i *p, __m128i a)
11830727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11840727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_storelv4si((__v2si *)p, a);
11850727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11860727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11871bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1188dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_stream_pd(double *p, __m128d a)
11890727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11900727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movntpd(p, a);
11910727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11920727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11931bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1194dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_stream_si128(__m128i *p, __m128i a)
11950727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11960727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movntdq(p, a);
11970727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11980727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11991bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1200dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_stream_si32(int *p, int a)
12010727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12020727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movnti(p, a);
12030727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12040727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12051bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1206dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_clflush(void const *p)
12070727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12080727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_clflush(p);
12090727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12100727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12111bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1212dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_lfence(void)
12130727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12140727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_lfence();
12150727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12160727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12171bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1218dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mfence(void)
12190727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12200727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_mfence();
12210727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12220727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12231bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1224dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_packs_epi16(__m128i a, __m128i b)
12254547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12264547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packsswb128((__v8hi)a, (__v8hi)b);
12274547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12284547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12291bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1230dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_packs_epi32(__m128i a, __m128i b)
12314547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12324547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packssdw128((__v4si)a, (__v4si)b);
12334547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12344547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12351bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1236dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_packus_epi16(__m128i a, __m128i b)
12374547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12384547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packuswb128((__v8hi)a, (__v8hi)b);
12394547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12404547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12411bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1242dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_extract_epi16(__m128i a, int imm)
12434547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12444547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  __v8hi b = (__v8hi)a;
1245d6b84b9455202c8a93a306c02770cdfecf13fda0Chris Lattner  return (unsigned short)b[imm];
12464547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12474547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12481bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1249dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_insert_epi16(__m128i a, int b, int imm)
12504547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
125180c800465865aa15ec4b094407170c149ce344cdEli Friedman  __v8hi c = (__v8hi)a;
125280c800465865aa15ec4b094407170c149ce344cdEli Friedman  c[imm & 7] = b;
125317d2e3a7d15dc809a25896973d4aa2205e63c122Eli Friedman  return (__m128i)c;
12544547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12554547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12561bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1257dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movemask_epi8(__m128i a)
12584547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12594547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return __builtin_ia32_pmovmskb128((__v16qi)a);
12604547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12614547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
1262098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman#define _mm_shuffle_epi32(a, imm) \
126385e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner  ((__m128i)__builtin_shufflevector((__v4si)(a), (__v4si) _mm_set1_epi32(0), \
1264098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman                                    (imm) & 0x3, ((imm) & 0xc) >> 2, \
1265098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman                                    ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6))
126685e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner
126785e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner
1268098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman#define _mm_shufflelo_epi16(a, imm) \
126985e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner  ((__m128i)__builtin_shufflevector((__v8hi)(a), (__v8hi) _mm_set1_epi16(0), \
1270098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman                                    (imm) & 0x3, ((imm) & 0xc) >> 2, \
1271098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman                                    ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \
1272098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman                                    4, 5, 6, 7))
1273098136a8cd0b1017187d65c89ffbee4c15c9a1faEli Friedman#define _mm_shufflehi_epi16(a, imm) \
127485e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner  ((__m128i)__builtin_shufflevector((__v8hi)(a), (__v8hi) _mm_set1_epi16(0), 0, 1, 2, 3, \
1275b085f79e4f8f34b73a524f1946b94f797b7358c7Eli Friedman                                    4 + (((imm) & 0x03) >> 0), \
1276b085f79e4f8f34b73a524f1946b94f797b7358c7Eli Friedman                                    4 + (((imm) & 0x0c) >> 2), \
1277b085f79e4f8f34b73a524f1946b94f797b7358c7Eli Friedman                                    4 + (((imm) & 0x30) >> 4), \
1278b085f79e4f8f34b73a524f1946b94f797b7358c7Eli Friedman                                    4 + (((imm) & 0xc0) >> 6)))
12794547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12801bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1281dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi8(__m128i a, __m128i b)
12824547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
128392d66868a1d446a3878cbb2373679c05cbc14045Anders 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);
12844547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12854547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12861bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1287dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi16(__m128i a, __m128i b)
12884547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
128992d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v8hi)a, (__v8hi)b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7);
12904547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12914547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12921bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1293dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi32(__m128i a, __m128i b)
12944547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
129592d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v4si)a, (__v4si)b, 2, 4+2, 3, 4+3);
12964547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12974547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12981bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1299dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi64(__m128i a, __m128i b)
13004547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
130192d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector(a, b, 1, 2+1);
13024547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13034547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13041bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1305dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi8(__m128i a, __m128i b)
13064547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
130792d66868a1d446a3878cbb2373679c05cbc14045Anders 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);
13084547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13094547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13101bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1311dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi16(__m128i a, __m128i b)
13124547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
131392d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v8hi)a, (__v8hi)b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3);
13144547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13154547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13161bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1317dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi32(__m128i a, __m128i b)
13184547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
131992d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v4si)a, (__v4si)b, 0, 4+0, 1, 4+1);
13204547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13214547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13221bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1323dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi64(__m128i a, __m128i b)
13244547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
132592d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector(a, b, 0, 2+0);
13264547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13274547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13281bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
1329dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movepi64_pi64(__m128i a)
13304547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13314547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m64)a[0];
13324547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13334547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1335dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movpi64_pi64(__m64 a)
13364547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13374547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i){ (long long)a, 0 };
13384547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13394547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13401bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1341dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_move_epi64(__m128i a)
13424547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
134380c800465865aa15ec4b094407170c149ce344cdEli Friedman  return __builtin_shufflevector(a, (__m128i){ 0 }, 0, 2);
13444547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13454547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13461bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1347dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_pd(__m128d a, __m128d b)
13484547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
134992d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return __builtin_shufflevector(a, b, 1, 2+1);
13504547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13514547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13521bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1353dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_pd(__m128d a, __m128d b)
13544547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
135592d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return __builtin_shufflevector(a, b, 0, 2+0);
13564547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13574547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13581bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1359dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movemask_pd(__m128d a)
13604547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13614547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return __builtin_ia32_movmskpd(a);
13624547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13634547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
1364eb941559a175a8f058f589ae4fa3a6b896133ca2Chris Lattner#define _mm_shuffle_pd(a, b, i) \
1365eb941559a175a8f058f589ae4fa3a6b896133ca2Chris Lattner  (__builtin_shufflevector((__m128d)(a), (__m128d)(b), (i) & 1, \
1366eb941559a175a8f058f589ae4fa3a6b896133ca2Chris Lattner                                                       (((i) & 2) >> 1) + 2))
13674547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13681bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
1369dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castpd_ps(__m128d in)
13704547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13714547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128)in;
13724547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13734547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13741bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1375dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castpd_si128(__m128d in)
13764547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13774547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)in;
13784547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13794547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13801bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1381dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castps_pd(__m128 in)
13824547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13834547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128d)in;
13844547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13854547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13861bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1387dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castps_si128(__m128 in)
13884547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13894547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)in;
13904547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13914547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13921bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
1393dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castsi128_ps(__m128i in)
13944547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13954547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128)in;
13964547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13974547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13981bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1399dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castsi128_pd(__m128i in)
14004547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
14014547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128d)in;
14024547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
14034547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
14041bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1405dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_pause(void)
1406f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson{
14074bcd44d3b38a9aece40142ea54c07288eb0517f6Anders Carlsson  __asm__ volatile ("pause");
1408f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson}
1409f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson
1410bbd1fa24fc939819079ca2c104b05dcfefe166b0Anders Carlsson#define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
1411f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson
141237f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#endif /* __SSE2__ */
141337f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
141437f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#endif /* __EMMINTRIN_H */
1415