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
82432bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson#define _mm_slli_si128(a, count) __extension__ ({ \
82532bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128i __a = (a); \
82632bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  (__m128i)__builtin_ia32_pslldqi128(__a, (count)*8); })
8270727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8281bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
829dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_slli_epi16(__m128i a, int count)
8300727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8310727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psllwi128((__v8hi)a, count);
8320727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8330727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
835dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sll_epi16(__m128i a, __m128i count)
8360727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8370727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psllw128((__v8hi)a, (__v8hi)count);
8380727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8390727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8401bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
841dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_slli_epi32(__m128i a, int count)
8420727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8430727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pslldi128((__v4si)a, count);
8440727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8450727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8461bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
847dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sll_epi32(__m128i a, __m128i count)
8480727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8490727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_pslld128((__v4si)a, (__v4si)count);
8500727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8510727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8521bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
853dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_slli_epi64(__m128i a, int count)
8540727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8550727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psllqi128(a, count);
8560727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8570727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8581bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
859dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sll_epi64(__m128i a, __m128i count)
8600727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8610727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psllq128(a, count);
8620727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8630727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8641bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
865dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srai_epi16(__m128i a, int count)
8660727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8670727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrawi128((__v8hi)a, count);
8680727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8690727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8701bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
871dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sra_epi16(__m128i a, __m128i count)
8720727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8730727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psraw128((__v8hi)a, (__v8hi)count);
8740727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8750727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8761bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
877dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srai_epi32(__m128i a, int count)
8780727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8790727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psradi128((__v4si)a, count);
8800727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8810727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8821bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
883dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_sra_epi32(__m128i a, __m128i count)
8840727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8850727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrad128((__v4si)a, (__v4si)count);
8860727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8870727df0c4118755e3f8462f077091443389021b6Anders Carlsson
888fcb0b2587ddd2e2250b2460e8dd942151380f359Chris Lattner
88932bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson#define _mm_srli_si128(a, count) __extension__ ({ \
89032bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128i __a = (a); \
89132bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  (__m128i)__builtin_ia32_psrldqi128(__a, (count)*8); })
8920727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8931bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
894dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srli_epi16(__m128i a, int count)
8950727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
8960727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrlwi128((__v8hi)a, count);
8970727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
8980727df0c4118755e3f8462f077091443389021b6Anders Carlsson
8991bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
900dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srl_epi16(__m128i a, __m128i count)
9010727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9020727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrlw128((__v8hi)a, (__v8hi)count);
9030727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9040727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9051bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
906dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srli_epi32(__m128i a, int count)
9070727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9080727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrldi128((__v4si)a, count);
9090727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9100727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9111bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
912dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srl_epi32(__m128i a, __m128i count)
9130727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9140727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_psrld128((__v4si)a, (__v4si)count);
9150727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9160727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9171bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
918dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srli_epi64(__m128i a, int count)
9190727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9200727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrlqi128(a, count);
9210727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9220727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9231bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
924dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_srl_epi64(__m128i a, __m128i count)
9250727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9260727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_psrlq128(a, count);
9270727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9280727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9291bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
930dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_epi8(__m128i a, __m128i b)
9310727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9323a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v16qi)a == (__v16qi)b);
9330727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9340727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9351bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
936dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_epi16(__m128i a, __m128i b)
9370727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9383a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v8hi)a == (__v8hi)b);
9390727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9400727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9411bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
942dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpeq_epi32(__m128i a, __m128i b)
9430727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9443a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v4si)a == (__v4si)b);
9450727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9460727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9471bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
948dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_epi8(__m128i a, __m128i b)
9490727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
950279114c861d8746cedd1b0a991c0412054bcd53eNick Lewycky  /* This function always performs a signed comparison, but __v16qi is a char
951279114c861d8746cedd1b0a991c0412054bcd53eNick Lewycky     which may be signed or unsigned. */
952f42f85ce6c2c1ddbe57535898dfbe3a37f7199afNick Lewycky  typedef signed char __v16qs __attribute__((__vector_size__(16)));
953f42f85ce6c2c1ddbe57535898dfbe3a37f7199afNick Lewycky  return (__m128i)((__v16qs)a > (__v16qs)b);
9540727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9550727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9561bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
957dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_epi16(__m128i a, __m128i b)
9580727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9593a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v8hi)a > (__v8hi)b);
9600727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9610727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9621bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
963dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmpgt_epi32(__m128i a, __m128i b)
9640727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9653a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return (__m128i)((__v4si)a > (__v4si)b);
9660727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9670727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9681bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
969dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_epi8(__m128i a, __m128i b)
9700727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9713a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return _mm_cmpgt_epi8(b,a);
9720727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9730727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9741bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
975dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_epi16(__m128i a, __m128i b)
9760727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9773a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return _mm_cmpgt_epi16(b,a);
9780727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9790727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9801bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
981dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cmplt_epi32(__m128i a, __m128i b)
9820727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9833a266f28ffb1a1710084a7eb86f140d445c77746Eli Friedman  return _mm_cmpgt_epi32(b,a);
9840727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9850727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9860727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
9871bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
988dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi64_sd(__m128d a, long long b)
9890727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
99080c800465865aa15ec4b094407170c149ce344cdEli Friedman  a[0] = b;
99180c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a;
9920727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9930727df0c4118755e3f8462f077091443389021b6Anders Carlsson
9941bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ long long __attribute__((__always_inline__, __nodebug__))
995dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsd_si64(__m128d a)
9960727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
9970727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtsd2si64(a);
9980727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
9990727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10001bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ long long __attribute__((__always_inline__, __nodebug__))
1001dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttsd_si64(__m128d a)
10020727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
100380c800465865aa15ec4b094407170c149ce344cdEli Friedman  return a[0];
10040727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10050727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
10060727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10071bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
1008dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtepi32_ps(__m128i a)
10090727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10100727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return __builtin_ia32_cvtdq2ps((__v4si)a);
10110727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10120727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10131bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1014dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtps_epi32(__m128 a)
10150727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10160727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_cvtps2dq(a);
10170727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10180727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10191bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1020dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvttps_epi32(__m128 a)
10210727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10220727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)__builtin_ia32_cvttps2dq(a);
10230727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10240727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10251bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1026dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi32_si128(int a)
10270727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10280727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ a, 0, 0, 0 };
10290727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10300727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10310727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
10321bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1033dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi64_si128(long long a)
10340727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10350727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ a, 0 };
10360727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10370727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
10380727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10391bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1040dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi128_si32(__m128i a)
10410727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10420727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __v4si b = (__v4si)a;
10430727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return b[0];
10440727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10450727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10460727df0c4118755e3f8462f077091443389021b6Anders Carlsson#ifdef __x86_64__
10471bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ long long __attribute__((__always_inline__, __nodebug__))
1048dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_cvtsi128_si64(__m128i a)
10490727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10500727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return a[0];
10510727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10520727df0c4118755e3f8462f077091443389021b6Anders Carlsson#endif
10530727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10541bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1055dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_load_si128(__m128i const *p)
10560727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10570727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return *p;
10580727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10590727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10601bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1061dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadu_si128(__m128i const *p)
10620727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
1063eed92a18829575f316313659d6294fd2ef275838Bill Wendling  struct __loadu_si128 {
1064eed92a18829575f316313659d6294fd2ef275838Bill Wendling    __m128i v;
10658e3ec9caeb2653b676896ddf05cdf826edc2c3f1Bill Wendling  } __attribute__((packed, may_alias));
1066eed92a18829575f316313659d6294fd2ef275838Bill Wendling  return ((struct __loadu_si128*)p)->v;
10670727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10680727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10691bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1070dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_loadl_epi64(__m128i const *p)
10710727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10727c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  struct __mm_loadl_epi64_struct {
10737c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman    long long u;
10747c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  } __attribute__((__packed__, __may_alias__));
10757c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return (__m128i) { ((struct __mm_loadl_epi64_struct*)p)->u, 0};
10760727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10770727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10781bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
10799436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson_mm_set_epi64x(long long q1, long long q0)
10809436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson{
10819436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson  return (__m128i){ q0, q1 };
10829436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson}
10839436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson
10841bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1085dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_epi64(__m64 q1, __m64 q0)
10860727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10870727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q0, (long long)q1 };
10880727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10890727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10901bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1091dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_epi32(int i3, int i2, int i1, int i0)
10920727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10930727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i0, i1, i2, i3};
10940727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
10950727df0c4118755e3f8462f077091443389021b6Anders Carlsson
10961bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1097dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0)
10980727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
10990727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
11000727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11010727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11021bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1103dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike 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)
11040727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11050727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
11060727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11070727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11081bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
11099436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson_mm_set1_epi64x(long long q)
11109436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson{
11119436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson  return (__m128i){ q, q };
11129436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson}
11139436ed50b0923368d5ae7a97f1b67c56b6837430Anders Carlsson
11141bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1115dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi64(__m64 q)
11160727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11170727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q, (long long)q };
11180727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11190727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11201bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1121dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi32(int i)
11220727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11230727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i, i, i, i };
11240727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11250727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11261bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1127dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi16(short w)
11280727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11290727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w, w, w, w, w, w, w, w };
11300727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11310727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11321bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1133dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_set1_epi8(char b)
11340727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11350727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b };
11360727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11370727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11381bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1139dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_epi64(__m64 q0, __m64 q1)
11400727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11410727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ (long long)q0, (long long)q1 };
11420727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11430727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11441bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1145dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_epi32(int i0, int i1, int i2, int i3)
11460727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11470727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v4si){ i0, i1, i2, i3};
11480727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11490727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11501bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1151dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7)
11520727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11530727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
11540727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11550727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11561bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1157dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike 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)
11580727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11590727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
11600727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11610727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11621bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1163dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_setzero_si128(void)
11640727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11650727df0c4118755e3f8462f077091443389021b6Anders Carlsson  return (__m128i){ 0LL, 0LL };
11660727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11670727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11681bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1169dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_store_si128(__m128i *p, __m128i b)
11700727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11710727df0c4118755e3f8462f077091443389021b6Anders Carlsson  *p = b;
11720727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11730727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11741bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1175dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storeu_si128(__m128i *p, __m128i b)
11760727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11770727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_storedqu((char *)p, (__v16qi)b);
11780727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11790727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11801bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1181dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_maskmoveu_si128(__m128i d, __m128i n, char *p)
11820727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11830727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_maskmovdqu((__v16qi)d, (__v16qi)n, p);
11840727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11850727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11861bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1187dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_storel_epi64(__m128i *p, __m128i a)
11880727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
1189c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier  struct __mm_storel_epi64_struct {
1190c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier    long long u;
1191c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier  } __attribute__((__packed__, __may_alias__));
1192c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier  ((struct __mm_storel_epi64_struct*)p)->u = a[0];
11930727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
11940727df0c4118755e3f8462f077091443389021b6Anders Carlsson
11951bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1196dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_stream_pd(double *p, __m128d a)
11970727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
11980727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movntpd(p, a);
11990727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12000727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12011bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1202dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_stream_si128(__m128i *p, __m128i a)
12030727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12040727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movntdq(p, a);
12050727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12060727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12071bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1208dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_stream_si32(int *p, int a)
12090727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12100727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_movnti(p, a);
12110727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12120727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12131bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1214dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_clflush(void const *p)
12150727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12160727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_clflush(p);
12170727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12180727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12191bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1220dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_lfence(void)
12210727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12220727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_lfence();
12230727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12240727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12251bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1226dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_mfence(void)
12270727df0c4118755e3f8462f077091443389021b6Anders Carlsson{
12280727df0c4118755e3f8462f077091443389021b6Anders Carlsson  __builtin_ia32_mfence();
12290727df0c4118755e3f8462f077091443389021b6Anders Carlsson}
12300727df0c4118755e3f8462f077091443389021b6Anders Carlsson
12311bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1232dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_packs_epi16(__m128i a, __m128i b)
12334547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12344547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packsswb128((__v8hi)a, (__v8hi)b);
12354547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12364547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12371bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1238dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_packs_epi32(__m128i a, __m128i b)
12394547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12404547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packssdw128((__v4si)a, (__v4si)b);
12414547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12424547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12431bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1244dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_packus_epi16(__m128i a, __m128i b)
12454547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12464547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)__builtin_ia32_packuswb128((__v8hi)a, (__v8hi)b);
12474547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12484547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12491bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1250dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_extract_epi16(__m128i a, int imm)
12514547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12524547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  __v8hi b = (__v8hi)a;
1253d6b84b9455202c8a93a306c02770cdfecf13fda0Chris Lattner  return (unsigned short)b[imm];
12544547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12554547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12561bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1257dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_insert_epi16(__m128i a, int b, int imm)
12584547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
125980c800465865aa15ec4b094407170c149ce344cdEli Friedman  __v8hi c = (__v8hi)a;
126080c800465865aa15ec4b094407170c149ce344cdEli Friedman  c[imm & 7] = b;
126117d2e3a7d15dc809a25896973d4aa2205e63c122Eli Friedman  return (__m128i)c;
12624547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12634547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12641bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1265dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movemask_epi8(__m128i a)
12664547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
12674547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return __builtin_ia32_pmovmskb128((__v16qi)a);
12684547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12694547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
127032bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson#define _mm_shuffle_epi32(a, imm) __extension__ ({ \
127132bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128i __a = (a); \
127232bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si) _mm_set1_epi32(0), \
127332bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   (imm) & 0x3, ((imm) & 0xc) >> 2, \
127432bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); })
127585e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner
127632bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson#define _mm_shufflelo_epi16(a, imm) __extension__ ({ \
127732bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128i __a = (a); \
127832bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \
127932bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   (imm) & 0x3, ((imm) & 0xc) >> 2, \
128032bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \
128132bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   4, 5, 6, 7); })
128285e59d79e3033510d615625d1da421ac4fe7f38fChris Lattner
128332bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson#define _mm_shufflehi_epi16(a, imm) __extension__ ({ \
128432bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128i __a = (a); \
128532bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \
128632bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   0, 1, 2, 3, \
128732bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   4 + (((imm) & 0x03) >> 0), \
128832bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   4 + (((imm) & 0x0c) >> 2), \
128932bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   4 + (((imm) & 0x30) >> 4), \
129032bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson                                   4 + (((imm) & 0xc0) >> 6)); })
12914547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12921bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1293dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi8(__m128i a, __m128i b)
12944547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
129592d66868a1d446a3878cbb2373679c05cbc14045Anders 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);
12964547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
12974547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
12981bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1299dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi16(__m128i a, __m128i b)
13004547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
130192d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v8hi)a, (__v8hi)b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7);
13024547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13034547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13041bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1305dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi32(__m128i a, __m128i b)
13064547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
130792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v4si)a, (__v4si)b, 2, 4+2, 3, 4+3);
13084547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13094547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13101bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1311dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_epi64(__m128i a, __m128i b)
13124547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
131392d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector(a, b, 1, 2+1);
13144547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13154547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13161bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1317dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi8(__m128i a, __m128i b)
13184547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
131992d66868a1d446a3878cbb2373679c05cbc14045Anders 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);
13204547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13214547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13221bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1323dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi16(__m128i a, __m128i b)
13244547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
132592d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v8hi)a, (__v8hi)b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3);
13264547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13274547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13281bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1329dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi32(__m128i a, __m128i b)
13304547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
133192d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector((__v4si)a, (__v4si)b, 0, 4+0, 1, 4+1);
13324547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13334547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13341bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1335dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_epi64(__m128i a, __m128i b)
13364547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
133792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return (__m128i)__builtin_shufflevector(a, b, 0, 2+0);
13384547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13394547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13401bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
1341dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movepi64_pi64(__m128i a)
13424547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13434547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m64)a[0];
13444547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13454547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13461bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1347dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movpi64_pi64(__m64 a)
13484547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13494547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i){ (long long)a, 0 };
13504547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13514547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13521bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1353dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_move_epi64(__m128i a)
13544547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
135580c800465865aa15ec4b094407170c149ce344cdEli Friedman  return __builtin_shufflevector(a, (__m128i){ 0 }, 0, 2);
13564547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13574547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13581bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1359dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpackhi_pd(__m128d a, __m128d b)
13604547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
136192d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return __builtin_shufflevector(a, b, 1, 2+1);
13624547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13634547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13641bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1365dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_unpacklo_pd(__m128d a, __m128d b)
13664547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
136792d66868a1d446a3878cbb2373679c05cbc14045Anders Carlsson  return __builtin_shufflevector(a, b, 0, 2+0);
13684547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13694547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13701bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
1371dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_movemask_pd(__m128d a)
13724547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13734547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return __builtin_ia32_movmskpd(a);
13744547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13754547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
137632bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson#define _mm_shuffle_pd(a, b, i) __extension__ ({ \
137732bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128d __a = (a); \
137832bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __m128d __b = (b); \
137932bae37b821e6ade738849ac14e3d3de06afb0beBob Wilson  __builtin_shufflevector(__a, __b, (i) & 1, (((i) & 2) >> 1) + 2); })
13804547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13811bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
1382dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castpd_ps(__m128d in)
13834547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13844547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128)in;
13854547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13864547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13871bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1388dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castpd_si128(__m128d in)
13894547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13904547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)in;
13914547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13924547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13931bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1394dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castps_pd(__m128 in)
13954547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
13964547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128d)in;
13974547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
13984547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
13991bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
1400dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castps_si128(__m128 in)
14014547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
14024547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128i)in;
14034547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
14044547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
14051bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
1406dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castsi128_ps(__m128i in)
14074547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
14084547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128)in;
14094547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
14104547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
14111bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
1412dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_castsi128_pd(__m128i in)
14134547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson{
14144547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson  return (__m128d)in;
14154547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson}
14164547075dbb504de3fbae7cef669c773834ca1b40Anders Carlsson
14171bddbcbd11de09c7bcb48c3d661c447967db73a7Chris Lattnerstatic __inline__ void __attribute__((__always_inline__, __nodebug__))
1418dae4413d77b3e7599ce81307eb7a7d1dedbac547Mike Stump_mm_pause(void)
1419f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson{
14204bcd44d3b38a9aece40142ea54c07288eb0517f6Anders Carlsson  __asm__ volatile ("pause");
1421f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson}
1422f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson
1423bbd1fa24fc939819079ca2c104b05dcfefe166b0Anders Carlsson#define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
1424f1bc66008eb2d9d4b63706b384132e8148110951Anders Carlsson
142537f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#endif /* __SSE2__ */
142637f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson
142737f2f00d71ce8c0416d90ba8ddc7d5ac38ff241fAnders Carlsson#endif /* __EMMINTRIN_H */
1428