OLD | NEW |
1 /*===---- emmintrin.h - SSE2 intrinsics ------------------------------------=== | 1 /*===---- emmintrin.h - SSE2 intrinsics ------------------------------------=== |
2 * | 2 * |
3 * Permission is hereby granted, free of charge, to any person obtaining a copy | 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 | 4 * of this software and associated documentation files (the "Software"), to deal |
5 * in the Software without restriction, including without limitation the rights | 5 * in the Software without restriction, including without limitation the rights |
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 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 | 7 * copies of the Software, and to permit persons to whom the Software is |
8 * furnished to do so, subject to the following conditions: | 8 * furnished to do so, subject to the following conditions: |
9 * | 9 * |
10 * The above copyright notice and this permission notice shall be included in | 10 * The above copyright notice and this permission notice shall be included in |
(...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 { | 814 { |
815 return a | b; | 815 return a | b; |
816 } | 816 } |
817 | 817 |
818 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 818 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
819 _mm_xor_si128(__m128i a, __m128i b) | 819 _mm_xor_si128(__m128i a, __m128i b) |
820 { | 820 { |
821 return a ^ b; | 821 return a ^ b; |
822 } | 822 } |
823 | 823 |
824 #define _mm_slli_si128(VEC, IMM) \ | 824 #define _mm_slli_si128(a, count) __extension__ ({ \ |
825 ((__m128i)__builtin_ia32_pslldqi128((__m128i)(VEC), (IMM)*8)) | 825 __m128i __a = (a); \ |
| 826 (__m128i)__builtin_ia32_pslldqi128(__a, (count)*8); }) |
826 | 827 |
827 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 828 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
828 _mm_slli_epi16(__m128i a, int count) | 829 _mm_slli_epi16(__m128i a, int count) |
829 { | 830 { |
830 return (__m128i)__builtin_ia32_psllwi128((__v8hi)a, count); | 831 return (__m128i)__builtin_ia32_psllwi128((__v8hi)a, count); |
831 } | 832 } |
832 | 833 |
833 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 834 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
834 _mm_sll_epi16(__m128i a, __m128i count) | 835 _mm_sll_epi16(__m128i a, __m128i count) |
835 { | 836 { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
878 return (__m128i)__builtin_ia32_psradi128((__v4si)a, count); | 879 return (__m128i)__builtin_ia32_psradi128((__v4si)a, count); |
879 } | 880 } |
880 | 881 |
881 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 882 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
882 _mm_sra_epi32(__m128i a, __m128i count) | 883 _mm_sra_epi32(__m128i a, __m128i count) |
883 { | 884 { |
884 return (__m128i)__builtin_ia32_psrad128((__v4si)a, (__v4si)count); | 885 return (__m128i)__builtin_ia32_psrad128((__v4si)a, (__v4si)count); |
885 } | 886 } |
886 | 887 |
887 | 888 |
888 #define _mm_srli_si128(VEC, IMM) \ | 889 #define _mm_srli_si128(a, count) __extension__ ({ \ |
889 ((__m128i)__builtin_ia32_psrldqi128((__m128i)(VEC), (IMM)*8)) | 890 __m128i __a = (a); \ |
| 891 (__m128i)__builtin_ia32_psrldqi128(__a, (count)*8); }) |
890 | 892 |
891 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 893 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
892 _mm_srli_epi16(__m128i a, int count) | 894 _mm_srli_epi16(__m128i a, int count) |
893 { | 895 { |
894 return (__m128i)__builtin_ia32_psrlwi128((__v8hi)a, count); | 896 return (__m128i)__builtin_ia32_psrlwi128((__v8hi)a, count); |
895 } | 897 } |
896 | 898 |
897 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 899 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
898 _mm_srl_epi16(__m128i a, __m128i count) | 900 _mm_srl_epi16(__m128i a, __m128i count) |
899 { | 901 { |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1252 c[imm & 7] = b; | 1254 c[imm & 7] = b; |
1253 return (__m128i)c; | 1255 return (__m128i)c; |
1254 } | 1256 } |
1255 | 1257 |
1256 static __inline__ int __attribute__((__always_inline__, __nodebug__)) | 1258 static __inline__ int __attribute__((__always_inline__, __nodebug__)) |
1257 _mm_movemask_epi8(__m128i a) | 1259 _mm_movemask_epi8(__m128i a) |
1258 { | 1260 { |
1259 return __builtin_ia32_pmovmskb128((__v16qi)a); | 1261 return __builtin_ia32_pmovmskb128((__v16qi)a); |
1260 } | 1262 } |
1261 | 1263 |
1262 #define _mm_shuffle_epi32(a, imm) \ | 1264 #define _mm_shuffle_epi32(a, imm) __extension__ ({ \ |
1263 ((__m128i)__builtin_shufflevector((__v4si)(a), (__v4si) _mm_set1_epi32(0), \ | 1265 __m128i __a = (a); \ |
1264 (imm) & 0x3, ((imm) & 0xc) >> 2, \ | 1266 (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si) _mm_set1_epi32(0), \ |
1265 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6)) | 1267 (imm) & 0x3, ((imm) & 0xc) >> 2, \ |
| 1268 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); }) |
1266 | 1269 |
| 1270 #define _mm_shufflelo_epi16(a, imm) __extension__ ({ \ |
| 1271 __m128i __a = (a); \ |
| 1272 (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \ |
| 1273 (imm) & 0x3, ((imm) & 0xc) >> 2, \ |
| 1274 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ |
| 1275 4, 5, 6, 7); }) |
1267 | 1276 |
1268 #define _mm_shufflelo_epi16(a, imm) \ | 1277 #define _mm_shufflehi_epi16(a, imm) __extension__ ({ \ |
1269 ((__m128i)__builtin_shufflevector((__v8hi)(a), (__v8hi) _mm_set1_epi16(0), \ | 1278 __m128i __a = (a); \ |
1270 (imm) & 0x3, ((imm) & 0xc) >> 2, \ | 1279 (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \ |
1271 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ | 1280 0, 1, 2, 3, \ |
1272 4, 5, 6, 7)) | 1281 4 + (((imm) & 0x03) >> 0), \ |
1273 #define _mm_shufflehi_epi16(a, imm) \ | 1282 4 + (((imm) & 0x0c) >> 2), \ |
1274 ((__m128i)__builtin_shufflevector((__v8hi)(a), (__v8hi) _mm_set1_epi16(0), 0,
1, 2, 3, \ | 1283 4 + (((imm) & 0x30) >> 4), \ |
1275 4 + (((imm) & 0x03) >> 0), \ | 1284 4 + (((imm) & 0xc0) >> 6)); }) |
1276 4 + (((imm) & 0x0c) >> 2), \ | |
1277 4 + (((imm) & 0x30) >> 4), \ | |
1278 4 + (((imm) & 0xc0) >> 6))) | |
1279 | 1285 |
1280 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 1286 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
1281 _mm_unpackhi_epi8(__m128i a, __m128i b) | 1287 _mm_unpackhi_epi8(__m128i a, __m128i b) |
1282 { | 1288 { |
1283 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); | 1289 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); |
1284 } | 1290 } |
1285 | 1291 |
1286 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 1292 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
1287 _mm_unpackhi_epi16(__m128i a, __m128i b) | 1293 _mm_unpackhi_epi16(__m128i a, __m128i b) |
1288 { | 1294 { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 { | 1360 { |
1355 return __builtin_shufflevector(a, b, 0, 2+0); | 1361 return __builtin_shufflevector(a, b, 0, 2+0); |
1356 } | 1362 } |
1357 | 1363 |
1358 static __inline__ int __attribute__((__always_inline__, __nodebug__)) | 1364 static __inline__ int __attribute__((__always_inline__, __nodebug__)) |
1359 _mm_movemask_pd(__m128d a) | 1365 _mm_movemask_pd(__m128d a) |
1360 { | 1366 { |
1361 return __builtin_ia32_movmskpd(a); | 1367 return __builtin_ia32_movmskpd(a); |
1362 } | 1368 } |
1363 | 1369 |
1364 #define _mm_shuffle_pd(a, b, i) \ | 1370 #define _mm_shuffle_pd(a, b, i) __extension__ ({ \ |
1365 (__builtin_shufflevector((__m128d)(a), (__m128d)(b), (i) & 1, \ | 1371 __m128d __a = (a); \ |
1366 (((i) & 2) >> 1) + 2)) | 1372 __m128d __b = (b); \ |
| 1373 __builtin_shufflevector(__a, __b, (i) & 1, (((i) & 2) >> 1) + 2); }) |
1367 | 1374 |
1368 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) | 1375 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) |
1369 _mm_castpd_ps(__m128d in) | 1376 _mm_castpd_ps(__m128d in) |
1370 { | 1377 { |
1371 return (__m128)in; | 1378 return (__m128)in; |
1372 } | 1379 } |
1373 | 1380 |
1374 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) | 1381 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) |
1375 _mm_castpd_si128(__m128d in) | 1382 _mm_castpd_si128(__m128d in) |
1376 { | 1383 { |
(...skipping 28 matching lines...) Expand all Loading... |
1405 _mm_pause(void) | 1412 _mm_pause(void) |
1406 { | 1413 { |
1407 __asm__ volatile ("pause"); | 1414 __asm__ volatile ("pause"); |
1408 } | 1415 } |
1409 | 1416 |
1410 #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y)) | 1417 #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y)) |
1411 | 1418 |
1412 #endif /* __SSE2__ */ | 1419 #endif /* __SSE2__ */ |
1413 | 1420 |
1414 #endif /* __EMMINTRIN_H */ | 1421 #endif /* __EMMINTRIN_H */ |
OLD | NEW |