|
| 1 | +/*===--------- movrs_avx10_2intrin.h - AVX10.2-MOVRS intrinsics ------------=== |
| 2 | + * |
| 3 | + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | + * See https://llvm.org/LICENSE.txt for license information. |
| 5 | + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | + * |
| 7 | + *===-----------------------------------------------------------------------=== |
| 8 | + */ |
| 9 | +#ifndef __IMMINTRIN_H |
| 10 | +#error \ |
| 11 | + "Never use <movrs_avx10_2intrin.h> directly; include <immintrin.h> instead." |
| 12 | +#endif |
| 13 | + |
| 14 | +#ifndef __MOVRS_AVX10_2INTRIN_H |
| 15 | +#define __MOVRS_AVX10_2INTRIN_H |
| 16 | +#ifdef __x86_64__ |
| 17 | + |
| 18 | +/* Define the default attributes for the functions in this file. */ |
| 19 | +#define __DEFAULT_FN_ATTRS128 \ |
| 20 | + __attribute__((__always_inline__, __nodebug__, \ |
| 21 | + __target__("movrs,avx10.2-256"), __min_vector_width__(128))) |
| 22 | +#define __DEFAULT_FN_ATTRS256 \ |
| 23 | + __attribute__((__always_inline__, __nodebug__, \ |
| 24 | + __target__("movrs,avx10.2-256"), __min_vector_width__(256))) |
| 25 | + |
| 26 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 27 | +_mm_loadrs_epi8(void const *__A) { |
| 28 | + return (__m128i)__builtin_ia32_vmovrsb128((const __v16qi *)(__A)); |
| 29 | +} |
| 30 | + |
| 31 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 32 | +_mm_mask_loadrs_epi8(__m128i __W, __mmask16 __U, void const *__A) { |
| 33 | + return (__m128i)__builtin_ia32_selectb_128( |
| 34 | + (__mmask16)__U, (__v16qi)_mm_loadrs_epi8(__A), (__v16qi)__W); |
| 35 | +} |
| 36 | + |
| 37 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 38 | +_mm_maskz_loadrs_epi8(__mmask16 __U, void const *__A) { |
| 39 | + return (__m128i)__builtin_ia32_selectb_128((__mmask16)__U, |
| 40 | + (__v16qi)_mm_loadrs_epi8(__A), |
| 41 | + (__v16qi)_mm_setzero_si128()); |
| 42 | +} |
| 43 | + |
| 44 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 45 | +_mm256_loadrs_epi8(void const *__A) { |
| 46 | + return (__m256i)__builtin_ia32_vmovrsb256((const __v32qi *)(__A)); |
| 47 | +} |
| 48 | + |
| 49 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 50 | +_mm256_mask_loadrs_epi8(__m256i __W, __mmask32 __U, void const *__A) { |
| 51 | + return (__m256i)__builtin_ia32_selectb_256( |
| 52 | + (__mmask32)__U, (__v32qi)_mm256_loadrs_epi8(__A), (__v32qi)__W); |
| 53 | +} |
| 54 | + |
| 55 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 56 | +_mm256_maskz_loadrs_epi8(__mmask32 __U, void const *__A) { |
| 57 | + return (__m256i)__builtin_ia32_selectb_256((__mmask32)__U, |
| 58 | + (__v32qi)_mm256_loadrs_epi8(__A), |
| 59 | + (__v32qi)_mm256_setzero_si256()); |
| 60 | +} |
| 61 | + |
| 62 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 63 | +_mm_loadrs_epi32(void const *__A) { |
| 64 | + return (__m128i)__builtin_ia32_vmovrsd128((const __v4si *)(__A)); |
| 65 | +} |
| 66 | + |
| 67 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 68 | +_mm_mask_loadrs_epi32(__m128i __W, __mmask8 __U, void const *__A) { |
| 69 | + return (__m128i)__builtin_ia32_selectd_128( |
| 70 | + (__mmask8)__U, (__v4si)_mm_loadrs_epi32(__A), (__v4si)__W); |
| 71 | +} |
| 72 | + |
| 73 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 74 | +_mm_maskz_loadrs_epi32(__mmask8 __U, void const *__A) { |
| 75 | + return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, |
| 76 | + (__v4si)_mm_loadrs_epi32(__A), |
| 77 | + (__v4si)_mm_setzero_si128()); |
| 78 | +} |
| 79 | + |
| 80 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 81 | +_mm256_loadrs_epi32(void const *__A) { |
| 82 | + return (__m256i)__builtin_ia32_vmovrsd256((const __v8si *)(__A)); |
| 83 | +} |
| 84 | + |
| 85 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 86 | +_mm256_mask_loadrs_epi32(__m256i __W, __mmask8 __U, void const *__A) { |
| 87 | + return (__m256i)__builtin_ia32_selectd_256( |
| 88 | + (__mmask8)__U, (__v8si)_mm256_loadrs_epi32(__A), (__v8si)__W); |
| 89 | +} |
| 90 | + |
| 91 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 92 | +_mm256_maskz_loadrs_epi32(__mmask8 __U, void const *__A) { |
| 93 | + return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U, |
| 94 | + (__v8si)_mm256_loadrs_epi32(__A), |
| 95 | + (__v8si)_mm256_setzero_si256()); |
| 96 | +} |
| 97 | + |
| 98 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 99 | +_mm_loadrs_epi64(void const *__A) { |
| 100 | + return (__m128i)__builtin_ia32_vmovrsq128((const __v2di *)(__A)); |
| 101 | +} |
| 102 | + |
| 103 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 104 | +_mm_mask_loadrs_epi64(__m128i __W, __mmask8 __U, void const *__A) { |
| 105 | + return (__m128i)__builtin_ia32_selectq_128( |
| 106 | + (__mmask8)__U, (__v2di)_mm_loadrs_epi64(__A), (__v2di)__W); |
| 107 | +} |
| 108 | + |
| 109 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 110 | +_mm_maskz_loadrs_epi64(__mmask8 __U, void const *__A) { |
| 111 | + return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U, |
| 112 | + (__v2di)_mm_loadrs_epi64(__A), |
| 113 | + (__v2di)_mm_setzero_si128()); |
| 114 | +} |
| 115 | + |
| 116 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 117 | +_mm256_loadrs_epi64(void const *__A) { |
| 118 | + return (__m256i)__builtin_ia32_vmovrsq256((const __v4di *)(__A)); |
| 119 | +} |
| 120 | + |
| 121 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 122 | +_mm256_mask_loadrs_epi64(__m256i __W, __mmask8 __U, void const *__A) { |
| 123 | + return (__m256i)__builtin_ia32_selectq_256( |
| 124 | + (__mmask8)__U, (__v4di)_mm256_loadrs_epi64(__A), (__v4di)__W); |
| 125 | +} |
| 126 | + |
| 127 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 128 | +_mm256_maskz_loadrs_epi64(__mmask8 __U, void const *__A) { |
| 129 | + return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, |
| 130 | + (__v4di)_mm256_loadrs_epi64(__A), |
| 131 | + (__v4di)_mm256_setzero_si256()); |
| 132 | +} |
| 133 | + |
| 134 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 135 | +_mm_loadrs_epi16(void const *__A) { |
| 136 | + return (__m128i)__builtin_ia32_vmovrsw128((const __v8hi *)(__A)); |
| 137 | +} |
| 138 | + |
| 139 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 140 | +_mm_mask_loadrs_epi16(__m128i __W, __mmask8 __U, void const *__A) { |
| 141 | + return (__m128i)__builtin_ia32_selectw_128( |
| 142 | + (__mmask8)__U, (__v8hi)_mm_loadrs_epi16(__A), (__v8hi)__W); |
| 143 | +} |
| 144 | + |
| 145 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
| 146 | +_mm_maskz_loadrs_epi16(__mmask8 __U, void const *__A) { |
| 147 | + return (__m128i)__builtin_ia32_selectw_128((__mmask8)__U, |
| 148 | + (__v8hi)_mm_loadrs_epi16(__A), |
| 149 | + (__v8hi)_mm_setzero_si128()); |
| 150 | +} |
| 151 | + |
| 152 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 153 | +_mm256_loadrs_epi16(void const *__A) { |
| 154 | + return (__m256i)__builtin_ia32_vmovrsw256((const __v16hi *)(__A)); |
| 155 | +} |
| 156 | + |
| 157 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 158 | +_mm256_mask_loadrs_epi16(__m256i __W, __mmask16 __U, void const *__A) { |
| 159 | + return (__m256i)__builtin_ia32_selectw_256( |
| 160 | + (__mmask16)__U, (__v16hi)_mm256_loadrs_epi16(__A), (__v16hi)__W); |
| 161 | +} |
| 162 | + |
| 163 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
| 164 | +_mm256_maskz_loadrs_epi16(__mmask16 __U, void const *__A) { |
| 165 | + return (__m256i)__builtin_ia32_selectw_256((__mmask16)__U, |
| 166 | + (__v16hi)_mm256_loadrs_epi16(__A), |
| 167 | + (__v16hi)_mm256_setzero_si256()); |
| 168 | +} |
| 169 | + |
| 170 | +#undef __DEFAULT_FN_ATTRS128 |
| 171 | +#undef __DEFAULT_FN_ATTRS256 |
| 172 | + |
| 173 | +#endif /* __x86_64__ */ |
| 174 | +#endif /* __MOVRS_AVX10_2INTRIN_H */ |
0 commit comments