diff --git a/avxintrin.h b/avxintrin.h index 7ec9740..a683707 100644 --- a/avxintrin.h +++ b/avxintrin.h @@ -984,6 +984,13 @@ FORCE_INLINE __m256i _mm256_set1_epi8(int8_t a) return ret; } +FORCE_INLINE __m256i _mm256_set1_epi16(int16_t a) +{ + __m256i ret; + ret.vect_s16[0] = ret.vect_s16[1] = vdupq_n_s16(a); + return ret; +} + FORCE_INLINE __m256i _mm256_set1_epi32(int32_t a) { __m256i ret; diff --git a/data/avx2neontestdata.h b/data/avx2neontestdata.h index 06502b9..11aca0c 100644 --- a/data/avx2neontestdata.h +++ b/data/avx2neontestdata.h @@ -2672,6 +2672,15 @@ static test_mm256_set1_epi8_data_model g_test_mm256_set1_epi8_data = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'}, }; +typedef struct { + int16_t a; + int16_t expect[16]; +} test_mm256_set1_epi16_data_model; +static test_mm256_set1_epi16_data_model g_test_mm256_set1_epi16_data = { + 2019, + {2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019}, +}; + typedef struct { int32_t a; int32_t expect[8]; diff --git a/tests/a2ntest.c b/tests/a2ntest.c index 3d34f96..74d00ba 100644 --- a/tests/a2ntest.c +++ b/tests/a2ntest.c @@ -1037,6 +1037,10 @@ const char *RunTest(InstructionTest test, int *flag) ret = "MM256_SET1_EPI8"; *flag = test_mm256_set1_epi8(); break; + case UT_MM256_SET1_EPI16: + ret = "MM256_SET1_EPI16"; + *flag = test_mm256_set1_epi16(); + break; case UT_MM256_SET1_EPI32: ret = "MM256_SET1_EPI32"; *flag = test_mm256_set1_epi32(); @@ -4716,6 +4720,13 @@ int test_mm256_set1_epi8() return comp_return(g_test_mm256_set1_epi8_data.expect, &dst, sizeof(dst)); } +int test_mm256_set1_epi16() +{ + __m256i dst = _mm256_set1_epi16(g_test_mm256_set1_epi16_data.a); + + return comp_return(g_test_mm256_set1_epi16_data.expect, &dst, sizeof(dst)); +} + int test_mm256_set1_epi32() { __m256i dst = _mm256_set1_epi32(g_test_mm256_set1_epi32_data.a); diff --git a/tests/a2ntest.h b/tests/a2ntest.h index 6832314..b2863ab 100644 --- a/tests/a2ntest.h +++ b/tests/a2ntest.h @@ -197,6 +197,7 @@ typedef enum { UT_MM256_SET_M128I, UT_MM256_SET1_EPI64X, UT_MM256_SET1_EPI8, + UT_MM256_SET1_EPI16, UT_MM_SETZERO_SI128, UT_MM256_SETZERO_SI256, UT_MM512_SETZERO_SI512, @@ -596,6 +597,7 @@ int test_mm_set1_ps(void); int test_mm_set1_epi64x(void); int test_mm_set1_pd(void); int test_mm256_set1_epi8(void); +int test_mm256_set1_epi16(void); int test_mm256_set1_epi32(void); int test_mm256_set1_epi64x(void); int test_mm256_set1_pd(void);