Benjamin Kramer | ae8ea1f | 2010-08-20 16:47:17 +0000 | [diff] [blame] | 1 | /*===---- emmintrin.h - SSE2 intrinsics ------------------------------------=== |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 2 | * |
| 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
| 4 | * of this software and associated documentation files (the "Software"), to deal |
| 5 | * in the Software without restriction, including without limitation the rights |
| 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| 7 | * copies of the Software, and to permit persons to whom the Software is |
| 8 | * furnished to do so, subject to the following conditions: |
| 9 | * |
| 10 | * The above copyright notice and this permission notice shall be included in |
| 11 | * all copies or substantial portions of the Software. |
| 12 | * |
| 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| 19 | * THE SOFTWARE. |
| 20 | * |
| 21 | *===-----------------------------------------------------------------------=== |
| 22 | */ |
Benjamin Kramer | ae8ea1f | 2010-08-20 16:47:17 +0000 | [diff] [blame] | 23 | |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 24 | #ifndef __EMMINTRIN_H |
| 25 | #define __EMMINTRIN_H |
| 26 | |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 27 | #include <xmmintrin.h> |
| 28 | |
| 29 | typedef double __m128d __attribute__((__vector_size__(16))); |
| 30 | typedef long long __m128i __attribute__((__vector_size__(16))); |
| 31 | |
Eric Christopher | 2a9898f | 2010-08-26 02:09:25 +0000 | [diff] [blame] | 32 | /* Type defines. */ |
| 33 | typedef double __v2df __attribute__ ((__vector_size__ (16))); |
| 34 | typedef long long __v2di __attribute__ ((__vector_size__ (16))); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 35 | typedef short __v8hi __attribute__((__vector_size__(16))); |
Anders Carlsson | 327c8df | 2009-09-18 19:18:19 +0000 | [diff] [blame] | 36 | typedef char __v16qi __attribute__((__vector_size__(16))); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 37 | |
Eric Christopher | 4d185168 | 2015-06-17 07:09:20 +0000 | [diff] [blame] | 38 | /* Define the default attributes for the functions in this file. */ |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 39 | #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse2"))) |
Eric Christopher | 4d185168 | 2015-06-17 07:09:20 +0000 | [diff] [blame] | 40 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 41 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 42 | _mm_add_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 43 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 44 | __a[0] += __b[0]; |
| 45 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 46 | } |
| 47 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 48 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 49 | _mm_add_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 50 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 51 | return __a + __b; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 52 | } |
| 53 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 54 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 55 | _mm_sub_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 56 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 57 | __a[0] -= __b[0]; |
| 58 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 59 | } |
| 60 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 61 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 62 | _mm_sub_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 63 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 64 | return __a - __b; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 65 | } |
| 66 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 67 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 68 | _mm_mul_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 69 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 70 | __a[0] *= __b[0]; |
| 71 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 72 | } |
| 73 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 74 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 75 | _mm_mul_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 76 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 77 | return __a * __b; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 78 | } |
| 79 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 80 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 81 | _mm_div_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 82 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 83 | __a[0] /= __b[0]; |
| 84 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 85 | } |
| 86 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 87 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 88 | _mm_div_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 89 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 90 | return __a / __b; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 91 | } |
| 92 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 93 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 94 | _mm_sqrt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 95 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 96 | __m128d __c = __builtin_ia32_sqrtsd(__b); |
| 97 | return (__m128d) { __c[0], __a[1] }; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 98 | } |
| 99 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 100 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 101 | _mm_sqrt_pd(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 102 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 103 | return __builtin_ia32_sqrtpd(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 104 | } |
| 105 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 106 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 107 | _mm_min_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 108 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 109 | return __builtin_ia32_minsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 110 | } |
| 111 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 112 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 113 | _mm_min_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 114 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 115 | return __builtin_ia32_minpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 116 | } |
| 117 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 118 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 119 | _mm_max_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 120 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 121 | return __builtin_ia32_maxsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 122 | } |
| 123 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 124 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 125 | _mm_max_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 126 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 127 | return __builtin_ia32_maxpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 128 | } |
| 129 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 130 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 131 | _mm_and_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 132 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 133 | return (__m128d)((__v4si)__a & (__v4si)__b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 134 | } |
| 135 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 136 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 137 | _mm_andnot_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 138 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 139 | return (__m128d)(~(__v4si)__a & (__v4si)__b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 140 | } |
| 141 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 142 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 143 | _mm_or_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 144 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 145 | return (__m128d)((__v4si)__a | (__v4si)__b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 146 | } |
| 147 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 148 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 149 | _mm_xor_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 150 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 151 | return (__m128d)((__v4si)__a ^ (__v4si)__b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 152 | } |
| 153 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 154 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 155 | _mm_cmpeq_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 156 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 157 | return (__m128d)__builtin_ia32_cmpeqpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 158 | } |
| 159 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 160 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 161 | _mm_cmplt_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 162 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 163 | return (__m128d)__builtin_ia32_cmpltpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 164 | } |
| 165 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 166 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 167 | _mm_cmple_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 168 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 169 | return (__m128d)__builtin_ia32_cmplepd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 170 | } |
| 171 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 172 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 173 | _mm_cmpgt_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 174 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 175 | return (__m128d)__builtin_ia32_cmpltpd(__b, __a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 176 | } |
| 177 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 178 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 179 | _mm_cmpge_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 180 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 181 | return (__m128d)__builtin_ia32_cmplepd(__b, __a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 182 | } |
| 183 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 184 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 185 | _mm_cmpord_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 186 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 187 | return (__m128d)__builtin_ia32_cmpordpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 188 | } |
| 189 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 190 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 191 | _mm_cmpunord_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 192 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 193 | return (__m128d)__builtin_ia32_cmpunordpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 194 | } |
| 195 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 196 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 197 | _mm_cmpneq_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 198 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 199 | return (__m128d)__builtin_ia32_cmpneqpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 200 | } |
| 201 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 202 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 203 | _mm_cmpnlt_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 204 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 205 | return (__m128d)__builtin_ia32_cmpnltpd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 206 | } |
| 207 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 208 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 209 | _mm_cmpnle_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 210 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 211 | return (__m128d)__builtin_ia32_cmpnlepd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 212 | } |
| 213 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 214 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 215 | _mm_cmpngt_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 216 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 217 | return (__m128d)__builtin_ia32_cmpnltpd(__b, __a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 218 | } |
| 219 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 220 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 221 | _mm_cmpnge_pd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 222 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 223 | return (__m128d)__builtin_ia32_cmpnlepd(__b, __a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 224 | } |
| 225 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 226 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 227 | _mm_cmpeq_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 228 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 229 | return (__m128d)__builtin_ia32_cmpeqsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 230 | } |
| 231 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 232 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 233 | _mm_cmplt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 234 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 235 | return (__m128d)__builtin_ia32_cmpltsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 236 | } |
| 237 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 238 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 239 | _mm_cmple_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 240 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 241 | return (__m128d)__builtin_ia32_cmplesd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 242 | } |
| 243 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 244 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 245 | _mm_cmpgt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 246 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 247 | __m128d __c = __builtin_ia32_cmpltsd(__b, __a); |
Manman Ren | 9bb34d6 | 2013-06-17 19:42:49 +0000 | [diff] [blame] | 248 | return (__m128d) { __c[0], __a[1] }; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 249 | } |
| 250 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 251 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 252 | _mm_cmpge_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 253 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 254 | __m128d __c = __builtin_ia32_cmplesd(__b, __a); |
Manman Ren | 9bb34d6 | 2013-06-17 19:42:49 +0000 | [diff] [blame] | 255 | return (__m128d) { __c[0], __a[1] }; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 256 | } |
| 257 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 258 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 259 | _mm_cmpord_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 260 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 261 | return (__m128d)__builtin_ia32_cmpordsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 262 | } |
| 263 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 264 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 265 | _mm_cmpunord_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 266 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 267 | return (__m128d)__builtin_ia32_cmpunordsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 268 | } |
| 269 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 270 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 271 | _mm_cmpneq_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 272 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 273 | return (__m128d)__builtin_ia32_cmpneqsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 274 | } |
| 275 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 276 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 277 | _mm_cmpnlt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 278 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 279 | return (__m128d)__builtin_ia32_cmpnltsd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 280 | } |
| 281 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 282 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 283 | _mm_cmpnle_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 284 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 285 | return (__m128d)__builtin_ia32_cmpnlesd(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 286 | } |
| 287 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 288 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 289 | _mm_cmpngt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 290 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 291 | __m128d __c = __builtin_ia32_cmpnltsd(__b, __a); |
Manman Ren | 9bb34d6 | 2013-06-17 19:42:49 +0000 | [diff] [blame] | 292 | return (__m128d) { __c[0], __a[1] }; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 293 | } |
| 294 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 295 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 296 | _mm_cmpnge_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 297 | { |
Craig Topper | 2094d8f | 2014-12-27 06:59:57 +0000 | [diff] [blame] | 298 | __m128d __c = __builtin_ia32_cmpnlesd(__b, __a); |
Manman Ren | 9bb34d6 | 2013-06-17 19:42:49 +0000 | [diff] [blame] | 299 | return (__m128d) { __c[0], __a[1] }; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 300 | } |
| 301 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 302 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 303 | _mm_comieq_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 304 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 305 | return __builtin_ia32_comisdeq(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 306 | } |
| 307 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 308 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 309 | _mm_comilt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 310 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 311 | return __builtin_ia32_comisdlt(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 312 | } |
| 313 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 314 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 315 | _mm_comile_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 316 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 317 | return __builtin_ia32_comisdle(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 318 | } |
| 319 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 320 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 321 | _mm_comigt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 322 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 323 | return __builtin_ia32_comisdgt(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 324 | } |
| 325 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 326 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 327 | _mm_comige_sd(__m128d __a, __m128d __b) |
Eli Friedman | 89c1133 | 2011-10-06 20:31:50 +0000 | [diff] [blame] | 328 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 329 | return __builtin_ia32_comisdge(__a, __b); |
Eli Friedman | 89c1133 | 2011-10-06 20:31:50 +0000 | [diff] [blame] | 330 | } |
| 331 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 332 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 333 | _mm_comineq_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 334 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 335 | return __builtin_ia32_comisdneq(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 336 | } |
| 337 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 338 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 339 | _mm_ucomieq_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 340 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 341 | return __builtin_ia32_ucomisdeq(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 342 | } |
| 343 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 344 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 345 | _mm_ucomilt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 346 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 347 | return __builtin_ia32_ucomisdlt(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 348 | } |
| 349 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 350 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 351 | _mm_ucomile_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 352 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 353 | return __builtin_ia32_ucomisdle(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 354 | } |
| 355 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 356 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 357 | _mm_ucomigt_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 358 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 359 | return __builtin_ia32_ucomisdgt(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 360 | } |
| 361 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 362 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 363 | _mm_ucomige_sd(__m128d __a, __m128d __b) |
Eli Friedman | f8cb480 | 2011-08-29 21:26:24 +0000 | [diff] [blame] | 364 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 365 | return __builtin_ia32_ucomisdge(__a, __b); |
Eli Friedman | f8cb480 | 2011-08-29 21:26:24 +0000 | [diff] [blame] | 366 | } |
| 367 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 368 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 369 | _mm_ucomineq_sd(__m128d __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 370 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 371 | return __builtin_ia32_ucomisdneq(__a, __b); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 372 | } |
| 373 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 374 | static __inline__ __m128 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 375 | _mm_cvtpd_ps(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 376 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 377 | return __builtin_ia32_cvtpd2ps(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 378 | } |
| 379 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 380 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 381 | _mm_cvtps_pd(__m128 __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 382 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 383 | return __builtin_ia32_cvtps2pd(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 384 | } |
| 385 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 386 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 387 | _mm_cvtepi32_pd(__m128i __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 388 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 389 | return __builtin_ia32_cvtdq2pd((__v4si)__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 390 | } |
| 391 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 392 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 393 | _mm_cvtpd_epi32(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 394 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 395 | return __builtin_ia32_cvtpd2dq(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 396 | } |
| 397 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 398 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 399 | _mm_cvtsd_si32(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 400 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 401 | return __builtin_ia32_cvtsd2si(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 402 | } |
| 403 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 404 | static __inline__ __m128 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 405 | _mm_cvtsd_ss(__m128 __a, __m128d __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 406 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 407 | __a[0] = __b[0]; |
| 408 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 409 | } |
| 410 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 411 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 412 | _mm_cvtsi32_sd(__m128d __a, int __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 413 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 414 | __a[0] = __b; |
| 415 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 416 | } |
| 417 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 418 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 419 | _mm_cvtss_sd(__m128d __a, __m128 __b) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 420 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 421 | __a[0] = __b[0]; |
| 422 | return __a; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 423 | } |
| 424 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 425 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 426 | _mm_cvttpd_epi32(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 427 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 428 | return (__m128i)__builtin_ia32_cvttpd2dq(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 429 | } |
| 430 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 431 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 432 | _mm_cvttsd_si32(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 433 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 434 | return __a[0]; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 435 | } |
| 436 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 437 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 438 | _mm_cvtpd_pi32(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 439 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 440 | return (__m64)__builtin_ia32_cvtpd2pi(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 441 | } |
| 442 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 443 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 444 | _mm_cvttpd_pi32(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 445 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 446 | return (__m64)__builtin_ia32_cvttpd2pi(__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 447 | } |
| 448 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 449 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 450 | _mm_cvtpi32_pd(__m64 __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 451 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 452 | return __builtin_ia32_cvtpi2pd((__v2si)__a); |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 453 | } |
| 454 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 455 | static __inline__ double __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 456 | _mm_cvtsd_f64(__m128d __a) |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 457 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 458 | return __a[0]; |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 459 | } |
| 460 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 461 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 462 | _mm_load_pd(double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 463 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 464 | return *(__m128d*)__dp; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 465 | } |
| 466 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 467 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 468 | _mm_load1_pd(double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 469 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 470 | struct __mm_load1_pd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 471 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 472 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 473 | double __u = ((struct __mm_load1_pd_struct*)__dp)->__u; |
| 474 | return (__m128d){ __u, __u }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 475 | } |
| 476 | |
Eli Friedman | f83c258 | 2009-06-02 05:55:48 +0000 | [diff] [blame] | 477 | #define _mm_load_pd1(dp) _mm_load1_pd(dp) |
| 478 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 479 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 480 | _mm_loadr_pd(double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 481 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 482 | __m128d __u = *(__m128d*)__dp; |
| 483 | return __builtin_shufflevector(__u, __u, 1, 0); |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 484 | } |
| 485 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 486 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 487 | _mm_loadu_pd(double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 488 | { |
Bill Wendling | 502931f | 2011-05-13 00:11:39 +0000 | [diff] [blame] | 489 | struct __loadu_pd { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 490 | __m128d __v; |
David Majnemer | 1cf22e6 | 2015-02-04 00:26:10 +0000 | [diff] [blame] | 491 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 492 | return ((struct __loadu_pd*)__dp)->__v; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 493 | } |
| 494 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 495 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 496 | _mm_load_sd(double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 497 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 498 | struct __mm_load_sd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 499 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 500 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 501 | double __u = ((struct __mm_load_sd_struct*)__dp)->__u; |
| 502 | return (__m128d){ __u, 0 }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 503 | } |
| 504 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 505 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 506 | _mm_loadh_pd(__m128d __a, double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 507 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 508 | struct __mm_loadh_pd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 509 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 510 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 511 | double __u = ((struct __mm_loadh_pd_struct*)__dp)->__u; |
| 512 | return (__m128d){ __a[0], __u }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 513 | } |
| 514 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 515 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 516 | _mm_loadl_pd(__m128d __a, double const *__dp) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 517 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 518 | struct __mm_loadl_pd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 519 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 520 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 521 | double __u = ((struct __mm_loadl_pd_struct*)__dp)->__u; |
| 522 | return (__m128d){ __u, __a[1] }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 523 | } |
| 524 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 525 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
Simon Pilgrim | 5aba992 | 2015-08-26 21:17:12 +0000 | [diff] [blame^] | 526 | _mm_undefined_pd() |
| 527 | { |
| 528 | return (__m128d)__builtin_ia32_undef128(); |
| 529 | } |
| 530 | |
| 531 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 532 | _mm_set_sd(double __w) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 533 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 534 | return (__m128d){ __w, 0 }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 535 | } |
| 536 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 537 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 538 | _mm_set1_pd(double __w) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 539 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 540 | return (__m128d){ __w, __w }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 541 | } |
| 542 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 543 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 544 | _mm_set_pd(double __w, double __x) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 545 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 546 | return (__m128d){ __x, __w }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 547 | } |
| 548 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 549 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 550 | _mm_setr_pd(double __w, double __x) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 551 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 552 | return (__m128d){ __w, __x }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 553 | } |
| 554 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 555 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 556 | _mm_setzero_pd(void) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 557 | { |
| 558 | return (__m128d){ 0, 0 }; |
| 559 | } |
| 560 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 561 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 562 | _mm_move_sd(__m128d __a, __m128d __b) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 563 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 564 | return (__m128d){ __b[0], __a[1] }; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 565 | } |
| 566 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 567 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 568 | _mm_store_sd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 569 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 570 | struct __mm_store_sd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 571 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 572 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 573 | ((struct __mm_store_sd_struct*)__dp)->__u = __a[0]; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 574 | } |
| 575 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 576 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 577 | _mm_store1_pd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 578 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 579 | struct __mm_store1_pd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 580 | double __u[2]; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 581 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 582 | ((struct __mm_store1_pd_struct*)__dp)->__u[0] = __a[0]; |
| 583 | ((struct __mm_store1_pd_struct*)__dp)->__u[1] = __a[0]; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 584 | } |
| 585 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 586 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 587 | _mm_store_pd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 588 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 589 | *(__m128d *)__dp = __a; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 590 | } |
| 591 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 592 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 593 | _mm_storeu_pd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 594 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 595 | __builtin_ia32_storeupd(__dp, __a); |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 596 | } |
| 597 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 598 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 599 | _mm_storer_pd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 600 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 601 | __a = __builtin_shufflevector(__a, __a, 1, 0); |
| 602 | *(__m128d *)__dp = __a; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 603 | } |
| 604 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 605 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 606 | _mm_storeh_pd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 607 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 608 | struct __mm_storeh_pd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 609 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 610 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 611 | ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[1]; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 612 | } |
| 613 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 614 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 615 | _mm_storel_pd(double *__dp, __m128d __a) |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 616 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 617 | struct __mm_storeh_pd_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 618 | double __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 619 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 620 | ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[0]; |
Anders Carlsson | b08ac0b | 2008-12-24 02:11:54 +0000 | [diff] [blame] | 621 | } |
| 622 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 623 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 624 | _mm_add_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 625 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 626 | return (__m128i)((__v16qi)__a + (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 627 | } |
| 628 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 629 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 630 | _mm_add_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 631 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 632 | return (__m128i)((__v8hi)__a + (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 633 | } |
| 634 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 635 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 636 | _mm_add_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 637 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 638 | return (__m128i)((__v4si)__a + (__v4si)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 639 | } |
| 640 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 641 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 642 | _mm_add_si64(__m64 __a, __m64 __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 643 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 644 | return __a + __b; |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 645 | } |
| 646 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 647 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 648 | _mm_add_epi64(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 649 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 650 | return __a + __b; |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 651 | } |
| 652 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 653 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 654 | _mm_adds_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 655 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 656 | return (__m128i)__builtin_ia32_paddsb128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 657 | } |
| 658 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 659 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 660 | _mm_adds_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 661 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 662 | return (__m128i)__builtin_ia32_paddsw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 663 | } |
| 664 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 665 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 666 | _mm_adds_epu8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 667 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 668 | return (__m128i)__builtin_ia32_paddusb128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 669 | } |
| 670 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 671 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 672 | _mm_adds_epu16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 673 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 674 | return (__m128i)__builtin_ia32_paddusw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 675 | } |
| 676 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 677 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 678 | _mm_avg_epu8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 679 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 680 | return (__m128i)__builtin_ia32_pavgb128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 681 | } |
| 682 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 683 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 684 | _mm_avg_epu16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 685 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 686 | return (__m128i)__builtin_ia32_pavgw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 687 | } |
| 688 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 689 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 690 | _mm_madd_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 691 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 692 | return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 693 | } |
| 694 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 695 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 696 | _mm_max_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 697 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 698 | return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 699 | } |
| 700 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 701 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 702 | _mm_max_epu8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 703 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 704 | return (__m128i)__builtin_ia32_pmaxub128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 705 | } |
| 706 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 707 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 708 | _mm_min_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 709 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 710 | return (__m128i)__builtin_ia32_pminsw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 711 | } |
| 712 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 713 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 714 | _mm_min_epu8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 715 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 716 | return (__m128i)__builtin_ia32_pminub128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 717 | } |
| 718 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 719 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 720 | _mm_mulhi_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 721 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 722 | return (__m128i)__builtin_ia32_pmulhw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 723 | } |
| 724 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 725 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 726 | _mm_mulhi_epu16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 727 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 728 | return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 729 | } |
| 730 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 731 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 732 | _mm_mullo_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 733 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 734 | return (__m128i)((__v8hi)__a * (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 735 | } |
| 736 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 737 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 738 | _mm_mul_su32(__m64 __a, __m64 __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 739 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 740 | return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 741 | } |
| 742 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 743 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 744 | _mm_mul_epu32(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 745 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 746 | return __builtin_ia32_pmuludq128((__v4si)__a, (__v4si)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 747 | } |
| 748 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 749 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 750 | _mm_sad_epu8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 751 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 752 | return __builtin_ia32_psadbw128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 753 | } |
| 754 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 755 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 756 | _mm_sub_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 757 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 758 | return (__m128i)((__v16qi)__a - (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 759 | } |
| 760 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 761 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 762 | _mm_sub_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 763 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 764 | return (__m128i)((__v8hi)__a - (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 765 | } |
| 766 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 767 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 768 | _mm_sub_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 769 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 770 | return (__m128i)((__v4si)__a - (__v4si)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 771 | } |
| 772 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 773 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 774 | _mm_sub_si64(__m64 __a, __m64 __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 775 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 776 | return __a - __b; |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 777 | } |
| 778 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 779 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 780 | _mm_sub_epi64(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 781 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 782 | return __a - __b; |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 783 | } |
| 784 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 785 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 786 | _mm_subs_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 787 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 788 | return (__m128i)__builtin_ia32_psubsb128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 789 | } |
| 790 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 791 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 792 | _mm_subs_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 793 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 794 | return (__m128i)__builtin_ia32_psubsw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 795 | } |
| 796 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 797 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 798 | _mm_subs_epu8(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 799 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 800 | return (__m128i)__builtin_ia32_psubusb128((__v16qi)__a, (__v16qi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 801 | } |
| 802 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 803 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 804 | _mm_subs_epu16(__m128i __a, __m128i __b) |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 805 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 806 | return (__m128i)__builtin_ia32_psubusw128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | a283f91 | 2008-12-24 02:41:00 +0000 | [diff] [blame] | 807 | } |
| 808 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 809 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 810 | _mm_and_si128(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 811 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 812 | return __a & __b; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 813 | } |
| 814 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 815 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 816 | _mm_andnot_si128(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 817 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 818 | return ~__a & __b; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 819 | } |
| 820 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 821 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 822 | _mm_or_si128(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 823 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 824 | return __a | __b; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 825 | } |
| 826 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 827 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 828 | _mm_xor_si128(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 829 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 830 | return __a ^ __b; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 831 | } |
| 832 | |
Craig Topper | 51e4741 | 2015-02-13 06:04:43 +0000 | [diff] [blame] | 833 | #define _mm_slli_si128(a, imm) __extension__ ({ \ |
| 834 | (__m128i)__builtin_shufflevector((__v16qi)_mm_setzero_si128(), \ |
| 835 | (__v16qi)(__m128i)(a), \ |
| 836 | ((imm)&0xF0) ? 0 : 16 - ((imm)&0xF), \ |
| 837 | ((imm)&0xF0) ? 0 : 17 - ((imm)&0xF), \ |
| 838 | ((imm)&0xF0) ? 0 : 18 - ((imm)&0xF), \ |
| 839 | ((imm)&0xF0) ? 0 : 19 - ((imm)&0xF), \ |
| 840 | ((imm)&0xF0) ? 0 : 20 - ((imm)&0xF), \ |
| 841 | ((imm)&0xF0) ? 0 : 21 - ((imm)&0xF), \ |
| 842 | ((imm)&0xF0) ? 0 : 22 - ((imm)&0xF), \ |
| 843 | ((imm)&0xF0) ? 0 : 23 - ((imm)&0xF), \ |
| 844 | ((imm)&0xF0) ? 0 : 24 - ((imm)&0xF), \ |
| 845 | ((imm)&0xF0) ? 0 : 25 - ((imm)&0xF), \ |
| 846 | ((imm)&0xF0) ? 0 : 26 - ((imm)&0xF), \ |
| 847 | ((imm)&0xF0) ? 0 : 27 - ((imm)&0xF), \ |
| 848 | ((imm)&0xF0) ? 0 : 28 - ((imm)&0xF), \ |
| 849 | ((imm)&0xF0) ? 0 : 29 - ((imm)&0xF), \ |
| 850 | ((imm)&0xF0) ? 0 : 30 - ((imm)&0xF), \ |
| 851 | ((imm)&0xF0) ? 0 : 31 - ((imm)&0xF)); }) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 852 | |
Craig Topper | a462482 | 2015-02-13 06:04:45 +0000 | [diff] [blame] | 853 | #define _mm_bslli_si128(a, imm) \ |
| 854 | _mm_slli_si128((a), (imm)) |
| 855 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 856 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 857 | _mm_slli_epi16(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 858 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 859 | return (__m128i)__builtin_ia32_psllwi128((__v8hi)__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 860 | } |
| 861 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 862 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 863 | _mm_sll_epi16(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 864 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 865 | return (__m128i)__builtin_ia32_psllw128((__v8hi)__a, (__v8hi)__count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 866 | } |
| 867 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 868 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 869 | _mm_slli_epi32(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 870 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 871 | return (__m128i)__builtin_ia32_pslldi128((__v4si)__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 872 | } |
| 873 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 874 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 875 | _mm_sll_epi32(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 876 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 877 | return (__m128i)__builtin_ia32_pslld128((__v4si)__a, (__v4si)__count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 878 | } |
| 879 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 880 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 881 | _mm_slli_epi64(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 882 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 883 | return __builtin_ia32_psllqi128(__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 884 | } |
| 885 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 886 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 887 | _mm_sll_epi64(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 888 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 889 | return __builtin_ia32_psllq128(__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 890 | } |
| 891 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 892 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 893 | _mm_srai_epi16(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 894 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 895 | return (__m128i)__builtin_ia32_psrawi128((__v8hi)__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 896 | } |
| 897 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 898 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 899 | _mm_sra_epi16(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 900 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 901 | return (__m128i)__builtin_ia32_psraw128((__v8hi)__a, (__v8hi)__count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 902 | } |
| 903 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 904 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 905 | _mm_srai_epi32(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 906 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 907 | return (__m128i)__builtin_ia32_psradi128((__v4si)__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 908 | } |
| 909 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 910 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 911 | _mm_sra_epi32(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 912 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 913 | return (__m128i)__builtin_ia32_psrad128((__v4si)__a, (__v4si)__count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 914 | } |
| 915 | |
Craig Topper | 51e4741 | 2015-02-13 06:04:43 +0000 | [diff] [blame] | 916 | #define _mm_srli_si128(a, imm) __extension__ ({ \ |
| 917 | (__m128i)__builtin_shufflevector((__v16qi)(__m128i)(a), \ |
| 918 | (__v16qi)_mm_setzero_si128(), \ |
| 919 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 0, \ |
| 920 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 1, \ |
| 921 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 2, \ |
| 922 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 3, \ |
| 923 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 4, \ |
| 924 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 5, \ |
| 925 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 6, \ |
| 926 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 7, \ |
| 927 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 8, \ |
| 928 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 9, \ |
| 929 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 10, \ |
| 930 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 11, \ |
| 931 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 12, \ |
| 932 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 13, \ |
| 933 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 14, \ |
| 934 | ((imm)&0xF0) ? 16 : ((imm)&0xF) + 15); }) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 935 | |
Craig Topper | a462482 | 2015-02-13 06:04:45 +0000 | [diff] [blame] | 936 | #define _mm_bsrli_si128(a, imm) \ |
| 937 | _mm_srli_si128((a), (imm)) |
| 938 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 939 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 940 | _mm_srli_epi16(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 941 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 942 | return (__m128i)__builtin_ia32_psrlwi128((__v8hi)__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 943 | } |
| 944 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 945 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 946 | _mm_srl_epi16(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 947 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 948 | return (__m128i)__builtin_ia32_psrlw128((__v8hi)__a, (__v8hi)__count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 949 | } |
| 950 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 951 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 952 | _mm_srli_epi32(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 953 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 954 | return (__m128i)__builtin_ia32_psrldi128((__v4si)__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 955 | } |
| 956 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 957 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 958 | _mm_srl_epi32(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 959 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 960 | return (__m128i)__builtin_ia32_psrld128((__v4si)__a, (__v4si)__count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 961 | } |
| 962 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 963 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 964 | _mm_srli_epi64(__m128i __a, int __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 965 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 966 | return __builtin_ia32_psrlqi128(__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 967 | } |
| 968 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 969 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 970 | _mm_srl_epi64(__m128i __a, __m128i __count) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 971 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 972 | return __builtin_ia32_psrlq128(__a, __count); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 973 | } |
| 974 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 975 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 976 | _mm_cmpeq_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 977 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 978 | return (__m128i)((__v16qi)__a == (__v16qi)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 979 | } |
| 980 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 981 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 982 | _mm_cmpeq_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 983 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 984 | return (__m128i)((__v8hi)__a == (__v8hi)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 985 | } |
| 986 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 987 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 988 | _mm_cmpeq_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 989 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 990 | return (__m128i)((__v4si)__a == (__v4si)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 991 | } |
| 992 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 993 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 994 | _mm_cmpgt_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 995 | { |
Nick Lewycky | d0ba379 | 2012-02-04 02:16:48 +0000 | [diff] [blame] | 996 | /* This function always performs a signed comparison, but __v16qi is a char |
| 997 | which may be signed or unsigned. */ |
Nick Lewycky | 51a0090 | 2012-02-03 23:57:48 +0000 | [diff] [blame] | 998 | typedef signed char __v16qs __attribute__((__vector_size__(16))); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 999 | return (__m128i)((__v16qs)__a > (__v16qs)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1000 | } |
| 1001 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1002 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1003 | _mm_cmpgt_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1004 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1005 | return (__m128i)((__v8hi)__a > (__v8hi)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1006 | } |
| 1007 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1008 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1009 | _mm_cmpgt_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1010 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1011 | return (__m128i)((__v4si)__a > (__v4si)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1012 | } |
| 1013 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1014 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1015 | _mm_cmplt_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1016 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1017 | return _mm_cmpgt_epi8(__b, __a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1018 | } |
| 1019 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1020 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1021 | _mm_cmplt_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1022 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1023 | return _mm_cmpgt_epi16(__b, __a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1024 | } |
| 1025 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1026 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1027 | _mm_cmplt_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1028 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1029 | return _mm_cmpgt_epi32(__b, __a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1030 | } |
| 1031 | |
| 1032 | #ifdef __x86_64__ |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1033 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1034 | _mm_cvtsi64_sd(__m128d __a, long long __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1035 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1036 | __a[0] = __b; |
| 1037 | return __a; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1038 | } |
| 1039 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1040 | static __inline__ long long __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1041 | _mm_cvtsd_si64(__m128d __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1042 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1043 | return __builtin_ia32_cvtsd2si64(__a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1044 | } |
| 1045 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1046 | static __inline__ long long __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1047 | _mm_cvttsd_si64(__m128d __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1048 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1049 | return __a[0]; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1050 | } |
| 1051 | #endif |
| 1052 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1053 | static __inline__ __m128 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1054 | _mm_cvtepi32_ps(__m128i __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1055 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1056 | return __builtin_ia32_cvtdq2ps((__v4si)__a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1057 | } |
| 1058 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1059 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1060 | _mm_cvtps_epi32(__m128 __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1061 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1062 | return (__m128i)__builtin_ia32_cvtps2dq(__a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1063 | } |
| 1064 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1065 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1066 | _mm_cvttps_epi32(__m128 __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1067 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1068 | return (__m128i)__builtin_ia32_cvttps2dq(__a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1069 | } |
| 1070 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1071 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1072 | _mm_cvtsi32_si128(int __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1073 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1074 | return (__m128i)(__v4si){ __a, 0, 0, 0 }; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1075 | } |
| 1076 | |
| 1077 | #ifdef __x86_64__ |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1078 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1079 | _mm_cvtsi64_si128(long long __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1080 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1081 | return (__m128i){ __a, 0 }; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1082 | } |
| 1083 | #endif |
| 1084 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1085 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1086 | _mm_cvtsi128_si32(__m128i __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1087 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1088 | __v4si __b = (__v4si)__a; |
| 1089 | return __b[0]; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1090 | } |
| 1091 | |
| 1092 | #ifdef __x86_64__ |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1093 | static __inline__ long long __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1094 | _mm_cvtsi128_si64(__m128i __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1095 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1096 | return __a[0]; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1097 | } |
| 1098 | #endif |
| 1099 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1100 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1101 | _mm_load_si128(__m128i const *__p) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1102 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1103 | return *__p; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1104 | } |
| 1105 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1106 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1107 | _mm_loadu_si128(__m128i const *__p) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1108 | { |
Bill Wendling | 502931f | 2011-05-13 00:11:39 +0000 | [diff] [blame] | 1109 | struct __loadu_si128 { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1110 | __m128i __v; |
David Majnemer | 1cf22e6 | 2015-02-04 00:26:10 +0000 | [diff] [blame] | 1111 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1112 | return ((struct __loadu_si128*)__p)->__v; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1113 | } |
| 1114 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1115 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1116 | _mm_loadl_epi64(__m128i const *__p) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1117 | { |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 1118 | struct __mm_loadl_epi64_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1119 | long long __u; |
Eli Friedman | 9bb51ad | 2011-09-15 23:15:27 +0000 | [diff] [blame] | 1120 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1121 | return (__m128i) { ((struct __mm_loadl_epi64_struct*)__p)->__u, 0}; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1122 | } |
| 1123 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1124 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Simon Pilgrim | 5aba992 | 2015-08-26 21:17:12 +0000 | [diff] [blame^] | 1125 | _mm_undefined_si128() |
| 1126 | { |
| 1127 | return (__m128i)__builtin_ia32_undef128(); |
| 1128 | } |
| 1129 | |
| 1130 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Anders Carlsson | dfa3117 | 2009-09-18 17:03:55 +0000 | [diff] [blame] | 1131 | _mm_set_epi64x(long long q1, long long q0) |
| 1132 | { |
| 1133 | return (__m128i){ q0, q1 }; |
| 1134 | } |
| 1135 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1136 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1137 | _mm_set_epi64(__m64 q1, __m64 q0) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1138 | { |
| 1139 | return (__m128i){ (long long)q0, (long long)q1 }; |
| 1140 | } |
| 1141 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1142 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1143 | _mm_set_epi32(int i3, int i2, int i1, int i0) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1144 | { |
| 1145 | return (__m128i)(__v4si){ i0, i1, i2, i3}; |
| 1146 | } |
| 1147 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1148 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1149 | _mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1150 | { |
| 1151 | return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 }; |
| 1152 | } |
| 1153 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1154 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1155 | _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) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1156 | { |
| 1157 | return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }; |
| 1158 | } |
| 1159 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1160 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1161 | _mm_set1_epi64x(long long __q) |
Anders Carlsson | dfa3117 | 2009-09-18 17:03:55 +0000 | [diff] [blame] | 1162 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1163 | return (__m128i){ __q, __q }; |
Anders Carlsson | dfa3117 | 2009-09-18 17:03:55 +0000 | [diff] [blame] | 1164 | } |
| 1165 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1166 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1167 | _mm_set1_epi64(__m64 __q) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1168 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1169 | return (__m128i){ (long long)__q, (long long)__q }; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1170 | } |
| 1171 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1172 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1173 | _mm_set1_epi32(int __i) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1174 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1175 | return (__m128i)(__v4si){ __i, __i, __i, __i }; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1176 | } |
| 1177 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1178 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1179 | _mm_set1_epi16(short __w) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1180 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1181 | return (__m128i)(__v8hi){ __w, __w, __w, __w, __w, __w, __w, __w }; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1182 | } |
| 1183 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1184 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1185 | _mm_set1_epi8(char __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1186 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1187 | return (__m128i)(__v16qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b }; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1188 | } |
| 1189 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1190 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1191 | _mm_setr_epi64(__m64 q0, __m64 q1) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1192 | { |
| 1193 | return (__m128i){ (long long)q0, (long long)q1 }; |
| 1194 | } |
| 1195 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1196 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1197 | _mm_setr_epi32(int i0, int i1, int i2, int i3) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1198 | { |
| 1199 | return (__m128i)(__v4si){ i0, i1, i2, i3}; |
| 1200 | } |
| 1201 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1202 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1203 | _mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1204 | { |
| 1205 | return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 }; |
| 1206 | } |
| 1207 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1208 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1209 | _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) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1210 | { |
| 1211 | return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }; |
| 1212 | } |
| 1213 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1214 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1215 | _mm_setzero_si128(void) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1216 | { |
| 1217 | return (__m128i){ 0LL, 0LL }; |
| 1218 | } |
| 1219 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1220 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1221 | _mm_store_si128(__m128i *__p, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1222 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1223 | *__p = __b; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1224 | } |
| 1225 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1226 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1227 | _mm_storeu_si128(__m128i *__p, __m128i __b) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1228 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1229 | __builtin_ia32_storedqu((char *)__p, (__v16qi)__b); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1230 | } |
| 1231 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1232 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1233 | _mm_maskmoveu_si128(__m128i __d, __m128i __n, char *__p) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1234 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1235 | __builtin_ia32_maskmovdqu((__v16qi)__d, (__v16qi)__n, __p); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1236 | } |
| 1237 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1238 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1239 | _mm_storel_epi64(__m128i *__p, __m128i __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1240 | { |
Chad Rosier | 87622b8 | 2012-05-01 18:11:51 +0000 | [diff] [blame] | 1241 | struct __mm_storel_epi64_struct { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1242 | long long __u; |
Chad Rosier | 87622b8 | 2012-05-01 18:11:51 +0000 | [diff] [blame] | 1243 | } __attribute__((__packed__, __may_alias__)); |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1244 | ((struct __mm_storel_epi64_struct*)__p)->__u = __a[0]; |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1245 | } |
| 1246 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1247 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1248 | _mm_stream_pd(double *__p, __m128d __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1249 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1250 | __builtin_ia32_movntpd(__p, __a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1251 | } |
| 1252 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1253 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1254 | _mm_stream_si128(__m128i *__p, __m128i __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1255 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1256 | __builtin_ia32_movntdq(__p, __a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1257 | } |
| 1258 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1259 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1260 | _mm_stream_si32(int *__p, int __a) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1261 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1262 | __builtin_ia32_movnti(__p, __a); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1263 | } |
| 1264 | |
Eli Friedman | f9d8c6c | 2013-09-23 23:38:39 +0000 | [diff] [blame] | 1265 | #ifdef __x86_64__ |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1266 | static __inline__ void __DEFAULT_FN_ATTRS |
Eli Friedman | f9d8c6c | 2013-09-23 23:38:39 +0000 | [diff] [blame] | 1267 | _mm_stream_si64(long long *__p, long long __a) |
| 1268 | { |
| 1269 | __builtin_ia32_movnti64(__p, __a); |
| 1270 | } |
| 1271 | #endif |
| 1272 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1273 | static __inline__ void __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1274 | _mm_clflush(void const *__p) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1275 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1276 | __builtin_ia32_clflush(__p); |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1277 | } |
| 1278 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1279 | static __inline__ void __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1280 | _mm_lfence(void) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1281 | { |
| 1282 | __builtin_ia32_lfence(); |
| 1283 | } |
| 1284 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1285 | static __inline__ void __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1286 | _mm_mfence(void) |
Anders Carlsson | a0d5ca2 | 2008-12-25 23:48:58 +0000 | [diff] [blame] | 1287 | { |
| 1288 | __builtin_ia32_mfence(); |
| 1289 | } |
| 1290 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1291 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1292 | _mm_packs_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1293 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1294 | return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1295 | } |
| 1296 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1297 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1298 | _mm_packs_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1299 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1300 | return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1301 | } |
| 1302 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1303 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1304 | _mm_packus_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1305 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1306 | return (__m128i)__builtin_ia32_packuswb128((__v8hi)__a, (__v8hi)__b); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1307 | } |
| 1308 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1309 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1310 | _mm_extract_epi16(__m128i __a, int __imm) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1311 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1312 | __v8hi __b = (__v8hi)__a; |
Manman Ren | be38b9e | 2013-10-22 19:24:42 +0000 | [diff] [blame] | 1313 | return (unsigned short)__b[__imm & 7]; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1314 | } |
| 1315 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1316 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1317 | _mm_insert_epi16(__m128i __a, int __b, int __imm) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1318 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1319 | __v8hi __c = (__v8hi)__a; |
| 1320 | __c[__imm & 7] = __b; |
| 1321 | return (__m128i)__c; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1322 | } |
| 1323 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1324 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1325 | _mm_movemask_epi8(__m128i __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1326 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1327 | return __builtin_ia32_pmovmskb128((__v16qi)__a); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1328 | } |
| 1329 | |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1330 | #define _mm_shuffle_epi32(a, imm) __extension__ ({ \ |
Craig Topper | 51e4741 | 2015-02-13 06:04:43 +0000 | [diff] [blame] | 1331 | (__m128i)__builtin_shufflevector((__v4si)(__m128i)(a), \ |
| 1332 | (__v4si)_mm_set1_epi32(0), \ |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1333 | (imm) & 0x3, ((imm) & 0xc) >> 2, \ |
| 1334 | ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); }) |
Chris Lattner | f03406f | 2011-04-25 20:42:40 +0000 | [diff] [blame] | 1335 | |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1336 | #define _mm_shufflelo_epi16(a, imm) __extension__ ({ \ |
Craig Topper | 51e4741 | 2015-02-13 06:04:43 +0000 | [diff] [blame] | 1337 | (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \ |
| 1338 | (__v8hi)_mm_set1_epi16(0), \ |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1339 | (imm) & 0x3, ((imm) & 0xc) >> 2, \ |
| 1340 | ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ |
| 1341 | 4, 5, 6, 7); }) |
Chris Lattner | f03406f | 2011-04-25 20:42:40 +0000 | [diff] [blame] | 1342 | |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1343 | #define _mm_shufflehi_epi16(a, imm) __extension__ ({ \ |
Craig Topper | 51e4741 | 2015-02-13 06:04:43 +0000 | [diff] [blame] | 1344 | (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \ |
| 1345 | (__v8hi)_mm_set1_epi16(0), \ |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1346 | 0, 1, 2, 3, \ |
| 1347 | 4 + (((imm) & 0x03) >> 0), \ |
| 1348 | 4 + (((imm) & 0x0c) >> 2), \ |
| 1349 | 4 + (((imm) & 0x30) >> 4), \ |
| 1350 | 4 + (((imm) & 0xc0) >> 6)); }) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1351 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1352 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1353 | _mm_unpackhi_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1354 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1355 | 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); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1356 | } |
| 1357 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1358 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1359 | _mm_unpackhi_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1360 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1361 | return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1362 | } |
| 1363 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1364 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1365 | _mm_unpackhi_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1366 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1367 | return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 2, 4+2, 3, 4+3); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1368 | } |
| 1369 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1370 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1371 | _mm_unpackhi_epi64(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1372 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1373 | return (__m128i)__builtin_shufflevector(__a, __b, 1, 2+1); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1374 | } |
| 1375 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1376 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1377 | _mm_unpacklo_epi8(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1378 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1379 | 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); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1380 | } |
| 1381 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1382 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1383 | _mm_unpacklo_epi16(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1384 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1385 | return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1386 | } |
| 1387 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1388 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1389 | _mm_unpacklo_epi32(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1390 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1391 | return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 0, 4+0, 1, 4+1); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1392 | } |
| 1393 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1394 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1395 | _mm_unpacklo_epi64(__m128i __a, __m128i __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1396 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1397 | return (__m128i)__builtin_shufflevector(__a, __b, 0, 2+0); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1398 | } |
| 1399 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1400 | static __inline__ __m64 __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1401 | _mm_movepi64_pi64(__m128i __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1402 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1403 | return (__m64)__a[0]; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1404 | } |
| 1405 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1406 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Alp Toker | d480b1b | 2013-11-23 22:11:57 +0000 | [diff] [blame] | 1407 | _mm_movpi64_epi64(__m64 __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1408 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1409 | return (__m128i){ (long long)__a, 0 }; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1410 | } |
| 1411 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1412 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1413 | _mm_move_epi64(__m128i __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1414 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1415 | return __builtin_shufflevector(__a, (__m128i){ 0 }, 0, 2); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1416 | } |
| 1417 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1418 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1419 | _mm_unpackhi_pd(__m128d __a, __m128d __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1420 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1421 | return __builtin_shufflevector(__a, __b, 1, 2+1); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1422 | } |
| 1423 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1424 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1425 | _mm_unpacklo_pd(__m128d __a, __m128d __b) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1426 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1427 | return __builtin_shufflevector(__a, __b, 0, 2+0); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1428 | } |
| 1429 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1430 | static __inline__ int __DEFAULT_FN_ATTRS |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1431 | _mm_movemask_pd(__m128d __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1432 | { |
David Blaikie | 3302f2b | 2013-01-16 23:08:36 +0000 | [diff] [blame] | 1433 | return __builtin_ia32_movmskpd(__a); |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1434 | } |
| 1435 | |
Bob Wilson | c9b97cc | 2011-11-05 06:08:06 +0000 | [diff] [blame] | 1436 | #define _mm_shuffle_pd(a, b, i) __extension__ ({ \ |
Craig Topper | 51e4741 | 2015-02-13 06:04:43 +0000 | [diff] [blame] | 1437 | __builtin_shufflevector((__m128d)(a), (__m128d)(b), \ |
| 1438 | (i) & 1, (((i) & 2) >> 1) + 2); }) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1439 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1440 | static __inline__ __m128 __DEFAULT_FN_ATTRS |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1441 | _mm_castpd_ps(__m128d __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1442 | { |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1443 | return (__m128)__a; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1444 | } |
| 1445 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1446 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1447 | _mm_castpd_si128(__m128d __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1448 | { |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1449 | return (__m128i)__a; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1450 | } |
| 1451 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1452 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1453 | _mm_castps_pd(__m128 __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1454 | { |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1455 | return (__m128d)__a; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1456 | } |
| 1457 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1458 | static __inline__ __m128i __DEFAULT_FN_ATTRS |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1459 | _mm_castps_si128(__m128 __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1460 | { |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1461 | return (__m128i)__a; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1462 | } |
| 1463 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1464 | static __inline__ __m128 __DEFAULT_FN_ATTRS |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1465 | _mm_castsi128_ps(__m128i __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1466 | { |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1467 | return (__m128)__a; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1468 | } |
| 1469 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1470 | static __inline__ __m128d __DEFAULT_FN_ATTRS |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1471 | _mm_castsi128_pd(__m128i __a) |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1472 | { |
Reid Kleckner | 7ab75b3 | 2013-04-19 17:00:14 +0000 | [diff] [blame] | 1473 | return (__m128d)__a; |
Anders Carlsson | 85eb124 | 2008-12-26 00:45:50 +0000 | [diff] [blame] | 1474 | } |
| 1475 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1476 | static __inline__ void __DEFAULT_FN_ATTRS |
Mike Stump | 5b31ed3 | 2009-02-13 14:24:50 +0000 | [diff] [blame] | 1477 | _mm_pause(void) |
Anders Carlsson | 37c2371 | 2008-12-26 00:49:43 +0000 | [diff] [blame] | 1478 | { |
Anders Carlsson | 88b5366 | 2008-12-26 02:22:10 +0000 | [diff] [blame] | 1479 | __asm__ volatile ("pause"); |
Anders Carlsson | 37c2371 | 2008-12-26 00:49:43 +0000 | [diff] [blame] | 1480 | } |
| 1481 | |
Michael Kuperstein | e45af54 | 2015-06-30 13:36:19 +0000 | [diff] [blame] | 1482 | #undef __DEFAULT_FN_ATTRS |
Eric Christopher | 4d185168 | 2015-06-17 07:09:20 +0000 | [diff] [blame] | 1483 | |
Anders Carlsson | 43c2bab | 2009-01-21 01:49:39 +0000 | [diff] [blame] | 1484 | #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y)) |
Anders Carlsson | 37c2371 | 2008-12-26 00:49:43 +0000 | [diff] [blame] | 1485 | |
Anders Carlsson | f15e71d | 2008-12-24 01:45:22 +0000 | [diff] [blame] | 1486 | #endif /* __EMMINTRIN_H */ |