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