/* SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * Copyright: * 2020 Evan Nemerson * 2020 Hidayat Khan */ #define SIMDE_TEST_X86_AVX512_INSN srlv #include #include #include #include #include #include static int test_simde_mm_srlv_epi16 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int16_t a[8]; const int16_t b[8]; const int16_t r[8]; } test_vec[] = { { { INT16_C( 20854), INT16_C( 32520), INT16_C( 459), INT16_C( 13016), -INT16_C( 10658), -INT16_C( 10061), -INT16_C( 28349), INT16_C( 13711) }, { INT16_C( 0), INT16_C( 31), -INT16_C( 1), INT16_C( 32), INT16_C( 21), INT16_C( 6), INT16_C( 14), INT16_C( 24) }, { INT16_C( 20854), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 866), INT16_C( 2), INT16_C( 0) } }, { { INT16_C( 24789), -INT16_C( 24476), INT16_C( 15458), -INT16_C( 16173), -INT16_C( 31214), INT16_C( 21912), INT16_C( 10008), -INT16_C( 30837) }, { INT16_C( 24), INT16_C( 20), INT16_C( 17), INT16_C( 0), INT16_C( 18), INT16_C( 24), INT16_C( 11), INT16_C( 5) }, { INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 16173), INT16_C( 0), INT16_C( 0), INT16_C( 4), INT16_C( 1084) } }, { { -INT16_C( 5808), -INT16_C( 19807), INT16_C( 29734), INT16_C( 14450), INT16_C( 3066), INT16_C( 4750), INT16_C( 6450), -INT16_C( 30054) }, { INT16_C( 27), INT16_C( 12), INT16_C( 1), INT16_C( 19), INT16_C( 18), INT16_C( 19), INT16_C( 27), INT16_C( 30) }, { INT16_C( 0), INT16_C( 11), INT16_C( 14867), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { { INT16_C( 16322), -INT16_C( 5986), INT16_C( 4275), -INT16_C( 21215), -INT16_C( 20709), INT16_C( 20160), INT16_C( 23240), INT16_C( 9176) }, { INT16_C( 8), INT16_C( 15), INT16_C( 16), INT16_C( 28), INT16_C( 13), INT16_C( 0), INT16_C( 8), INT16_C( 20) }, { INT16_C( 63), INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 5), INT16_C( 20160), INT16_C( 90), INT16_C( 0) } }, { { INT16_C( 21245), -INT16_C( 20397), INT16_C( 29794), INT16_C( 32350), INT16_C( 7715), -INT16_C( 5172), -INT16_C( 23432), -INT16_C( 16370) }, { INT16_C( 9), INT16_C( 9), INT16_C( 0), INT16_C( 28), INT16_C( 20), INT16_C( 22), INT16_C( 27), INT16_C( 8) }, { INT16_C( 41), INT16_C( 88), INT16_C( 29794), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 192) } }, { { INT16_C( 15356), INT16_C( 24329), INT16_C( 26544), -INT16_C( 11299), -INT16_C( 22139), -INT16_C( 577), -INT16_C( 12979), INT16_C( 14013) }, { INT16_C( 11), INT16_C( 16), INT16_C( 11), INT16_C( 26), INT16_C( 9), INT16_C( 29), INT16_C( 27), INT16_C( 30) }, { INT16_C( 7), INT16_C( 0), INT16_C( 12), INT16_C( 0), INT16_C( 84), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { { INT16_C( 1984), INT16_C( 28790), INT16_C( 21359), -INT16_C( 3004), INT16_C( 1020), INT16_C( 19186), -INT16_C( 20528), INT16_C( 7296) }, { INT16_C( 22), INT16_C( 8), INT16_C( 29), INT16_C( 1), INT16_C( 18), INT16_C( 11), INT16_C( 3), INT16_C( 5) }, { INT16_C( 0), INT16_C( 112), INT16_C( 0), INT16_C( 31266), INT16_C( 0), INT16_C( 9), INT16_C( 5626), INT16_C( 228) } }, { { -INT16_C( 1199), -INT16_C( 16204), -INT16_C( 1969), INT16_C( 19380), -INT16_C( 22789), -INT16_C( 13163), INT16_C( 5718), INT16_C( 19688) }, { INT16_C( 6), INT16_C( 13), INT16_C( 18), INT16_C( 10), INT16_C( 13), INT16_C( 18), INT16_C( 31), INT16_C( 21) }, { INT16_C( 1005), INT16_C( 6), INT16_C( 0), INT16_C( 18), INT16_C( 5), INT16_C( 0), INT16_C( 0), INT16_C( 0) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i a = simde_x_mm_loadu_epi16(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi16(test_vec[i].b); simde__m128i r = simde_mm_srlv_epi16(a, b); simde_test_x86_assert_equal_i16x8(r, simde_x_mm_loadu_epi16(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m128i a = simde_test_x86_random_i16x8(); simde__m128i b = simde_test_x86_random_i16x8(); simde__m128i r = simde_mm_srlv_epi16(a, b); b = simde_mm_and_si128(b, simde_mm_set1_epi16(31)); if (i == 0 ) b = simde_mm_mask_blend_epi16(0xf, b, simde_mm_set_epi16(0, 0, 0, 0, 32, -1, 31, 0)); r = simde_mm_srlv_epi16(a, b); simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm_mask_srlv_epi16 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int16_t src[8]; const simde__mmask8 k; const int16_t a[8]; const int16_t b[8]; const int16_t r[8]; } test_vec[] = { { { INT16_C( 23213), -INT16_C( 23484), -INT16_C( 3615), INT16_C( 20407), INT16_C( 12157), -INT16_C( 32012), -INT16_C( 26926), -INT16_C( 1675) }, UINT8_C(222), { -INT16_C( 29011), INT16_C( 7859), INT16_C( 600), INT16_C( 16506), INT16_C( 6847), -INT16_C( 26796), INT16_C( 1432), -INT16_C( 3516) }, { INT16_C( 0), INT16_C( 31), -INT16_C( 1), INT16_C( 32), INT16_C( 22), INT16_C( 1), INT16_C( 15), INT16_C( 10) }, { INT16_C( 23213), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 32012), INT16_C( 0), INT16_C( 60) } }, { { INT16_C( 15657), -INT16_C( 32389), -INT16_C( 2752), -INT16_C( 63), INT16_C( 5391), -INT16_C( 22634), -INT16_C( 9702), INT16_C( 25498) }, UINT8_C(195), { -INT16_C( 24979), -INT16_C( 28573), INT16_C( 12886), -INT16_C( 28506), INT16_C( 21460), INT16_C( 28223), -INT16_C( 25379), INT16_C( 7063) }, { INT16_C( 24), INT16_C( 27), INT16_C( 26), INT16_C( 29), INT16_C( 16), INT16_C( 10), INT16_C( 30), INT16_C( 14) }, { INT16_C( 0), INT16_C( 0), -INT16_C( 2752), -INT16_C( 63), INT16_C( 5391), -INT16_C( 22634), INT16_C( 0), INT16_C( 0) } }, { { -INT16_C( 3828), INT16_C( 25180), INT16_C( 548), -INT16_C( 1806), INT16_C( 12629), INT16_C( 13158), -INT16_C( 306), -INT16_C( 6578) }, UINT8_C( 23), { -INT16_C( 3159), INT16_C( 1009), -INT16_C( 7920), -INT16_C( 10765), -INT16_C( 16916), INT16_C( 23091), -INT16_C( 181), INT16_C( 15718) }, { INT16_C( 27), INT16_C( 1), INT16_C( 26), INT16_C( 19), INT16_C( 31), INT16_C( 25), INT16_C( 20), INT16_C( 20) }, { INT16_C( 0), INT16_C( 504), INT16_C( 0), -INT16_C( 1806), INT16_C( 0), INT16_C( 13158), -INT16_C( 306), -INT16_C( 6578) } }, { { -INT16_C( 14701), -INT16_C( 23584), -INT16_C( 11353), -INT16_C( 27784), -INT16_C( 21359), -INT16_C( 8979), INT16_C( 21419), INT16_C( 1817) }, UINT8_C( 27), { INT16_C( 25978), -INT16_C( 11307), -INT16_C( 16104), -INT16_C( 109), INT16_C( 20602), INT16_C( 6707), INT16_C( 4389), -INT16_C( 5203) }, { INT16_C( 17), INT16_C( 18), INT16_C( 9), INT16_C( 22), INT16_C( 19), INT16_C( 0), INT16_C( 12), INT16_C( 2) }, { INT16_C( 0), INT16_C( 0), -INT16_C( 11353), INT16_C( 0), INT16_C( 0), -INT16_C( 8979), INT16_C( 21419), INT16_C( 1817) } }, { { INT16_C( 22668), -INT16_C( 23142), INT16_C( 11545), -INT16_C( 27740), -INT16_C( 10371), -INT16_C( 23891), INT16_C( 23272), -INT16_C( 9587) }, UINT8_C(171), { -INT16_C( 24800), INT16_C( 18036), -INT16_C( 5643), INT16_C( 10073), -INT16_C( 16375), INT16_C( 12659), INT16_C( 14915), -INT16_C( 25667) }, { INT16_C( 20), INT16_C( 20), INT16_C( 6), INT16_C( 30), INT16_C( 21), INT16_C( 6), INT16_C( 14), INT16_C( 26) }, { INT16_C( 0), INT16_C( 0), INT16_C( 11545), INT16_C( 0), -INT16_C( 10371), INT16_C( 197), INT16_C( 23272), INT16_C( 0) } }, { { INT16_C( 28223), INT16_C( 13332), INT16_C( 28247), INT16_C( 24924), -INT16_C( 12498), INT16_C( 29074), INT16_C( 20233), -INT16_C( 8948) }, UINT8_C(178), { -INT16_C( 8512), INT16_C( 2232), -INT16_C( 27043), INT16_C( 32509), INT16_C( 19549), -INT16_C( 724), -INT16_C( 1209), -INT16_C( 19139) }, { INT16_C( 15), INT16_C( 13), INT16_C( 13), INT16_C( 12), INT16_C( 0), INT16_C( 6), INT16_C( 10), INT16_C( 1) }, { INT16_C( 28223), INT16_C( 0), INT16_C( 28247), INT16_C( 24924), INT16_C( 19549), INT16_C( 1012), INT16_C( 20233), INT16_C( 23198) } }, { { -INT16_C( 17822), -INT16_C( 16398), -INT16_C( 4272), -INT16_C( 21187), INT16_C( 27196), -INT16_C( 31829), -INT16_C( 6043), INT16_C( 29752) }, UINT8_C( 89), { -INT16_C( 3515), -INT16_C( 19673), -INT16_C( 15202), -INT16_C( 17485), INT16_C( 874), -INT16_C( 4379), -INT16_C( 12284), -INT16_C( 16815) }, { INT16_C( 2), INT16_C( 15), INT16_C( 14), INT16_C( 14), INT16_C( 7), INT16_C( 29), INT16_C( 9), INT16_C( 9) }, { INT16_C( 15505), -INT16_C( 16398), -INT16_C( 4272), INT16_C( 2), INT16_C( 6), -INT16_C( 31829), INT16_C( 104), INT16_C( 29752) } }, { { -INT16_C( 12157), INT16_C( 8610), INT16_C( 22164), -INT16_C( 291), -INT16_C( 15783), INT16_C( 24045), INT16_C( 16018), INT16_C( 21788) }, UINT8_C( 78), { INT16_C( 1835), -INT16_C( 6244), INT16_C( 21749), INT16_C( 26191), -INT16_C( 24975), INT16_C( 783), -INT16_C( 441), INT16_C( 6022) }, { INT16_C( 1), INT16_C( 11), INT16_C( 5), INT16_C( 16), INT16_C( 23), INT16_C( 26), INT16_C( 9), INT16_C( 3) }, { -INT16_C( 12157), INT16_C( 28), INT16_C( 679), INT16_C( 0), -INT16_C( 15783), INT16_C( 24045), INT16_C( 127), INT16_C( 21788) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i src = simde_x_mm_loadu_epi16(test_vec[i].src); simde__m128i a = simde_x_mm_loadu_epi16(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi16(test_vec[i].b); simde__m128i r = simde_mm_mask_srlv_epi16(src, test_vec[i].k, a, b); simde_test_x86_assert_equal_i16x8(r, simde_x_mm_loadu_epi16(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m128i src = simde_test_x86_random_i16x8(); simde__mmask8 k = simde_test_x86_random_mmask8(); simde__m128i a = simde_test_x86_random_i16x8(); simde__m128i b = simde_test_x86_random_i16x8(); simde__m128i r; b = simde_mm_and_si128(b, simde_mm_set1_epi16(31)); if (i == 0 ) b = simde_mm_mask_blend_epi16(0xf, b, simde_mm_set_epi16(0, 0, 0, 0, 32, -1, 31, 0)); r = simde_mm_mask_srlv_epi16(src, k, a, b); simde_test_x86_write_i16x8(2, src, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm_maskz_srlv_epi16 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const simde__mmask8 k; const int16_t a[8]; const int16_t b[8]; const int16_t r[8]; } test_vec[] = { { UINT8_C( 78), { -INT16_C( 1423), -INT16_C( 21384), -INT16_C( 6824), INT16_C( 11575), INT16_C( 13486), INT16_C( 24722), -INT16_C( 7561), -INT16_C( 13693) }, { INT16_C( 0), INT16_C( 31), -INT16_C( 1), INT16_C( 32), INT16_C( 31), INT16_C( 19), INT16_C( 9), INT16_C( 25) }, { INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 113), INT16_C( 0) } }, { UINT8_C(113), { -INT16_C( 6542), INT16_C( 22473), -INT16_C( 2531), INT16_C( 20997), INT16_C( 25992), INT16_C( 27337), -INT16_C( 27672), INT16_C( 26631) }, { INT16_C( 29), INT16_C( 14), INT16_C( 10), INT16_C( 13), INT16_C( 29), INT16_C( 12), INT16_C( 18), INT16_C( 5) }, { INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 6), INT16_C( 0), INT16_C( 0) } }, { UINT8_C( 13), { INT16_C( 15311), -INT16_C( 15062), INT16_C( 31808), -INT16_C( 22962), -INT16_C( 18363), -INT16_C( 10098), -INT16_C( 2368), INT16_C( 2006) }, { INT16_C( 4), INT16_C( 17), INT16_C( 18), INT16_C( 11), INT16_C( 1), INT16_C( 29), INT16_C( 5), INT16_C( 21) }, { INT16_C( 956), INT16_C( 0), INT16_C( 0), INT16_C( 20), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { UINT8_C(125), { -INT16_C( 18145), -INT16_C( 25410), INT16_C( 25607), -INT16_C( 16159), -INT16_C( 17678), -INT16_C( 5760), -INT16_C( 30832), INT16_C( 13421) }, { INT16_C( 24), INT16_C( 6), INT16_C( 7), INT16_C( 15), INT16_C( 15), INT16_C( 12), INT16_C( 12), INT16_C( 14) }, { INT16_C( 0), INT16_C( 0), INT16_C( 200), INT16_C( 1), INT16_C( 1), INT16_C( 14), INT16_C( 8), INT16_C( 0) } }, { UINT8_C( 89), { INT16_C( 26476), -INT16_C( 12191), INT16_C( 8521), INT16_C( 963), -INT16_C( 21343), INT16_C( 10387), -INT16_C( 14567), -INT16_C( 2720) }, { INT16_C( 14), INT16_C( 29), INT16_C( 29), INT16_C( 14), INT16_C( 16), INT16_C( 0), INT16_C( 14), INT16_C( 9) }, { INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 3), INT16_C( 0) } }, { UINT8_C(211), { INT16_C( 3050), INT16_C( 2844), INT16_C( 8142), INT16_C( 31404), -INT16_C( 11086), INT16_C( 31123), -INT16_C( 30411), -INT16_C( 23577) }, { INT16_C( 6), INT16_C( 0), INT16_C( 21), INT16_C( 26), INT16_C( 20), INT16_C( 3), INT16_C( 19), INT16_C( 18) }, { INT16_C( 47), INT16_C( 2844), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { UINT8_C( 8), { INT16_C( 2510), -INT16_C( 4650), INT16_C( 20662), -INT16_C( 30049), INT16_C( 6628), INT16_C( 28095), INT16_C( 25088), -INT16_C( 6317) }, { INT16_C( 2), INT16_C( 29), INT16_C( 23), INT16_C( 10), INT16_C( 21), INT16_C( 20), INT16_C( 28), INT16_C( 27) }, { INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 34), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { UINT8_C( 28), { -INT16_C( 10159), -INT16_C( 23854), INT16_C( 23672), -INT16_C( 28282), -INT16_C( 3300), INT16_C( 32401), INT16_C( 31046), INT16_C( 25537) }, { INT16_C( 22), INT16_C( 26), INT16_C( 2), INT16_C( 29), INT16_C( 15), INT16_C( 8), INT16_C( 10), INT16_C( 30) }, { INT16_C( 0), INT16_C( 0), INT16_C( 5918), INT16_C( 0), INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i a = simde_x_mm_loadu_epi16(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi16(test_vec[i].b); simde__m128i r = simde_mm_maskz_srlv_epi16(test_vec[i].k, a, b); simde_test_x86_assert_equal_i16x8(r, simde_x_mm_loadu_epi16(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__mmask8 k = simde_test_x86_random_mmask8(); simde__m128i a = simde_test_x86_random_i16x8(); simde__m128i b = simde_test_x86_random_i16x8(); simde__m128i r; b = simde_mm_and_si128(b, simde_mm_set1_epi16(31)); if (i == 0 ) b = simde_mm_mask_blend_epi16(0xf, b, simde_mm_set_epi16(0, 0, 0, 0, 32, -1, 31, 0)); r = simde_mm_maskz_srlv_epi16(k, a, b); simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm_mask_srlv_epi32 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int32_t src[4]; const simde__mmask8 k; const int32_t a[4]; const int32_t b[4]; const int32_t r[4]; } test_vec[] = { { { INT32_C( 1045051322), INT32_C( 813297984), INT32_C( 277504789), -INT32_C( 698453306) }, UINT8_C(195), { -INT32_C( 987978706), INT32_C( 942231910), -INT32_C( 1996244392), -INT32_C( 1572658069) }, { INT32_C( 0), INT32_C( 31), -INT32_C( 1), INT32_C( 32) }, { -INT32_C( 987978706), INT32_C( 0), INT32_C( 277504789), -INT32_C( 698453306) } }, { { INT32_C( 98037663), -INT32_C( 1724055488), INT32_C( 623002042), -INT32_C( 725064347) }, UINT8_C(231), { -INT32_C( 1092406357), INT32_C( 777798056), INT32_C( 1611754854), INT32_C( 822027072) }, { INT32_C( 26), INT32_C( 2), INT32_C( 11), INT32_C( 2) }, { INT32_C( 47), INT32_C( 194449514), INT32_C( 786989), -INT32_C( 725064347) } }, { { -INT32_C( 1744020496), INT32_C( 63334557), INT32_C( 375642325), -INT32_C( 163159045) }, UINT8_C(103), { -INT32_C( 1062604618), -INT32_C( 2132071259), -INT32_C( 786269163), INT32_C( 1354854645) }, { INT32_C( 28), INT32_C( 0), INT32_C( 20), INT32_C( 22) }, { INT32_C( 12), -INT32_C( 2132071259), INT32_C( 3346), -INT32_C( 163159045) } }, { { -INT32_C( 2138257190), INT32_C( 151025908), -INT32_C( 371514636), INT32_C( 238722194) }, UINT8_C(246), { INT32_C( 404222759), INT32_C( 2104233901), -INT32_C( 309124349), INT32_C( 164126529) }, { INT32_C( 12), INT32_C( 8), INT32_C( 2), INT32_C( 28) }, { -INT32_C( 2138257190), INT32_C( 8219663), INT32_C( 996460736), INT32_C( 238722194) } }, { { -INT32_C( 1413772034), -INT32_C( 1624758372), -INT32_C( 1936868534), INT32_C( 127227163) }, UINT8_C(157), { -INT32_C( 1679463533), INT32_C( 92098499), INT32_C( 1484913740), -INT32_C( 27908750) }, { INT32_C( 0), INT32_C( 10), INT32_C( 7), INT32_C( 20) }, { -INT32_C( 1679463533), -INT32_C( 1624758372), INT32_C( 11600888), INT32_C( 4069) } }, { { INT32_C( 916627059), INT32_C( 977019117), -INT32_C( 1902985956), -INT32_C( 1014109982) }, UINT8_C(234), { INT32_C( 1628818215), -INT32_C( 64423139), INT32_C( 74466556), -INT32_C( 1686669315) }, { INT32_C( 26), INT32_C( 9), INT32_C( 21), INT32_C( 18) }, { INT32_C( 916627059), INT32_C( 8262781), -INT32_C( 1902985956), INT32_C( 9949) } }, { { INT32_C( 905657623), INT32_C( 875635512), INT32_C( 1698210152), INT32_C( 838971160) }, UINT8_C( 92), { INT32_C( 1296460938), -INT32_C( 1465717309), -INT32_C( 1021649034), INT32_C( 1155183367) }, { INT32_C( 14), INT32_C( 0), INT32_C( 8), INT32_C( 0) }, { INT32_C( 905657623), INT32_C( 875635512), INT32_C( 12786399), INT32_C( 1155183367) } }, { { INT32_C( 1551317657), -INT32_C( 1660675801), INT32_C( 6299385), -INT32_C( 2142946351) }, UINT8_C( 74), { INT32_C( 1921733313), INT32_C( 727346316), -INT32_C( 1815285146), INT32_C( 539817702) }, { INT32_C( 14), INT32_C( 12), INT32_C( 5), INT32_C( 6) }, { INT32_C( 1551317657), INT32_C( 177574), INT32_C( 6299385), INT32_C( 8434651) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i src = simde_x_mm_loadu_epi32(test_vec[i].src); simde__m128i a = simde_x_mm_loadu_epi32(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi32(test_vec[i].b); simde__m128i r = simde_mm_mask_srlv_epi32(src, test_vec[i].k, a, b); simde_test_x86_assert_equal_i32x4(r, simde_x_mm_loadu_epi32(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m128i src = simde_test_x86_random_i32x4(); simde__mmask8 k = simde_test_x86_random_mmask8(); simde__m128i a = simde_test_x86_random_i32x4(); simde__m128i b = simde_test_x86_random_i32x4(); simde__m128i r; b = simde_mm_and_si128(b, simde_mm_set1_epi32(31)); if (i == 0 ) b = simde_mm_mask_blend_epi32(0xf, b, simde_mm_set_epi32(32, -1, 31, 0)); r = simde_mm_mask_srlv_epi32(src, k, a, b); simde_test_x86_write_i32x4(2, src, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm_maskz_srlv_epi32 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const simde__mmask8 k; const int32_t a[4]; const int32_t b[4]; const int32_t r[4]; } test_vec[] = { { UINT8_C( 77), { -INT32_C( 1025902251), INT32_C( 1177027924), -INT32_C( 953369647), INT32_C( 1865764071) }, { INT32_C( 0), INT32_C( 31), -INT32_C( 1), INT32_C( 32) }, { -INT32_C( 1025902251), INT32_C( 0), INT32_C( 0), INT32_C( 0) } }, { UINT8_C( 5), { INT32_C( 1213800003), INT32_C( 35233607), INT32_C( 401269195), -INT32_C( 743810794) }, { INT32_C( 21), INT32_C( 30), INT32_C( 20), INT32_C( 2) }, { INT32_C( 578), INT32_C( 0), INT32_C( 382), INT32_C( 0) } }, { UINT8_C(157), { INT32_C( 1592012479), INT32_C( 673900103), INT32_C( 708788688), INT32_C( 243208940) }, { INT32_C( 3), INT32_C( 21), INT32_C( 9), INT32_C( 12) }, { INT32_C( 199001559), INT32_C( 0), INT32_C( 1384352), INT32_C( 59377) } }, { UINT8_C(130), { INT32_C( 264907305), -INT32_C( 1780420012), INT32_C( 1149307441), INT32_C( 40341385) }, { INT32_C( 28), INT32_C( 1), INT32_C( 19), INT32_C( 26) }, { INT32_C( 0), INT32_C( 1257273642), INT32_C( 0), INT32_C( 0) } }, { UINT8_C( 74), { INT32_C( 1738461812), -INT32_C( 1130875726), INT32_C( 1162206389), -INT32_C( 1631500220) }, { INT32_C( 31), INT32_C( 17), INT32_C( 29), INT32_C( 10) }, { INT32_C( 0), INT32_C( 24140), INT32_C( 0), INT32_C( 2601042) } }, { UINT8_C(118), { INT32_C( 455656935), INT32_C( 986768734), INT32_C( 1920865578), INT32_C( 458366422) }, { INT32_C( 29), INT32_C( 13), INT32_C( 19), INT32_C( 9) }, { INT32_C( 0), INT32_C( 120455), INT32_C( 3663), INT32_C( 0) } }, { UINT8_C(251), { INT32_C( 1515785077), -INT32_C( 242904100), INT32_C( 801699602), -INT32_C( 544414903) }, { INT32_C( 15), INT32_C( 20), INT32_C( 17), INT32_C( 26) }, { INT32_C( 46258), INT32_C( 3864), INT32_C( 0), INT32_C( 55) } }, { UINT8_C(251), { INT32_C( 1859611354), -INT32_C( 427767569), INT32_C( 1932570512), -INT32_C( 1402794181) }, { INT32_C( 28), INT32_C( 27), INT32_C( 21), INT32_C( 15) }, { INT32_C( 6), INT32_C( 28), INT32_C( 0), INT32_C( 88262) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i a = simde_x_mm_loadu_epi32(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi32(test_vec[i].b); simde__m128i r = simde_mm_maskz_srlv_epi32(test_vec[i].k, a, b); simde_test_x86_assert_equal_i32x4(r, simde_x_mm_loadu_epi32(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__mmask8 k = simde_test_x86_random_mmask8(); simde__m128i a = simde_test_x86_random_i32x4(); simde__m128i b = simde_test_x86_random_i32x4(); simde__m128i r; b = simde_mm_and_si128(b, simde_mm_set1_epi32(31)); if (i == 0 ) b = simde_mm_mask_blend_epi32(0xf, b, simde_mm_set_epi32(32, -1, 31, 0)); r = simde_mm_maskz_srlv_epi32(k, a, b); simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm_mask_srlv_epi64 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int64_t src[2]; const simde__mmask8 k; const int64_t a[2]; const int64_t b[2]; const int64_t r[2]; } test_vec[] = { { { INT64_C( 4759340010941027350), -INT64_C( 1967368948826934569) }, UINT8_C(135), { -INT64_C( 172620600388341517), INT64_C( 4905822627423390417) }, { INT64_C( 0), INT64_C( 63) }, { -INT64_C( 172620600388341517), INT64_C( 0) } }, { { -INT64_C( 7378324697411089118), -INT64_C( 6275014858101014282) }, UINT8_C(221), { -INT64_C( 6208830575577618764), -INT64_C( 7642509024037409829) }, { -INT64_C( 1), INT64_C( 64) }, { INT64_C( 0), -INT64_C( 6275014858101014282) } }, { { -INT64_C( 2731880677689380111), -INT64_C( 6561577564133417261) }, UINT8_C( 36), { -INT64_C( 13313113293308851), INT64_C( 5878305957286381910) }, { INT64_C( 3), INT64_C( 17) }, { -INT64_C( 2731880677689380111), -INT64_C( 6561577564133417261) } }, { { -INT64_C( 2064500699318003313), -INT64_C( 1449006342675794060) }, UINT8_C( 24), { -INT64_C( 5967298555844504012), -INT64_C( 39392036025624429) }, { INT64_C( 40), INT64_C( 53) }, { -INT64_C( 2064500699318003313), -INT64_C( 1449006342675794060) } }, { { -INT64_C( 3672193763761957432), INT64_C( 8465966638073823320) }, UINT8_C(245), { INT64_C( 2985812952140843018), -INT64_C( 684730067239600956) }, { INT64_C( 41), INT64_C( 48) }, { INT64_C( 1357790), INT64_C( 8465966638073823320) } }, { { INT64_C( 7758276810793609841), INT64_C( 1442174611476369771) }, UINT8_C(126), { INT64_C( 4458855818550558004), INT64_C( 8058418049905768572) }, { INT64_C( 1), INT64_C( 36) }, { INT64_C( 7758276810793609841), INT64_C( 117265416) } }, { { -INT64_C( 5995853301519603762), INT64_C( 441605950480122924) }, UINT8_C( 60), { -INT64_C( 334657449128839626), -INT64_C( 8220608201982697206) }, { INT64_C( 26), INT64_C( 59) }, { -INT64_C( 5995853301519603762), INT64_C( 441605950480122924) } }, { { -INT64_C( 930603654640510393), -INT64_C( 2276296078673429131) }, UINT8_C(111), { -INT64_C( 7851191246785515995), -INT64_C( 1992034650794595198) }, { INT64_C( 24), INT64_C( 14) }, { INT64_C( 631544162447), INT64_C( 1004315760675961) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i src = simde_x_mm_loadu_epi64(test_vec[i].src); simde__m128i a = simde_x_mm_loadu_epi64(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi64(test_vec[i].b); simde__m128i r = simde_mm_mask_srlv_epi64(src, test_vec[i].k, a, b); simde_test_x86_assert_equal_i64x2(r, simde_x_mm_loadu_epi64(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m128i src = simde_test_x86_random_i64x2(); simde__mmask8 k = simde_test_x86_random_mmask8(); simde__m128i a = simde_test_x86_random_i64x2(); simde__m128i b = simde_test_x86_random_i64x2(); simde__m128i r; b = simde_mm_and_si128(b, simde_mm_set1_epi64x(63)); switch (i) { case 0: b = simde_mm_set_epi64x(63, 0); break; case 1: b = simde_mm_set_epi64x(64, -1); break; } r = simde_mm_mask_srlv_epi64(src, k, a, b); simde_test_x86_write_i64x2(2, src, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm_maskz_srlv_epi64 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const simde__mmask8 k; const int64_t a[2]; const int64_t b[2]; const int64_t r[2]; } test_vec[] = { { UINT8_C(197), { INT64_C( 320422378828511374), INT64_C( 4719663389677011455) }, { INT64_C( 0), INT64_C( 63) }, { INT64_C( 320422378828511374), INT64_C( 0) } }, { UINT8_C(119), { -INT64_C( 936202600172470364), INT64_C( 6540085766919084813) }, { -INT64_C( 1), INT64_C( 64) }, { INT64_C( 0), INT64_C( 0) } }, { UINT8_C( 32), { INT64_C( 1229418059044893969), -INT64_C( 447609553217144687) }, { INT64_C( 34), INT64_C( 30) }, { INT64_C( 0), INT64_C( 0) } }, { UINT8_C(182), { -INT64_C( 5041500496302640207), -INT64_C( 4624863187752802711) }, { INT64_C( 31), INT64_C( 59) }, { INT64_C( 0), INT64_C( 23) } }, { UINT8_C(123), { INT64_C( 4253148009518173342), -INT64_C( 649527669600668307) }, { INT64_C( 22), INT64_C( 63) }, { INT64_C( 1014029505137), INT64_C( 1) } }, { UINT8_C( 57), { -INT64_C( 6745255973997353025), -INT64_C( 2092873116858973773) }, { INT64_C( 16), INT64_C( 23) }, { INT64_C( 178550538630862), INT64_C( 0) } }, { UINT8_C( 76), { -INT64_C( 7221421285141039604), -INT64_C( 3372215517009287676) }, { INT64_C( 10), INT64_C( 16) }, { INT64_C( 0), INT64_C( 0) } }, { UINT8_C( 26), { INT64_C( 3790711809845331259), -INT64_C( 2562583989125759511) }, { INT64_C( 37), INT64_C( 7) }, { INT64_C( 0), INT64_C( 124095000660810875) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m128i a = simde_x_mm_loadu_epi64(test_vec[i].a); simde__m128i b = simde_x_mm_loadu_epi64(test_vec[i].b); simde__m128i r = simde_mm_maskz_srlv_epi64(test_vec[i].k, a, b); simde_test_x86_assert_equal_i64x2(r, simde_x_mm_loadu_epi64(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__mmask8 k = simde_test_x86_random_mmask8(); simde__m128i a = simde_test_x86_random_i64x2(); simde__m128i b = simde_test_x86_random_i64x2(); simde__m128i r; b = simde_mm_and_si128(b, simde_mm_set1_epi64x(63)); switch (i) { case 0: b = simde_mm_set_epi64x(63, 0); break; case 1: b = simde_mm_set_epi64x(64, -1); break; } r = simde_mm_maskz_srlv_epi64(k, a, b); simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm256_srlv_epi16 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int16_t a[16]; const int16_t b[16]; const int16_t r[16]; } test_vec[] = { { { -INT16_C( 30765), -INT16_C( 4649), INT16_C( 8331), -INT16_C( 2502), INT16_C( 27582), INT16_C( 3401), -INT16_C( 22990), INT16_C( 13442), -INT16_C( 1803), INT16_C( 4907), -INT16_C( 2305), INT16_C( 1438), -INT16_C( 6736), -INT16_C( 12403), -INT16_C( 20039), -INT16_C( 29497) }, { INT16_C( 0), INT16_C( 31), -INT16_C( 1), INT16_C( 32), INT16_C( 30), INT16_C( 11), INT16_C( 9), INT16_C( 4), INT16_C( 5), INT16_C( 17), INT16_C( 6), INT16_C( 10), INT16_C( 21), INT16_C( 6), INT16_C( 8), INT16_C( 26) }, { -INT16_C( 30765), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 1), INT16_C( 83), INT16_C( 840), INT16_C( 1991), INT16_C( 0), INT16_C( 987), INT16_C( 1), INT16_C( 0), INT16_C( 830), INT16_C( 177), INT16_C( 0) } }, { { -INT16_C( 3188), INT16_C( 19269), -INT16_C( 90), -INT16_C( 14904), INT16_C( 21250), -INT16_C( 21739), -INT16_C( 26015), INT16_C( 26185), -INT16_C( 1462), -INT16_C( 3989), INT16_C( 30025), INT16_C( 32326), INT16_C( 27660), INT16_C( 21868), -INT16_C( 6566), -INT16_C( 6442) }, { INT16_C( 25), INT16_C( 17), INT16_C( 26), INT16_C( 5), INT16_C( 13), INT16_C( 7), INT16_C( 20), INT16_C( 20), INT16_C( 10), INT16_C( 14), INT16_C( 21), INT16_C( 18), INT16_C( 1), INT16_C( 23), INT16_C( 5), INT16_C( 1) }, { INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 1582), INT16_C( 2), INT16_C( 342), INT16_C( 0), INT16_C( 0), INT16_C( 62), INT16_C( 3), INT16_C( 0), INT16_C( 0), INT16_C( 13830), INT16_C( 0), INT16_C( 1842), INT16_C( 29547) } }, { { INT16_C( 21064), INT16_C( 25214), -INT16_C( 15540), -INT16_C( 26242), INT16_C( 17694), INT16_C( 4679), INT16_C( 23381), INT16_C( 24401), INT16_C( 32731), -INT16_C( 11854), -INT16_C( 31500), -INT16_C( 10541), INT16_C( 10947), -INT16_C( 6127), INT16_C( 13143), -INT16_C( 24602) }, { INT16_C( 5), INT16_C( 1), INT16_C( 8), INT16_C( 10), INT16_C( 4), INT16_C( 25), INT16_C( 13), INT16_C( 24), INT16_C( 9), INT16_C( 25), INT16_C( 15), INT16_C( 20), INT16_C( 22), INT16_C( 26), INT16_C( 24), INT16_C( 12) }, { INT16_C( 658), INT16_C( 12607), INT16_C( 195), INT16_C( 38), INT16_C( 1105), INT16_C( 0), INT16_C( 2), INT16_C( 0), INT16_C( 63), INT16_C( 0), INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 9) } }, { { -INT16_C( 21083), -INT16_C( 12657), -INT16_C( 1492), -INT16_C( 4076), INT16_C( 28075), -INT16_C( 18423), -INT16_C( 32489), INT16_C( 16801), INT16_C( 23212), INT16_C( 23391), INT16_C( 21479), -INT16_C( 25139), INT16_C( 10072), -INT16_C( 28245), INT16_C( 22375), INT16_C( 3407) }, { INT16_C( 5), INT16_C( 27), INT16_C( 24), INT16_C( 2), INT16_C( 29), INT16_C( 28), INT16_C( 13), INT16_C( 21), INT16_C( 24), INT16_C( 20), INT16_C( 7), INT16_C( 28), INT16_C( 8), INT16_C( 17), INT16_C( 31), INT16_C( 28) }, { INT16_C( 1389), INT16_C( 0), INT16_C( 0), INT16_C( 15365), INT16_C( 0), INT16_C( 0), INT16_C( 4), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 167), INT16_C( 0), INT16_C( 39), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { { -INT16_C( 2178), INT16_C( 22517), INT16_C( 6119), INT16_C( 17627), INT16_C( 5955), -INT16_C( 3912), INT16_C( 28405), INT16_C( 11593), -INT16_C( 638), -INT16_C( 5556), INT16_C( 2174), INT16_C( 9898), -INT16_C( 1168), INT16_C( 12085), INT16_C( 21147), INT16_C( 6643) }, { INT16_C( 9), INT16_C( 16), INT16_C( 0), INT16_C( 20), INT16_C( 3), INT16_C( 19), INT16_C( 27), INT16_C( 5), INT16_C( 25), INT16_C( 7), INT16_C( 25), INT16_C( 29), INT16_C( 12), INT16_C( 24), INT16_C( 4), INT16_C( 1) }, { INT16_C( 123), INT16_C( 0), INT16_C( 6119), INT16_C( 0), INT16_C( 744), INT16_C( 0), INT16_C( 0), INT16_C( 362), INT16_C( 0), INT16_C( 468), INT16_C( 0), INT16_C( 0), INT16_C( 15), INT16_C( 0), INT16_C( 1321), INT16_C( 3321) } }, { { -INT16_C( 11948), INT16_C( 21534), -INT16_C( 27875), -INT16_C( 32617), -INT16_C( 13632), INT16_C( 23512), INT16_C( 23878), -INT16_C( 16520), -INT16_C( 32722), INT16_C( 1974), -INT16_C( 11471), -INT16_C( 8623), -INT16_C( 14043), -INT16_C( 13787), -INT16_C( 31179), -INT16_C( 30280) }, { INT16_C( 24), INT16_C( 29), INT16_C( 9), INT16_C( 21), INT16_C( 30), INT16_C( 4), INT16_C( 10), INT16_C( 3), INT16_C( 29), INT16_C( 31), INT16_C( 12), INT16_C( 12), INT16_C( 26), INT16_C( 27), INT16_C( 24), INT16_C( 24) }, { INT16_C( 0), INT16_C( 0), INT16_C( 73), INT16_C( 0), INT16_C( 0), INT16_C( 1469), INT16_C( 23), INT16_C( 6127), INT16_C( 0), INT16_C( 0), INT16_C( 13), INT16_C( 13), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { { INT16_C( 5450), -INT16_C( 19707), -INT16_C( 1399), -INT16_C( 14371), INT16_C( 25031), -INT16_C( 3765), -INT16_C( 29090), -INT16_C( 9399), -INT16_C( 22137), INT16_C( 21386), INT16_C( 5721), -INT16_C( 11452), INT16_C( 200), INT16_C( 386), -INT16_C( 17805), -INT16_C( 17007) }, { INT16_C( 15), INT16_C( 17), INT16_C( 17), INT16_C( 31), INT16_C( 15), INT16_C( 10), INT16_C( 24), INT16_C( 9), INT16_C( 29), INT16_C( 18), INT16_C( 10), INT16_C( 10), INT16_C( 23), INT16_C( 19), INT16_C( 7), INT16_C( 8) }, { INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 60), INT16_C( 0), INT16_C( 109), INT16_C( 0), INT16_C( 0), INT16_C( 5), INT16_C( 52), INT16_C( 0), INT16_C( 0), INT16_C( 372), INT16_C( 189) } }, { { -INT16_C( 18052), INT16_C( 3535), -INT16_C( 4601), -INT16_C( 18842), -INT16_C( 20135), INT16_C( 20932), -INT16_C( 20923), -INT16_C( 32047), -INT16_C( 23775), -INT16_C( 21736), -INT16_C( 32070), -INT16_C( 11778), INT16_C( 20847), INT16_C( 5724), -INT16_C( 23498), -INT16_C( 19828) }, { INT16_C( 29), INT16_C( 0), INT16_C( 10), INT16_C( 26), INT16_C( 23), INT16_C( 20), INT16_C( 13), INT16_C( 30), INT16_C( 9), INT16_C( 26), INT16_C( 25), INT16_C( 21), INT16_C( 9), INT16_C( 30), INT16_C( 21), INT16_C( 18) }, { INT16_C( 0), INT16_C( 3535), INT16_C( 59), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 5), INT16_C( 0), INT16_C( 81), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 40), INT16_C( 0), INT16_C( 0), INT16_C( 0) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m256i a = simde_x_mm256_loadu_epi16(test_vec[i].a); simde__m256i b = simde_x_mm256_loadu_epi16(test_vec[i].b); simde__m256i r = simde_mm256_srlv_epi16(a, b); simde_test_x86_assert_equal_i16x16(r, simde_x_mm256_loadu_epi16(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m256i r, a = simde_test_x86_random_i16x16(), b = simde_test_x86_random_i16x16(); b = simde_mm256_and_si256(b, simde_mm256_set1_epi16(31)); if (i == 0 ) b = simde_mm256_mask_blend_epi16(0xf, b, simde_mm256_set_epi16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, -1, 31, 0)); r = simde_mm256_srlv_epi16(a, b); simde_test_x86_write_i16x16(2, a, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i16x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x16(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm512_srlv_epi16 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int16_t a[32]; const int16_t b[32]; const int16_t r[32]; } test_vec[] = { { { -INT16_C( 10059), -INT16_C( 29715), INT16_C( 14501), -INT16_C( 6071), -INT16_C( 7543), -INT16_C( 19762), -INT16_C( 5974), INT16_C( 26858), INT16_C( 17414), -INT16_C( 28813), INT16_C( 23223), -INT16_C( 29510), -INT16_C( 13013), -INT16_C( 17439), -INT16_C( 13407), INT16_C( 22246), -INT16_C( 11356), INT16_C( 18913), INT16_C( 10763), -INT16_C( 27599), -INT16_C( 243), -INT16_C( 18618), INT16_C( 12520), -INT16_C( 4576), -INT16_C( 27788), INT16_C( 11134), INT16_C( 14573), INT16_C( 6584), -INT16_C( 26363), -INT16_C( 22828), -INT16_C( 17820), INT16_C( 2300) }, { INT16_C( 0), INT16_C( 31), -INT16_C( 1), INT16_C( 32), INT16_C( 3), INT16_C( 12), INT16_C( 4), INT16_C( 25), INT16_C( 0), INT16_C( 4), INT16_C( 15), INT16_C( 6), INT16_C( 21), INT16_C( 26), INT16_C( 20), INT16_C( 2), INT16_C( 20), INT16_C( 27), INT16_C( 24), INT16_C( 17), INT16_C( 28), INT16_C( 6), INT16_C( 10), INT16_C( 26), INT16_C( 23), INT16_C( 23), INT16_C( 27), INT16_C( 27), INT16_C( 24), INT16_C( 10), INT16_C( 12), INT16_C( 15) }, { -INT16_C( 10059), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 7249), INT16_C( 11), INT16_C( 3722), INT16_C( 0), INT16_C( 17414), INT16_C( 2295), INT16_C( 0), INT16_C( 562), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 5561), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 733), INT16_C( 12), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 41), INT16_C( 11), INT16_C( 0) } }, { { INT16_C( 10945), -INT16_C( 26180), INT16_C( 28050), INT16_C( 28660), -INT16_C( 17686), INT16_C( 21744), -INT16_C( 29990), -INT16_C( 11970), -INT16_C( 27032), INT16_C( 17367), -INT16_C( 3468), -INT16_C( 21324), INT16_C( 7880), INT16_C( 21753), -INT16_C( 6005), INT16_C( 19828), INT16_C( 12306), -INT16_C( 23066), -INT16_C( 9315), -INT16_C( 30956), INT16_C( 1173), INT16_C( 28636), INT16_C( 6798), -INT16_C( 2496), INT16_C( 6320), INT16_C( 9274), -INT16_C( 4598), -INT16_C( 11567), -INT16_C( 13812), -INT16_C( 26586), -INT16_C( 25933), -INT16_C( 14875) }, { INT16_C( 10), INT16_C( 10), INT16_C( 6), INT16_C( 15), INT16_C( 2), INT16_C( 11), INT16_C( 5), INT16_C( 7), INT16_C( 4), INT16_C( 26), INT16_C( 15), INT16_C( 1), INT16_C( 22), INT16_C( 19), INT16_C( 2), INT16_C( 14), INT16_C( 4), INT16_C( 20), INT16_C( 23), INT16_C( 6), INT16_C( 14), INT16_C( 10), INT16_C( 30), INT16_C( 9), INT16_C( 18), INT16_C( 16), INT16_C( 15), INT16_C( 29), INT16_C( 25), INT16_C( 14), INT16_C( 9), INT16_C( 7) }, { INT16_C( 10), INT16_C( 38), INT16_C( 438), INT16_C( 0), INT16_C( 11962), INT16_C( 10), INT16_C( 1110), INT16_C( 418), INT16_C( 2406), INT16_C( 0), INT16_C( 1), INT16_C( 22106), INT16_C( 0), INT16_C( 0), INT16_C( 14882), INT16_C( 1), INT16_C( 769), INT16_C( 0), INT16_C( 0), INT16_C( 540), INT16_C( 0), INT16_C( 27), INT16_C( 0), INT16_C( 123), INT16_C( 0), INT16_C( 0), INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 2), INT16_C( 77), INT16_C( 395) } }, { { -INT16_C( 9290), INT16_C( 27959), -INT16_C( 24930), INT16_C( 11431), -INT16_C( 3408), -INT16_C( 20832), -INT16_C( 22205), -INT16_C( 10576), -INT16_C( 16275), -INT16_C( 17001), -INT16_C( 27470), -INT16_C( 21662), INT16_C( 4453), -INT16_C( 4538), INT16_C( 19854), INT16_C( 17659), INT16_C( 12841), -INT16_C( 14415), INT16_C( 22992), -INT16_C( 32524), -INT16_C( 27573), -INT16_C( 29138), -INT16_C( 8643), -INT16_C( 21660), -INT16_C( 865), INT16_C( 20840), -INT16_C( 13680), -INT16_C( 2564), INT16_C( 17115), INT16_C( 27107), -INT16_C( 8561), -INT16_C( 18259) }, { INT16_C( 17), INT16_C( 0), INT16_C( 24), INT16_C( 2), INT16_C( 8), INT16_C( 17), INT16_C( 15), INT16_C( 16), INT16_C( 18), INT16_C( 31), INT16_C( 3), INT16_C( 24), INT16_C( 29), INT16_C( 8), INT16_C( 26), INT16_C( 5), INT16_C( 20), INT16_C( 12), INT16_C( 25), INT16_C( 15), INT16_C( 31), INT16_C( 6), INT16_C( 23), INT16_C( 28), INT16_C( 15), INT16_C( 11), INT16_C( 22), INT16_C( 17), INT16_C( 31), INT16_C( 31), INT16_C( 14), INT16_C( 4) }, { INT16_C( 0), INT16_C( 27959), INT16_C( 0), INT16_C( 2857), INT16_C( 242), INT16_C( 0), INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 4758), INT16_C( 0), INT16_C( 0), INT16_C( 238), INT16_C( 0), INT16_C( 551), INT16_C( 0), INT16_C( 12), INT16_C( 0), INT16_C( 1), INT16_C( 0), INT16_C( 568), INT16_C( 0), INT16_C( 0), INT16_C( 1), INT16_C( 10), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 3), INT16_C( 2954) } }, { { -INT16_C( 20375), INT16_C( 17071), -INT16_C( 8385), INT16_C( 24099), INT16_C( 19104), INT16_C( 22508), -INT16_C( 30623), -INT16_C( 12288), INT16_C( 11139), -INT16_C( 9885), -INT16_C( 2865), -INT16_C( 12596), -INT16_C( 5139), -INT16_C( 1273), -INT16_C( 29712), INT16_C( 22910), INT16_C( 11835), INT16_C( 31388), -INT16_C( 16627), -INT16_C( 21032), -INT16_C( 15351), INT16_C( 27140), INT16_C( 1100), -INT16_C( 12485), -INT16_C( 25041), -INT16_C( 344), INT16_C( 29842), INT16_C( 32716), -INT16_C( 11424), INT16_C( 20602), -INT16_C( 1698), -INT16_C( 25943) }, { INT16_C( 7), INT16_C( 20), INT16_C( 5), INT16_C( 1), INT16_C( 17), INT16_C( 25), INT16_C( 9), INT16_C( 13), INT16_C( 18), INT16_C( 23), INT16_C( 10), INT16_C( 3), INT16_C( 23), INT16_C( 26), INT16_C( 22), INT16_C( 15), INT16_C( 9), INT16_C( 17), INT16_C( 17), INT16_C( 29), INT16_C( 23), INT16_C( 0), INT16_C( 10), INT16_C( 25), INT16_C( 4), INT16_C( 0), INT16_C( 19), INT16_C( 25), INT16_C( 0), INT16_C( 0), INT16_C( 23), INT16_C( 20) }, { INT16_C( 352), INT16_C( 0), INT16_C( 1785), INT16_C( 12049), INT16_C( 0), INT16_C( 0), INT16_C( 68), INT16_C( 6), INT16_C( 0), INT16_C( 0), INT16_C( 61), INT16_C( 6617), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 23), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 27140), INT16_C( 1), INT16_C( 0), INT16_C( 2530), -INT16_C( 344), INT16_C( 0), INT16_C( 0), -INT16_C( 11424), INT16_C( 20602), INT16_C( 0), INT16_C( 0) } }, { { INT16_C( 17971), -INT16_C( 6961), INT16_C( 27736), INT16_C( 20551), -INT16_C( 22654), INT16_C( 19504), INT16_C( 10709), INT16_C( 31080), INT16_C( 26681), INT16_C( 11528), -INT16_C( 7733), INT16_C( 3287), -INT16_C( 26796), INT16_C( 3107), INT16_C( 14087), INT16_C( 14925), INT16_C( 7293), -INT16_C( 10721), INT16_C( 26249), INT16_C( 2854), INT16_C( 22029), -INT16_C( 7336), -INT16_C( 16256), -INT16_C( 18084), INT16_C( 25641), -INT16_C( 2842), -INT16_C( 16827), -INT16_C( 26112), INT16_C( 9045), INT16_C( 23718), -INT16_C( 3237), -INT16_C( 10089) }, { INT16_C( 15), INT16_C( 14), INT16_C( 28), INT16_C( 4), INT16_C( 11), INT16_C( 12), INT16_C( 28), INT16_C( 4), INT16_C( 13), INT16_C( 26), INT16_C( 9), INT16_C( 13), INT16_C( 30), INT16_C( 27), INT16_C( 6), INT16_C( 17), INT16_C( 8), INT16_C( 14), INT16_C( 20), INT16_C( 13), INT16_C( 14), INT16_C( 10), INT16_C( 3), INT16_C( 16), INT16_C( 26), INT16_C( 3), INT16_C( 4), INT16_C( 1), INT16_C( 3), INT16_C( 27), INT16_C( 14), INT16_C( 31) }, { INT16_C( 0), INT16_C( 3), INT16_C( 0), INT16_C( 1284), INT16_C( 20), INT16_C( 4), INT16_C( 0), INT16_C( 1942), INT16_C( 3), INT16_C( 0), INT16_C( 112), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 220), INT16_C( 0), INT16_C( 28), INT16_C( 3), INT16_C( 0), INT16_C( 0), INT16_C( 1), INT16_C( 56), INT16_C( 6160), INT16_C( 0), INT16_C( 0), INT16_C( 7836), INT16_C( 3044), INT16_C( 19712), INT16_C( 1130), INT16_C( 0), INT16_C( 3), INT16_C( 0) } }, { { INT16_C( 11597), INT16_C( 474), INT16_C( 10431), INT16_C( 19937), INT16_C( 27522), INT16_C( 17815), -INT16_C( 14502), -INT16_C( 27435), INT16_C( 31185), -INT16_C( 18729), INT16_C( 31177), INT16_C( 28056), -INT16_C( 11051), -INT16_C( 31658), -INT16_C( 27327), -INT16_C( 29126), INT16_C( 5570), -INT16_C( 32369), INT16_C( 28733), -INT16_C( 16434), INT16_C( 26332), INT16_C( 13828), -INT16_C( 9939), -INT16_C( 53), -INT16_C( 23982), INT16_C( 7349), INT16_C( 19739), -INT16_C( 3703), -INT16_C( 8415), INT16_C( 25205), -INT16_C( 20619), INT16_C( 14320) }, { INT16_C( 4), INT16_C( 25), INT16_C( 16), INT16_C( 0), INT16_C( 13), INT16_C( 3), INT16_C( 30), INT16_C( 26), INT16_C( 16), INT16_C( 12), INT16_C( 28), INT16_C( 29), INT16_C( 21), INT16_C( 0), INT16_C( 1), INT16_C( 1), INT16_C( 17), INT16_C( 7), INT16_C( 2), INT16_C( 14), INT16_C( 12), INT16_C( 10), INT16_C( 31), INT16_C( 27), INT16_C( 19), INT16_C( 27), INT16_C( 29), INT16_C( 14), INT16_C( 10), INT16_C( 28), INT16_C( 31), INT16_C( 18) }, { INT16_C( 724), INT16_C( 0), INT16_C( 0), INT16_C( 19937), INT16_C( 3), INT16_C( 2226), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 11), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 31658), INT16_C( 19104), INT16_C( 18205), INT16_C( 0), INT16_C( 259), INT16_C( 7183), INT16_C( 2), INT16_C( 6), INT16_C( 13), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 3), INT16_C( 55), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { { INT16_C( 31096), -INT16_C( 9486), -INT16_C( 16223), -INT16_C( 29143), -INT16_C( 27503), INT16_C( 12312), -INT16_C( 27880), INT16_C( 27711), -INT16_C( 9445), INT16_C( 14556), -INT16_C( 29965), -INT16_C( 310), INT16_C( 18136), -INT16_C( 18262), -INT16_C( 17181), INT16_C( 23464), -INT16_C( 26059), -INT16_C( 10443), INT16_C( 24410), -INT16_C( 5275), INT16_C( 32243), INT16_C( 2843), INT16_C( 23313), INT16_C( 11383), INT16_C( 21302), INT16_C( 10596), INT16_C( 11997), -INT16_C( 18905), -INT16_C( 11916), INT16_C( 22382), INT16_C( 5773), -INT16_C( 15437) }, { INT16_C( 17), INT16_C( 26), INT16_C( 7), INT16_C( 23), INT16_C( 28), INT16_C( 6), INT16_C( 13), INT16_C( 25), INT16_C( 17), INT16_C( 13), INT16_C( 11), INT16_C( 4), INT16_C( 6), INT16_C( 23), INT16_C( 9), INT16_C( 22), INT16_C( 18), INT16_C( 5), INT16_C( 15), INT16_C( 20), INT16_C( 15), INT16_C( 25), INT16_C( 24), INT16_C( 0), INT16_C( 16), INT16_C( 23), INT16_C( 1), INT16_C( 27), INT16_C( 14), INT16_C( 27), INT16_C( 28), INT16_C( 17) }, { INT16_C( 0), INT16_C( 0), INT16_C( 385), INT16_C( 0), INT16_C( 0), INT16_C( 192), INT16_C( 4), INT16_C( 0), INT16_C( 0), INT16_C( 1), INT16_C( 17), INT16_C( 4076), INT16_C( 283), INT16_C( 0), INT16_C( 94), INT16_C( 0), INT16_C( 0), INT16_C( 1721), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 11383), INT16_C( 0), INT16_C( 0), INT16_C( 5998), INT16_C( 0), INT16_C( 3), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }, { { -INT16_C( 10334), INT16_C( 20777), INT16_C( 23987), -INT16_C( 23939), INT16_C( 14296), INT16_C( 4351), -INT16_C( 86), INT16_C( 14937), -INT16_C( 28468), -INT16_C( 29418), -INT16_C( 19860), INT16_C( 23317), -INT16_C( 3996), -INT16_C( 7822), INT16_C( 25825), -INT16_C( 31984), INT16_C( 14651), -INT16_C( 4395), INT16_C( 21142), INT16_C( 28305), -INT16_C( 28535), INT16_C( 13182), -INT16_C( 10353), INT16_C( 23406), -INT16_C( 31640), -INT16_C( 11032), -INT16_C( 714), -INT16_C( 25809), -INT16_C( 23827), -INT16_C( 12420), -INT16_C( 29690), INT16_C( 16722) }, { INT16_C( 5), INT16_C( 15), INT16_C( 26), INT16_C( 10), INT16_C( 16), INT16_C( 23), INT16_C( 0), INT16_C( 26), INT16_C( 9), INT16_C( 28), INT16_C( 0), INT16_C( 27), INT16_C( 14), INT16_C( 29), INT16_C( 3), INT16_C( 21), INT16_C( 23), INT16_C( 3), INT16_C( 5), INT16_C( 20), INT16_C( 22), INT16_C( 21), INT16_C( 16), INT16_C( 30), INT16_C( 18), INT16_C( 26), INT16_C( 6), INT16_C( 1), INT16_C( 12), INT16_C( 8), INT16_C( 13), INT16_C( 23) }, { INT16_C( 1725), INT16_C( 0), INT16_C( 0), INT16_C( 40), INT16_C( 0), INT16_C( 0), -INT16_C( 86), INT16_C( 0), INT16_C( 72), INT16_C( 0), -INT16_C( 19860), INT16_C( 0), INT16_C( 3), INT16_C( 0), INT16_C( 3228), INT16_C( 0), INT16_C( 0), INT16_C( 7642), INT16_C( 660), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 1012), INT16_C( 19863), INT16_C( 10), INT16_C( 207), INT16_C( 4), INT16_C( 0) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m512i a = simde_mm512_loadu_epi16(test_vec[i].a); simde__m512i b = simde_mm512_loadu_epi16(test_vec[i].b); simde__m512i r = simde_mm512_srlv_epi16(a, b); simde_test_x86_assert_equal_i16x32(r, simde_mm512_loadu_epi16(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m512i r, a = simde_test_x86_random_i16x32(), b = simde_test_x86_random_i16x32(); b = simde_mm512_and_si512(b, simde_mm512_set1_epi16(31)); if (i == 0 ) b = simde_mm512_mask_blend_epi16(0xf, b, simde_mm512_set_epi16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, -1, 31, 0)); r = simde_mm512_srlv_epi16(a, b); simde_test_x86_write_i16x32(2, a, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i16x32(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i16x32(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm512_srlv_epi32 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int32_t a[16]; const int32_t b[16]; const int32_t r[16]; } test_vec[] = { { { -INT32_C( 2112154129), -INT32_C( 934216458), INT32_C( 84870349), -INT32_C( 1586062879), -INT32_C( 576350279), -INT32_C( 828904262), -INT32_C( 1116817424), INT32_C( 2111336333), INT32_C( 2063594628), -INT32_C( 1119727376), INT32_C( 918704724), -INT32_C( 1529398805), -INT32_C( 1971225392), INT32_C( 1498945641), INT32_C( 1544996559), -INT32_C( 1160122826) }, { INT32_C( 0), INT32_C( 31), -INT32_C( 1), INT32_C( 32), INT32_C( 7), INT32_C( 17), INT32_C( 6), INT32_C( 14), INT32_C( 15), INT32_C( 3), INT32_C( 7), INT32_C( 20), INT32_C( 19), INT32_C( 22), INT32_C( 21), INT32_C( 24) }, { -INT32_C( 2112154129), INT32_C( 1), INT32_C( 0), INT32_C( 0), INT32_C( 29051695), INT32_C( 26443), INT32_C( 49658591), INT32_C( 128865), INT32_C( 62975), INT32_C( 396904990), INT32_C( 7177380), INT32_C( 2637), INT32_C( 4432), INT32_C( 357), INT32_C( 736), INT32_C( 186) } }, { { INT32_C( 2111887322), INT32_C( 1391023851), INT32_C( 876939904), -INT32_C( 672098940), INT32_C( 1092296139), -INT32_C( 390258669), INT32_C( 1535931714), -INT32_C( 29106140), -INT32_C( 1552211017), -INT32_C( 84581254), -INT32_C( 215073937), -INT32_C( 1681252400), INT32_C( 1339942204), INT32_C( 1211603462), INT32_C( 883147536), INT32_C( 1530062499) }, { INT32_C( 10), INT32_C( 17), INT32_C( 14), INT32_C( 11), INT32_C( 3), INT32_C( 17), INT32_C( 17), INT32_C( 27), INT32_C( 20), INT32_C( 1), INT32_C( 20), INT32_C( 23), INT32_C( 31), INT32_C( 11), INT32_C( 10), INT32_C( 15) }, { INT32_C( 2062389), INT32_C( 10612), INT32_C( 53524), INT32_C( 1768978), INT32_C( 136537017), INT32_C( 29790), INT32_C( 11718), INT32_C( 31), INT32_C( 2615), INT32_C( 2105193021), INT32_C( 3890), INT32_C( 311), INT32_C( 0), INT32_C( 591603), INT32_C( 862448), INT32_C( 46693) } }, { { -INT32_C( 1861561264), -INT32_C( 1878929188), -INT32_C( 2112917494), -INT32_C( 132344200), -INT32_C( 544612236), INT32_C( 1604074261), -INT32_C( 744206781), -INT32_C( 1600655536), -INT32_C( 1607294524), INT32_C( 2083533681), INT32_C( 486424483), INT32_C( 1242831574), INT32_C( 254385658), INT32_C( 477021912), INT32_C( 1710166804), -INT32_C( 972716542) }, { INT32_C( 7), INT32_C( 11), INT32_C( 22), INT32_C( 13), INT32_C( 27), INT32_C( 5), INT32_C( 24), INT32_C( 5), INT32_C( 28), INT32_C( 30), INT32_C( 11), INT32_C( 30), INT32_C( 22), INT32_C( 28), INT32_C( 29), INT32_C( 25) }, { INT32_C( 19010984), INT32_C( 1179706), INT32_C( 520), INT32_C( 508132), INT32_C( 27), INT32_C( 50127320), INT32_C( 211), INT32_C( 84197242), INT32_C( 10), INT32_C( 1), INT32_C( 237511), INT32_C( 1), INT32_C( 60), INT32_C( 1), INT32_C( 3), INT32_C( 99) } }, { { -INT32_C( 1201909191), -INT32_C( 1760792213), INT32_C( 820972977), INT32_C( 428502787), -INT32_C( 2095736794), INT32_C( 328731254), INT32_C( 418736223), -INT32_C( 210943047), INT32_C( 28035477), -INT32_C( 325535942), -INT32_C( 937654332), INT32_C( 501327607), -INT32_C( 1264519618), INT32_C( 1623668737), INT32_C( 1517862048), -INT32_C( 1806834177) }, { INT32_C( 14), INT32_C( 15), INT32_C( 21), INT32_C( 22), INT32_C( 20), INT32_C( 2), INT32_C( 11), INT32_C( 18), INT32_C( 2), INT32_C( 2), INT32_C( 13), INT32_C( 31), INT32_C( 22), INT32_C( 16), INT32_C( 10), INT32_C( 3) }, { INT32_C( 188785), INT32_C( 77336), INT32_C( 391), INT32_C( 102), INT32_C( 2097), INT32_C( 82182813), INT32_C( 204461), INT32_C( 15579), INT32_C( 7008869), INT32_C( 992357838), INT32_C( 409828), INT32_C( 0), INT32_C( 722), INT32_C( 24775), INT32_C( 1482287), INT32_C( 311016639) } }, { { -INT32_C( 1126783910), INT32_C( 265542881), INT32_C( 2094241309), INT32_C( 435120930), -INT32_C( 38635636), INT32_C( 1585024628), INT32_C( 1780154119), INT32_C( 2142197285), -INT32_C( 600078853), INT32_C( 2146111073), -INT32_C( 956580188), -INT32_C( 1226839254), -INT32_C( 676097694), INT32_C( 641018911), INT32_C( 1368412204), -INT32_C( 1580187738) }, { INT32_C( 5), INT32_C( 25), INT32_C( 8), INT32_C( 12), INT32_C( 20), INT32_C( 8), INT32_C( 11), INT32_C( 10), INT32_C( 0), INT32_C( 26), INT32_C( 28), INT32_C( 29), INT32_C( 25), INT32_C( 23), INT32_C( 11), INT32_C( 17) }, { INT32_C( 99005730), INT32_C( 7), INT32_C( 8180630), INT32_C( 106230), INT32_C( 4059), INT32_C( 6191502), INT32_C( 869215), INT32_C( 2091989), -INT32_C( 600078853), INT32_C( 31), INT32_C( 12), INT32_C( 5), INT32_C( 107), INT32_C( 76), INT32_C( 668170), INT32_C( 20712) } }, { { -INT32_C( 756294824), -INT32_C( 1284177546), -INT32_C( 1736742501), INT32_C( 529150566), INT32_C( 650219439), -INT32_C( 622233649), -INT32_C( 470770286), INT32_C( 1014355428), INT32_C( 638476464), -INT32_C( 36076703), INT32_C( 1402295789), INT32_C( 913514375), INT32_C( 2120037551), INT32_C( 1029260971), -INT32_C( 954119709), -INT32_C( 838625762) }, { INT32_C( 22), INT32_C( 21), INT32_C( 3), INT32_C( 9), INT32_C( 28), INT32_C( 4), INT32_C( 25), INT32_C( 28), INT32_C( 2), INT32_C( 7), INT32_C( 8), INT32_C( 23), INT32_C( 20), INT32_C( 17), INT32_C( 6), INT32_C( 30) }, { INT32_C( 843), INT32_C( 1435), INT32_C( 319778099), INT32_C( 1033497), INT32_C( 2), INT32_C( 229545852), INT32_C( 113), INT32_C( 3), INT32_C( 159619116), INT32_C( 33272582), INT32_C( 5477717), INT32_C( 108), INT32_C( 2021), INT32_C( 7852), INT32_C( 52200743), INT32_C( 3) } }, { { INT32_C( 131636863), INT32_C( 78721372), -INT32_C( 659224992), -INT32_C( 1328799940), -INT32_C( 240588864), INT32_C( 1861945192), INT32_C( 1385299092), INT32_C( 1112786370), -INT32_C( 1085723805), -INT32_C( 1111229860), INT32_C( 1033206017), INT32_C( 1508794776), -INT32_C( 1337289144), INT32_C( 840910494), INT32_C( 92647490), -INT32_C( 649602955) }, { INT32_C( 3), INT32_C( 10), INT32_C( 21), INT32_C( 18), INT32_C( 13), INT32_C( 23), INT32_C( 26), INT32_C( 27), INT32_C( 21), INT32_C( 29), INT32_C( 11), INT32_C( 11), INT32_C( 23), INT32_C( 15), INT32_C( 5), INT32_C( 12) }, { INT32_C( 16454607), INT32_C( 76876), INT32_C( 1733), INT32_C( 11315), INT32_C( 494919), INT32_C( 221), INT32_C( 20), INT32_C( 8), INT32_C( 1530), INT32_C( 5), INT32_C( 504495), INT32_C( 736716), INT32_C( 352), INT32_C( 25662), INT32_C( 2895234), INT32_C( 889981) } }, { { -INT32_C( 2128487324), -INT32_C( 2123059754), INT32_C( 222286849), INT32_C( 845568250), -INT32_C( 859788675), INT32_C( 318105613), INT32_C( 1536389039), INT32_C( 1971097873), INT32_C( 1140301421), INT32_C( 1288006475), INT32_C( 962135103), -INT32_C( 630472867), INT32_C( 2007379050), -INT32_C( 1014392044), INT32_C( 471735306), INT32_C( 462527406) }, { INT32_C( 25), INT32_C( 19), INT32_C( 8), INT32_C( 9), INT32_C( 3), INT32_C( 1), INT32_C( 16), INT32_C( 21), INT32_C( 1), INT32_C( 29), INT32_C( 12), INT32_C( 11), INT32_C( 16), INT32_C( 8), INT32_C( 28), INT32_C( 29) }, { INT32_C( 64), INT32_C( 4142), INT32_C( 868308), INT32_C( 1651500), INT32_C( 429397327), INT32_C( 159052806), INT32_C( 23443), INT32_C( 939), INT32_C( 570150710), INT32_C( 2), INT32_C( 234896), INT32_C( 1789303), INT32_C( 30630), INT32_C( 12814747), INT32_C( 1), INT32_C( 0) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m512i a = simde_mm512_loadu_epi32(test_vec[i].a); simde__m512i b = simde_mm512_loadu_epi32(test_vec[i].b); simde__m512i r = simde_mm512_srlv_epi32(a, b); simde_test_x86_assert_equal_i32x16(r, simde_mm512_loadu_epi32(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m512i r, a = simde_test_x86_random_i32x16(), b = simde_test_x86_random_i32x16(); b = simde_mm512_and_si512(b, simde_mm512_set1_epi32(31)); if (i == 0 ) b = simde_mm512_mask_blend_epi32(0xf, b, simde_mm512_set_epi32(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, -1, 31, 0)); r = simde_mm512_srlv_epi32(a, b); simde_test_x86_write_i32x16(2, a, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i32x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i32x16(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } static int test_simde_mm512_srlv_epi64 (SIMDE_MUNIT_TEST_ARGS) { #if 1 static const struct { const int64_t a[8]; const int64_t b[8]; const int64_t r[8]; } test_vec[] = { { { INT64_C( 6966218786012918026), -INT64_C( 5618205476508002450), -INT64_C( 1426445156367503757), -INT64_C( 1837648021358286045), -INT64_C( 2539650388535184819), -INT64_C( 1583686562416863375), -INT64_C( 8383106113674598388), INT64_C( 1181749340145411748) }, { INT64_C( 0), INT64_C( 63), -INT64_C( 1), INT64_C( 64), INT64_C( 8), INT64_C( 48), INT64_C( 12), INT64_C( 42) }, { INT64_C( 6966218786012918026), INT64_C( 1), INT64_C( 0), INT64_C( 0), INT64_C( 62137084707712370), INT64_C( 59909), INT64_C( 2456942861336658), INT64_C( 268698) } }, { { -INT64_C( 4046179603180281090), INT64_C( 3795197655086337113), INT64_C( 6970565303225370834), -INT64_C( 4283339106891513924), -INT64_C( 106883913000185689), INT64_C( 7543103411622860113), INT64_C( 4637673542611507141), -INT64_C( 5107767993907966574) }, { INT64_C( 32), INT64_C( 16), INT64_C( 29), INT64_C( 60), INT64_C( 8), INT64_C( 51), INT64_C( 35), INT64_C( 20) }, { INT64_C( 3352892694), INT64_C( 57910120469457), INT64_C( 12983689649), INT64_C( 12), INT64_C( 71640078752770960), INT64_C( 3349), INT64_C( 134974064), INT64_C( 12721038894464) } }, { { -INT64_C( 8993731813987568914), INT64_C( 4658525066509246244), INT64_C( 8976307826881951255), -INT64_C( 2729782890559505209), INT64_C( 4549462570720903694), INT64_C( 3056988749443738447), INT64_C( 5761990167718086418), INT64_C( 2555505904528996527) }, { INT64_C( 61), INT64_C( 15), INT64_C( 24), INT64_C( 34), INT64_C( 25), INT64_C( 62), INT64_C( 39), INT64_C( 31) }, { INT64_C( 4), INT64_C( 142166902664466), INT64_C( 535029639415), INT64_C( 914847547), INT64_C( 135584550223), INT64_C( 0), INT64_C( 10480999), INT64_C( 1190000169) } }, { { INT64_C( 3915167907981510217), -INT64_C( 6518895596913605547), INT64_C( 6982693785598471437), -INT64_C( 979970894321009915), INT64_C( 8243081679749162423), -INT64_C( 4019676266592108397), -INT64_C( 6104004055400373270), INT64_C( 4111781521073115507) }, { INT64_C( 32), INT64_C( 13), INT64_C( 23), INT64_C( 18), INT64_C( 3), INT64_C( 45), INT64_C( 10), INT64_C( 53) }, { INT64_C( 911571064), INT64_C( 1456036191015130), INT64_C( 832401965331), INT64_C( 66630451886705), INT64_C( 1030385209968645302), INT64_C( 410041), INT64_C( 12053457049130056), INT64_C( 456) } }, { { INT64_C( 6057686915148406591), -INT64_C( 7078250056236356866), INT64_C( 4598512266726445908), -INT64_C( 7639947378485785139), INT64_C( 2652382851266767955), -INT64_C( 3926188394952363054), INT64_C( 341291946128573683), INT64_C( 3601860306028357904) }, { INT64_C( 12), INT64_C( 46), INT64_C( 59), INT64_C( 39), INT64_C( 41), INT64_C( 6), INT64_C( 53), INT64_C( 33) }, { INT64_C( 1478927469518653), INT64_C( 161556), INT64_C( 7), INT64_C( 19657448), INT64_C( 1206164), INT64_C( 226883682480581071), INT64_C( 37), INT64_C( 419311726) } }, { { INT64_C( 55303212152202527), -INT64_C( 190921087765614432), INT64_C( 5384226706700903894), INT64_C( 2258363894737715711), -INT64_C( 5300351835966890634), -INT64_C( 7632388881543525681), -INT64_C( 4150345481680443020), -INT64_C( 7502623004535435325) }, { INT64_C( 49), INT64_C( 2), INT64_C( 61), INT64_C( 9), INT64_C( 8), INT64_C( 6), INT64_C( 3), INT64_C( 50) }, { INT64_C( 98), INT64_C( 4563955746485984296), INT64_C( 2), INT64_C( 4410866981909600), INT64_C( 51353094678682269), INT64_C( 168974299877594155), INT64_C( 1787049824003638574), INT64_C( 9720) } }, { { INT64_C( 5155634216359390984), -INT64_C( 5330768873949015095), INT64_C( 4899478041251538590), -INT64_C( 8932982782673421075), INT64_C( 4711637638825507354), -INT64_C( 2371656200242924692), INT64_C( 1489501970028344598), -INT64_C( 9024348993671742269) }, { INT64_C( 12), INT64_C( 52), INT64_C( 1), INT64_C( 4), INT64_C( 56), INT64_C( 32), INT64_C( 39), INT64_C( 34) }, { INT64_C( 1258699759853366), INT64_C( 2912), INT64_C( 2449739020625769295), INT64_C( 594610080689758158), INT64_C( 65), INT64_C( 3742773056), INT64_C( 2709388), INT64_C( 548455577) } }, { { INT64_C( 1861832143430731975), INT64_C( 48924248233315771), INT64_C( 5557999578332679780), INT64_C( 8107508098736352848), INT64_C( 7206212032826514031), INT64_C( 1045194286659328553), INT64_C( 1661107840780061844), -INT64_C( 1442935853270313505) }, { INT64_C( 3), INT64_C( 47), INT64_C( 17), INT64_C( 37), INT64_C( 6), INT64_C( 41), INT64_C( 28), INT64_C( 27) }, { INT64_C( 232729017928841496), INT64_C( 347), INT64_C( 42404171587621), INT64_C( 58989885), INT64_C( 112597063012914281), INT64_C( 475299), INT64_C( 6188108923), INT64_C( 126688243601) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde__m512i a = simde_mm512_loadu_epi64(test_vec[i].a); simde__m512i b = simde_mm512_loadu_epi64(test_vec[i].b); simde__m512i r = simde_mm512_srlv_epi64(a, b); simde_test_x86_assert_equal_i64x8(r, simde_mm512_loadu_epi64(test_vec[i].r)); } return 0; #else fputc('\n', stdout); for (int i = 0 ; i < 8 ; i++) { simde__m512i r, a = simde_test_x86_random_i64x8(), b = simde_test_x86_random_i64x8(); b = simde_mm512_and_si512(b, simde_mm512_set1_epi64(63)); if (i == 0 ) b = simde_mm512_mask_blend_epi64(0xf, b, simde_mm512_set_epi64(0, 0, 0, 0, 64, -1, 63, 0)); r = simde_mm512_srlv_epi64(a, b); simde_test_x86_write_i64x8(2, a, SIMDE_TEST_VEC_POS_FIRST); simde_test_x86_write_i64x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE); simde_test_x86_write_i64x8(2, r, SIMDE_TEST_VEC_POS_LAST); } return 1; #endif } SIMDE_TEST_FUNC_LIST_BEGIN SIMDE_TEST_FUNC_LIST_ENTRY(mm_srlv_epi16) SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_srlv_epi16) SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_srlv_epi16) SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_srlv_epi32) SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_srlv_epi32) SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_srlv_epi64) SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_srlv_epi64) SIMDE_TEST_FUNC_LIST_ENTRY(mm256_srlv_epi16) SIMDE_TEST_FUNC_LIST_ENTRY(mm512_srlv_epi16) SIMDE_TEST_FUNC_LIST_ENTRY(mm512_srlv_epi32) SIMDE_TEST_FUNC_LIST_ENTRY(mm512_srlv_epi64) SIMDE_TEST_FUNC_LIST_END #include