blob: f757c59322d4683538b015569b34137111aa3800 [file]
/* 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:
* 2023 Yi-Yen Chung <eric681@andestech.com> (Copyright owned by Andes Technology)
* 2024 Zhijin Zeng <zhijin.zeng@spacemit.com>
* 2025 Russell Graves <rgraves@sevarg.net>
*/
#define SIMDE_TEST_ARM_NEON_INSN qrshl
#include "test-neon.h"
/* Check that both of these work */
#if defined(__cplusplus)
#include <simde/arm/neon/qrshl.h>
#else
#include <simde/arm/neon.h>
#endif
#if 0
#define PROBABILITY 80
#define probability(p) (rand() < (((int64_t) RAND_MAX * (p)) / 100))
#endif
static int
test_simde_vqrshlb_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int8_t a;
int8_t b;
int8_t r;
} test_vec[] = {
{ -INT8_C( 41),
-INT8_C( 84),
INT8_C( 0) },
{ INT8_C( 91),
INT8_C( 87),
INT8_MAX },
{ -INT8_C( 52),
-INT8_C( 119),
INT8_C( 0) },
{ -INT8_C( 86),
INT8_C( 101),
INT8_MIN },
{ INT8_C( 35),
-INT8_C( 43),
INT8_C( 0) },
{ -INT8_C( 13),
INT8_C( 121),
INT8_MIN },
{ -INT8_C( 46),
INT8_C( 91),
INT8_MIN },
{ -INT8_C( 17),
-INT8_C( 79),
INT8_C( 0) },
{ INT8_C( 72),
-INT8_C( 10),
INT8_C( 0) },
{ -INT8_C( 93),
-INT8_C( 9),
INT8_C( 0) },
{ INT8_C( 8),
-INT8_C( 9),
INT8_C( 0) },
{ -INT8_C( 17),
-INT8_C( 9),
INT8_C( 0) },
{ INT8_C( 21),
-INT8_C( 9),
INT8_C( 0) },
{ -INT8_C( 92),
-INT8_C( 8),
INT8_C( 0) },
{ -INT8_C( 37),
-INT8_C( 8),
INT8_C( 0) },
{ INT8_C( 54),
-INT8_C( 8),
INT8_C( 0) },
{ INT8_C( 12),
-INT8_C( 8),
INT8_C( 0) },
{ -INT8_C( 103),
-INT8_C( 7),
-INT8_C( 1) },
{ INT8_C( 52),
-INT8_C( 7),
INT8_C( 0) },
{ INT8_C( 103),
-INT8_C( 7),
INT8_C( 1) },
{ -INT8_C( 109),
-INT8_C( 7),
-INT8_C( 1) },
{ -INT8_C( 99),
-INT8_C( 6),
-INT8_C( 2) },
{ INT8_C( 27),
-INT8_C( 6),
INT8_C( 0) },
{ INT8_C( 107),
-INT8_C( 6),
INT8_C( 2) },
{ INT8_C( 73),
-INT8_C( 6),
INT8_C( 1) },
{ INT8_C( 118),
-INT8_C( 5),
INT8_C( 4) },
{ -INT8_C( 62),
-INT8_C( 5),
-INT8_C( 2) },
{ INT8_C( 21),
-INT8_C( 5),
INT8_C( 1) },
{ INT8_C( 0),
-INT8_C( 5),
INT8_C( 0) },
{ INT8_C( 108),
-INT8_C( 4),
INT8_C( 7) },
{ INT8_C( 123),
-INT8_C( 4),
INT8_C( 8) },
{ INT8_C( 35),
-INT8_C( 4),
INT8_C( 2) },
{ INT8_C( 65),
-INT8_C( 4),
INT8_C( 4) },
{ INT8_C( 110),
-INT8_C( 3),
INT8_C( 14) },
{ -INT8_C( 100),
-INT8_C( 3),
-INT8_C( 12) },
{ INT8_C( 19),
-INT8_C( 3),
INT8_C( 2) },
{ -INT8_C( 55),
-INT8_C( 3),
-INT8_C( 7) },
{ -INT8_C( 116),
-INT8_C( 2),
-INT8_C( 29) },
{ -INT8_C( 59),
-INT8_C( 2),
-INT8_C( 15) },
{ INT8_C( 17),
-INT8_C( 2),
INT8_C( 4) },
{ INT8_C( 47),
-INT8_C( 2),
INT8_C( 12) },
{ -INT8_C( 51),
-INT8_C( 1),
-INT8_C( 25) },
{ INT8_C( 0),
-INT8_C( 1),
INT8_C( 0) },
{ INT8_C( 68),
-INT8_C( 1),
INT8_C( 34) },
{ INT8_C( 113),
-INT8_C( 1),
INT8_C( 57) },
{ -INT8_C( 37),
INT8_C( 0),
-INT8_C( 37) },
{ INT8_C( 122),
INT8_C( 0),
INT8_C( 122) },
{ INT8_C( 125),
INT8_C( 0),
INT8_C( 125) },
{ INT8_C( 116),
INT8_C( 0),
INT8_C( 116) },
{ -INT8_C( 82),
INT8_C( 0),
-INT8_C( 82) },
{ -INT8_C( 28),
INT8_C( 0),
-INT8_C( 28) },
{ INT8_C( 7),
INT8_C( 0),
INT8_C( 7) },
{ INT8_C( 76),
INT8_C( 1),
INT8_MAX },
{ INT8_C( 0),
INT8_C( 1),
INT8_C( 0) },
{ INT8_C( 114),
INT8_C( 1),
INT8_MAX },
{ -INT8_C( 107),
INT8_C( 1),
INT8_MIN },
{ INT8_C( 118),
INT8_C( 2),
INT8_MAX },
{ INT8_C( 52),
INT8_C( 2),
INT8_MAX },
{ -INT8_C( 85),
INT8_C( 2),
INT8_MIN },
{ INT8_C( 118),
INT8_C( 2),
INT8_MAX },
{ -INT8_C( 95),
INT8_C( 3),
INT8_MIN },
{ INT8_C( 38),
INT8_C( 3),
INT8_MAX },
{ -INT8_C( 103),
INT8_C( 3),
INT8_MIN },
{ -INT8_C( 30),
INT8_C( 3),
INT8_MIN },
{ -INT8_C( 108),
INT8_C( 4),
INT8_MIN },
{ INT8_C( 54),
INT8_C( 4),
INT8_MAX },
{ -INT8_C( 10),
INT8_C( 4),
INT8_MIN },
{ INT8_C( 93),
INT8_C( 4),
INT8_MAX },
{ -INT8_C( 62),
INT8_C( 5),
INT8_MIN },
{ -INT8_C( 69),
INT8_C( 5),
INT8_MIN },
{ INT8_C( 110),
INT8_C( 5),
INT8_MAX },
{ -INT8_C( 15),
INT8_C( 5),
INT8_MIN },
{ -INT8_C( 120),
INT8_C( 6),
INT8_MIN },
{ INT8_C( 110),
INT8_C( 6),
INT8_MAX },
{ INT8_C( 53),
INT8_C( 6),
INT8_MAX },
{ -INT8_C( 7),
INT8_C( 6),
INT8_MIN },
{ INT8_C( 73),
INT8_C( 7),
INT8_MAX },
{ -INT8_C( 81),
INT8_C( 7),
INT8_MIN },
{ INT8_C( 119),
INT8_C( 7),
INT8_MAX },
{ -INT8_C( 67),
INT8_C( 7),
INT8_MIN },
{ INT8_C( 93),
INT8_C( 8),
INT8_MAX },
{ INT8_C( 91),
INT8_C( 8),
INT8_MAX },
{ -INT8_C( 60),
INT8_C( 8),
INT8_MIN },
{ -INT8_C( 87),
INT8_C( 8),
INT8_MIN },
{ INT8_C( 91),
INT8_C( 9),
INT8_MAX },
{ INT8_C( 55),
INT8_C( 9),
INT8_MAX },
{ INT8_C( 63),
INT8_C( 9),
INT8_MAX },
{ -INT8_C( 46),
INT8_C( 9),
INT8_MIN },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
int8_t r = simde_vqrshlb_s8(test_vec[i].a, test_vec[i].b);
simde_assert_equal_i8(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
int8_t a = simde_test_codegen_random_i8();
int8_t b = simde_test_codegen_random_i8();
int8_t r = simde_vqrshlb_s8(a, b);
simde_test_codegen_write_i8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -40 ; i < 40 ; i++) {
int8_t a = simde_test_codegen_random_i8();
int8_t b = i / 4;
int8_t r = simde_vqrshlb_s8(a, b);
simde_test_codegen_write_i8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlh_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int16_t a;
int16_t b;
int16_t r;
} test_vec[] = {
{ INT16_C( 28496),
INT16_C( 15818),
INT16_C( 0) },
{ -INT16_C( 10793),
-INT16_C( 19992),
INT16_C( 0) },
{ INT16_C( 31373),
INT16_C( 20741),
INT16_MAX },
{ -INT16_C( 22758),
-INT16_C( 25378),
INT16_C( 0) },
{ INT16_C( 29475),
-INT16_C( 21986),
INT16_MAX },
{ -INT16_C( 29503),
INT16_C( 12223),
INT16_C( 0) },
{ INT16_C( 13721),
-INT16_C( 6022),
INT16_MAX },
{ INT16_C( 3545),
INT16_C( 10606),
INT16_MAX },
{ INT16_C( 14716),
-INT16_C( 20),
INT16_C( 0) },
{ INT16_C( 21351),
-INT16_C( 19),
INT16_C( 0) },
{ INT16_C( 20238),
-INT16_C( 19),
INT16_C( 0) },
{ -INT16_C( 25851),
-INT16_C( 18),
INT16_C( 0) },
{ INT16_C( 2761),
-INT16_C( 18),
INT16_C( 0) },
{ -INT16_C( 7188),
-INT16_C( 17),
INT16_C( 0) },
{ -INT16_C( 13647),
-INT16_C( 17),
INT16_C( 0) },
{ -INT16_C( 11137),
-INT16_C( 16),
INT16_C( 0) },
{ -INT16_C( 25283),
-INT16_C( 16),
INT16_C( 0) },
{ -INT16_C( 385),
-INT16_C( 15),
INT16_C( 0) },
{ INT16_C( 15913),
-INT16_C( 15),
INT16_C( 0) },
{ -INT16_C( 15571),
-INT16_C( 14),
-INT16_C( 1) },
{ -INT16_C( 22412),
-INT16_C( 14),
-INT16_C( 1) },
{ INT16_C( 19883),
-INT16_C( 13),
INT16_C( 2) },
{ INT16_C( 6581),
-INT16_C( 13),
INT16_C( 1) },
{ INT16_C( 12663),
-INT16_C( 12),
INT16_C( 3) },
{ -INT16_C( 8622),
-INT16_C( 12),
-INT16_C( 2) },
{ INT16_C( 24708),
-INT16_C( 11),
INT16_C( 12) },
{ -INT16_C( 30419),
-INT16_C( 11),
-INT16_C( 15) },
{ -INT16_C( 2309),
-INT16_C( 10),
-INT16_C( 2) },
{ -INT16_C( 6252),
-INT16_C( 10),
-INT16_C( 6) },
{ INT16_C( 17881),
-INT16_C( 9),
INT16_C( 35) },
{ INT16_C( 22962),
-INT16_C( 9),
INT16_C( 45) },
{ -INT16_C( 4326),
-INT16_C( 8),
-INT16_C( 17) },
{ -INT16_C( 26122),
-INT16_C( 8),
-INT16_C( 102) },
{ INT16_C( 8430),
-INT16_C( 7),
INT16_C( 66) },
{ INT16_C( 7127),
-INT16_C( 7),
INT16_C( 56) },
{ INT16_C( 19427),
-INT16_C( 6),
INT16_C( 304) },
{ -INT16_C( 28989),
-INT16_C( 6),
-INT16_C( 453) },
{ INT16_C( 30873),
-INT16_C( 5),
INT16_C( 965) },
{ INT16_C( 4263),
-INT16_C( 5),
INT16_C( 133) },
{ -INT16_C( 1367),
-INT16_C( 4),
-INT16_C( 85) },
{ INT16_C( 12014),
-INT16_C( 4),
INT16_C( 751) },
{ INT16_C( 7002),
-INT16_C( 3),
INT16_C( 875) },
{ INT16_C( 22199),
-INT16_C( 3),
INT16_C( 2775) },
{ INT16_C( 19217),
-INT16_C( 2),
INT16_C( 4804) },
{ -INT16_C( 5571),
-INT16_C( 2),
-INT16_C( 1393) },
{ -INT16_C( 4207),
-INT16_C( 1),
-INT16_C( 2103) },
{ -INT16_C( 21693),
-INT16_C( 1),
-INT16_C( 10846) },
{ INT16_C( 15071),
INT16_C( 0),
INT16_C( 15071) },
{ -INT16_C( 12988),
INT16_C( 0),
-INT16_C( 12988) },
{ INT16_C( 7002),
INT16_C( 0),
INT16_C( 7002) },
{ INT16_C( 15848),
INT16_C( 1),
INT16_C( 31696) },
{ -INT16_C( 21401),
INT16_C( 1),
INT16_MIN },
{ INT16_C( 203),
INT16_C( 2),
INT16_C( 812) },
{ INT16_C( 29220),
INT16_C( 2),
INT16_MAX },
{ -INT16_C( 12784),
INT16_C( 3),
INT16_MIN },
{ -INT16_C( 404),
INT16_C( 3),
-INT16_C( 3232) },
{ -INT16_C( 14340),
INT16_C( 4),
INT16_MIN },
{ -INT16_C( 19687),
INT16_C( 4),
INT16_MIN },
{ INT16_C( 10781),
INT16_C( 5),
INT16_MAX },
{ INT16_C( 23295),
INT16_C( 5),
INT16_MAX },
{ -INT16_C( 28652),
INT16_C( 6),
INT16_MIN },
{ INT16_C( 22602),
INT16_C( 6),
INT16_MAX },
{ INT16_C( 10555),
INT16_C( 7),
INT16_MAX },
{ INT16_C( 32658),
INT16_C( 7),
INT16_MAX },
{ -INT16_C( 4874),
INT16_C( 8),
INT16_MIN },
{ -INT16_C( 8550),
INT16_C( 8),
INT16_MIN },
{ INT16_C( 297),
INT16_C( 9),
INT16_MAX },
{ -INT16_C( 2934),
INT16_C( 9),
INT16_MIN },
{ -INT16_C( 20735),
INT16_C( 10),
INT16_MIN },
{ INT16_C( 4454),
INT16_C( 10),
INT16_MAX },
{ -INT16_C( 11395),
INT16_C( 11),
INT16_MIN },
{ INT16_C( 30991),
INT16_C( 11),
INT16_MAX },
{ INT16_C( 10394),
INT16_C( 12),
INT16_MAX },
{ -INT16_C( 18644),
INT16_C( 12),
INT16_MIN },
{ INT16_C( 11090),
INT16_C( 13),
INT16_MAX },
{ INT16_C( 26385),
INT16_C( 13),
INT16_MAX },
{ INT16_C( 23483),
INT16_C( 14),
INT16_MAX },
{ -INT16_C( 2369),
INT16_C( 14),
INT16_MIN },
{ INT16_C( 20868),
INT16_C( 15),
INT16_MAX },
{ INT16_C( 31349),
INT16_C( 15),
INT16_MAX },
{ INT16_C( 4157),
INT16_C( 16),
INT16_MAX },
{ INT16_C( 26201),
INT16_C( 16),
INT16_MAX },
{ -INT16_C( 7407),
INT16_C( 17),
INT16_MIN },
{ INT16_C( 4954),
INT16_C( 17),
INT16_MAX },
{ -INT16_C( 16238),
INT16_C( 18),
INT16_MIN },
{ INT16_C( 3876),
INT16_C( 18),
INT16_MAX },
{ INT16_C( 13459),
INT16_C( 19),
INT16_MAX },
{ INT16_C( 11656),
INT16_C( 19),
INT16_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
int16_t r = simde_vqrshlh_s16(test_vec[i].a, test_vec[i].b);
simde_assert_equal_i16(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
int16_t a = simde_test_codegen_random_i16();
int16_t b = simde_test_codegen_random_i16();
int16_t r = simde_vqrshlh_s16(a, b);
simde_test_codegen_write_i16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -40 ; i < 40 ; i++) {
int16_t a = simde_test_codegen_random_i16();
int16_t b = i / 2;
int16_t r = simde_vqrshlh_s16(a, b);
simde_test_codegen_write_i16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshls_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int32_t a;
int32_t b;
int32_t r;
} test_vec[] = {
{ -INT32_C( 174426796),
INT32_C( 1634665650),
INT32_C( 0) },
{ -INT32_C( 475937015),
INT32_C( 616240279),
INT32_C( 0) },
{ INT32_C( 519741645),
-INT32_C( 557045947),
INT32_MAX },
{ INT32_C( 1344220536),
-INT32_C( 911287691),
INT32_MAX },
{ INT32_C( 29247567),
INT32_C( 1432497484),
INT32_MAX },
{ -INT32_C( 1942486028),
-INT32_C( 441388265),
INT32_MIN },
{ -INT32_C( 654070892),
INT32_C( 1253560274),
INT32_C( 0) },
{ INT32_C( 1922815741),
INT32_C( 3885489),
INT32_C( 0) },
{ -INT32_C( 570230382),
-INT32_C( 40),
INT32_C( 0) },
{ INT32_C( 439641126),
-INT32_C( 39),
INT32_C( 0) },
{ INT32_C( 2141613160),
-INT32_C( 39),
INT32_C( 0) },
{ -INT32_C( 194750624),
-INT32_C( 38),
INT32_C( 0) },
{ -INT32_C( 724735998),
-INT32_C( 38),
INT32_C( 0) },
{ INT32_C( 874480695),
-INT32_C( 37),
INT32_C( 0) },
{ INT32_C( 195476058),
-INT32_C( 37),
INT32_C( 0) },
{ -INT32_C( 1794318077),
-INT32_C( 36),
INT32_C( 0) },
{ INT32_C( 7605978),
-INT32_C( 36),
INT32_C( 0) },
{ -INT32_C( 635721614),
-INT32_C( 35),
INT32_C( 0) },
{ INT32_C( 1952104724),
-INT32_C( 35),
INT32_C( 0) },
{ INT32_C( 443072024),
-INT32_C( 34),
INT32_C( 0) },
{ INT32_C( 1592735014),
-INT32_C( 34),
INT32_C( 0) },
{ INT32_C( 345116345),
-INT32_C( 33),
INT32_C( 0) },
{ -INT32_C( 887146040),
-INT32_C( 33),
INT32_C( 0) },
{ -INT32_C( 178181350),
-INT32_C( 32),
INT32_C( 0) },
{ -INT32_C( 1393175239),
-INT32_C( 32),
INT32_C( 0) },
{ -INT32_C( 1853484931),
-INT32_C( 31),
-INT32_C( 1) },
{ -INT32_C( 368647982),
-INT32_C( 31),
INT32_C( 0) },
{ -INT32_C( 989499745),
-INT32_C( 30),
-INT32_C( 1) },
{ INT32_C( 1562637476),
-INT32_C( 30),
INT32_C( 1) },
{ -INT32_C( 898517502),
-INT32_C( 29),
-INT32_C( 2) },
{ INT32_C( 160797167),
-INT32_C( 29),
INT32_C( 0) },
{ -INT32_C( 151062852),
-INT32_C( 28),
-INT32_C( 1) },
{ INT32_C( 1218639051),
-INT32_C( 28),
INT32_C( 5) },
{ -INT32_C( 690345980),
-INT32_C( 27),
-INT32_C( 5) },
{ -INT32_C( 1463689207),
-INT32_C( 27),
-INT32_C( 11) },
{ -INT32_C( 227686834),
-INT32_C( 26),
-INT32_C( 3) },
{ -INT32_C( 1135570502),
-INT32_C( 26),
-INT32_C( 17) },
{ INT32_C( 914800967),
-INT32_C( 25),
INT32_C( 27) },
{ INT32_C( 255794002),
-INT32_C( 25),
INT32_C( 8) },
{ -INT32_C( 586858990),
-INT32_C( 24),
-INT32_C( 35) },
{ INT32_C( 908502834),
-INT32_C( 24),
INT32_C( 54) },
{ -INT32_C( 670236465),
-INT32_C( 23),
-INT32_C( 80) },
{ INT32_C( 780193504),
-INT32_C( 23),
INT32_C( 93) },
{ INT32_C( 1310846612),
-INT32_C( 22),
INT32_C( 313) },
{ -INT32_C( 972394113),
-INT32_C( 22),
-INT32_C( 232) },
{ -INT32_C( 2047045582),
-INT32_C( 21),
-INT32_C( 976) },
{ -INT32_C( 1114358869),
-INT32_C( 21),
-INT32_C( 531) },
{ -INT32_C( 1415865991),
-INT32_C( 20),
-INT32_C( 1350) },
{ INT32_C( 266518848),
-INT32_C( 20),
INT32_C( 254) },
{ -INT32_C( 1578569791),
-INT32_C( 19),
-INT32_C( 3011) },
{ INT32_C( 1372547261),
-INT32_C( 19),
INT32_C( 2618) },
{ -INT32_C( 710938538),
-INT32_C( 18),
-INT32_C( 2712) },
{ -INT32_C( 1801737887),
-INT32_C( 18),
-INT32_C( 6873) },
{ -INT32_C( 468084935),
-INT32_C( 17),
-INT32_C( 3571) },
{ INT32_C( 1285729747),
-INT32_C( 17),
INT32_C( 9809) },
{ -INT32_C( 2030551738),
-INT32_C( 16),
-INT32_C( 30984) },
{ -INT32_C( 1080698114),
-INT32_C( 16),
-INT32_C( 16490) },
{ -INT32_C( 2040496695),
-INT32_C( 15),
-INT32_C( 62271) },
{ INT32_C( 1020735462),
-INT32_C( 15),
INT32_C( 31150) },
{ -INT32_C( 2129496544),
-INT32_C( 14),
-INT32_C( 129974) },
{ INT32_C( 1477815583),
-INT32_C( 14),
INT32_C( 90199) },
{ INT32_C( 406597189),
-INT32_C( 13),
INT32_C( 49633) },
{ INT32_C( 560258779),
-INT32_C( 13),
INT32_C( 68391) },
{ INT32_C( 430398491),
-INT32_C( 12),
INT32_C( 105078) },
{ -INT32_C( 2605770),
-INT32_C( 12),
-INT32_C( 636) },
{ -INT32_C( 1601881926),
-INT32_C( 11),
-INT32_C( 782169) },
{ -INT32_C( 1998758808),
-INT32_C( 11),
-INT32_C( 975956) },
{ -INT32_C( 251007022),
-INT32_C( 10),
-INT32_C( 245124) },
{ -INT32_C( 515301476),
-INT32_C( 10),
-INT32_C( 503224) },
{ INT32_C( 704218701),
-INT32_C( 9),
INT32_C( 1375427) },
{ -INT32_C( 2142609820),
-INT32_C( 9),
-INT32_C( 4184785) },
{ -INT32_C( 241569094),
-INT32_C( 8),
-INT32_C( 943629) },
{ -INT32_C( 370118097),
-INT32_C( 8),
-INT32_C( 1445774) },
{ INT32_C( 311064234),
-INT32_C( 7),
INT32_C( 2430189) },
{ -INT32_C( 1516607534),
-INT32_C( 7),
-INT32_C( 11848496) },
{ -INT32_C( 225008554),
-INT32_C( 6),
-INT32_C( 3515759) },
{ INT32_C( 282386627),
-INT32_C( 6),
INT32_C( 4412291) },
{ -INT32_C( 902181530),
-INT32_C( 5),
-INT32_C( 28193173) },
{ -INT32_C( 431324117),
-INT32_C( 5),
-INT32_C( 13478879) },
{ -INT32_C( 1512577930),
-INT32_C( 4),
-INT32_C( 94536121) },
{ INT32_C( 9357142),
-INT32_C( 4),
INT32_C( 584821) },
{ INT32_C( 269686845),
-INT32_C( 3),
INT32_C( 33710856) },
{ -INT32_C( 709513857),
-INT32_C( 3),
-INT32_C( 88689232) },
{ INT32_C( 348670801),
-INT32_C( 2),
INT32_C( 87167700) },
{ -INT32_C( 1859806165),
-INT32_C( 2),
-INT32_C( 464951541) },
{ -INT32_C( 1789108631),
-INT32_C( 1),
-INT32_C( 894554315) },
{ INT32_C( 1484498658),
-INT32_C( 1),
INT32_C( 742249329) },
{ -INT32_C( 520269174),
INT32_C( 0),
-INT32_C( 520269174) },
{ INT32_C( 1474399257),
INT32_C( 0),
INT32_C( 1474399257) },
{ INT32_C( 610792612),
INT32_C( 0),
INT32_C( 610792612) },
{ -INT32_C( 201778015),
INT32_C( 1),
-INT32_C( 403556030) },
{ -INT32_C( 1828208281),
INT32_C( 1),
INT32_MIN },
{ -INT32_C( 953930659),
INT32_C( 2),
INT32_MIN },
{ INT32_C( 1834778763),
INT32_C( 2),
INT32_MAX },
{ -INT32_C( 1312368857),
INT32_C( 3),
INT32_MIN },
{ INT32_C( 1116914473),
INT32_C( 3),
INT32_MAX },
{ -INT32_C( 191270065),
INT32_C( 4),
INT32_MIN },
{ INT32_C( 135790695),
INT32_C( 4),
INT32_MAX },
{ -INT32_C( 2063920868),
INT32_C( 5),
INT32_MIN },
{ INT32_C( 806814675),
INT32_C( 5),
INT32_MAX },
{ -INT32_C( 1158202577),
INT32_C( 6),
INT32_MIN },
{ -INT32_C( 483896388),
INT32_C( 6),
INT32_MIN },
{ INT32_C( 1402269226),
INT32_C( 7),
INT32_MAX },
{ INT32_C( 26617521),
INT32_C( 7),
INT32_MAX },
{ INT32_C( 16068505),
INT32_C( 8),
INT32_MAX },
{ INT32_C( 1275661616),
INT32_C( 8),
INT32_MAX },
{ -INT32_C( 238025698),
INT32_C( 9),
INT32_MIN },
{ INT32_C( 925034247),
INT32_C( 9),
INT32_MAX },
{ -INT32_C( 537847517),
INT32_C( 10),
INT32_MIN },
{ -INT32_C( 1748887187),
INT32_C( 10),
INT32_MIN },
{ -INT32_C( 1175759353),
INT32_C( 11),
INT32_MIN },
{ INT32_C( 381321597),
INT32_C( 11),
INT32_MAX },
{ -INT32_C( 535318608),
INT32_C( 12),
INT32_MIN },
{ -INT32_C( 634576708),
INT32_C( 12),
INT32_MIN },
{ INT32_C( 751631652),
INT32_C( 13),
INT32_MAX },
{ INT32_C( 140766949),
INT32_C( 13),
INT32_MAX },
{ INT32_C( 1961317383),
INT32_C( 14),
INT32_MAX },
{ INT32_C( 1963764078),
INT32_C( 14),
INT32_MAX },
{ INT32_C( 2083452927),
INT32_C( 15),
INT32_MAX },
{ INT32_C( 680781944),
INT32_C( 15),
INT32_MAX },
{ INT32_C( 1393142423),
INT32_C( 16),
INT32_MAX },
{ -INT32_C( 298961206),
INT32_C( 16),
INT32_MIN },
{ INT32_C( 404421171),
INT32_C( 17),
INT32_MAX },
{ -INT32_C( 283083288),
INT32_C( 17),
INT32_MIN },
{ INT32_C( 1080297426),
INT32_C( 18),
INT32_MAX },
{ -INT32_C( 1330286416),
INT32_C( 18),
INT32_MIN },
{ -INT32_C( 550706073),
INT32_C( 19),
INT32_MIN },
{ INT32_C( 1678229452),
INT32_C( 19),
INT32_MAX },
{ INT32_C( 867635305),
INT32_C( 20),
INT32_MAX },
{ INT32_C( 2049107270),
INT32_C( 20),
INT32_MAX },
{ -INT32_C( 946717473),
INT32_C( 21),
INT32_MIN },
{ -INT32_C( 1934117958),
INT32_C( 21),
INT32_MIN },
{ INT32_C( 1808538554),
INT32_C( 22),
INT32_MAX },
{ -INT32_C( 233078389),
INT32_C( 22),
INT32_MIN },
{ INT32_C( 852576101),
INT32_C( 23),
INT32_MAX },
{ INT32_C( 1888933895),
INT32_C( 23),
INT32_MAX },
{ INT32_C( 799297001),
INT32_C( 24),
INT32_MAX },
{ INT32_C( 313116211),
INT32_C( 24),
INT32_MAX },
{ -INT32_C( 1126548478),
INT32_C( 25),
INT32_MIN },
{ -INT32_C( 1454861841),
INT32_C( 25),
INT32_MIN },
{ INT32_C( 924062892),
INT32_C( 26),
INT32_MAX },
{ -INT32_C( 81186922),
INT32_C( 26),
INT32_MIN },
{ INT32_C( 2116942455),
INT32_C( 27),
INT32_MAX },
{ -INT32_C( 1141980206),
INT32_C( 27),
INT32_MIN },
{ INT32_C( 1156289041),
INT32_C( 28),
INT32_MAX },
{ INT32_C( 1532400728),
INT32_C( 28),
INT32_MAX },
{ -INT32_C( 1088999216),
INT32_C( 29),
INT32_MIN },
{ INT32_C( 1835622593),
INT32_C( 29),
INT32_MAX },
{ INT32_C( 178552180),
INT32_C( 30),
INT32_MAX },
{ INT32_C( 604425645),
INT32_C( 30),
INT32_MAX },
{ -INT32_C( 1700645945),
INT32_C( 31),
INT32_MIN },
{ INT32_C( 139825399),
INT32_C( 31),
INT32_MAX },
{ INT32_C( 2068594723),
INT32_C( 32),
INT32_MAX },
{ -INT32_C( 1512660267),
INT32_C( 32),
INT32_MIN },
{ -INT32_C( 1805259053),
INT32_C( 33),
INT32_MIN },
{ -INT32_C( 1040003506),
INT32_C( 33),
INT32_MIN },
{ -INT32_C( 120740277),
INT32_C( 34),
INT32_MIN },
{ INT32_C( 991744884),
INT32_C( 34),
INT32_MAX },
{ -INT32_C( 36323834),
INT32_C( 35),
INT32_MIN },
{ INT32_C( 1912941391),
INT32_C( 35),
INT32_MAX },
{ INT32_C( 1089294699),
INT32_C( 36),
INT32_MAX },
{ -INT32_C( 941177612),
INT32_C( 36),
INT32_MIN },
{ INT32_C( 5983154),
INT32_C( 37),
INT32_MAX },
{ INT32_C( 1690459417),
INT32_C( 37),
INT32_MAX },
{ INT32_C( 2019397380),
INT32_C( 38),
INT32_MAX },
{ INT32_C( 1773369698),
INT32_C( 38),
INT32_MAX },
{ -INT32_C( 2023323336),
INT32_C( 39),
INT32_MIN },
{ INT32_C( 536439988),
INT32_C( 39),
INT32_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
int32_t r = simde_vqrshls_s32(test_vec[i].a, test_vec[i].b);
simde_assert_equal_i32(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
int32_t a = simde_test_codegen_random_i32();
int32_t b = simde_test_codegen_random_i32();
int32_t r = simde_vqrshls_s32(a, b);
simde_test_codegen_write_i32(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i32(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -80 ; i < 80 ; i++) {
int32_t a = simde_test_codegen_random_i32();
int32_t b = i / 2;
int32_t r = simde_vqrshls_s32(a, b);
simde_test_codegen_write_i32(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i32(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshld_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int64_t a;
int64_t b;
int64_t r;
} test_vec[] = {
{ INT64_C( 4440879034276206119),
-INT64_C( 6294382681135318368),
INT64_C( 0) },
{ -INT64_C( 8749732448969590841),
-INT64_C( 6900581735583010771),
INT64_MIN },
{ -INT64_C( 8449822818109964405),
-INT64_C( 1215652871492777172),
INT64_MIN },
{ INT64_C( 8633853803546449561),
-INT64_C( 7465387029608343732),
INT64_MAX },
{ INT64_C( 6040122215907194205),
INT64_C( 735755184919826206),
INT64_MAX },
{ INT64_C( 2901768264706506627),
-INT64_C( 6583890719471195907),
INT64_C( 362721033088313328) },
{ -INT64_C( 6141857055932434360),
-INT64_C( 34017255562899700),
INT64_MIN },
{ -INT64_C( 42481821068436379),
-INT64_C( 1034232896568076357),
INT64_C( 0) },
{ INT64_C( 6600346650330370403),
-INT64_C( 70),
INT64_C( 0) },
{ INT64_C( 1454206035225512627),
-INT64_C( 69),
INT64_C( 0) },
{ -INT64_C( 3873448557284033476),
-INT64_C( 68),
INT64_C( 0) },
{ INT64_C( 6174841851515455254),
-INT64_C( 67),
INT64_C( 0) },
{ -INT64_C( 1608949216510209534),
-INT64_C( 66),
INT64_C( 0) },
{ INT64_C( 2318024378666222695),
-INT64_C( 65),
INT64_C( 0) },
{ INT64_C( 6204726910713299266),
-INT64_C( 64),
INT64_C( 0) },
{ INT64_C( 6497786447256741861),
-INT64_C( 63),
INT64_C( 1) },
{ -INT64_C( 5334700340343574312),
-INT64_C( 62),
-INT64_C( 1) },
{ -INT64_C( 7431229283662819366),
-INT64_C( 61),
-INT64_C( 3) },
{ -INT64_C( 4535399854168719751),
-INT64_C( 60),
-INT64_C( 4) },
{ -INT64_C( 4350822575734446868),
-INT64_C( 59),
-INT64_C( 8) },
{ INT64_C( 8735234639227144502),
-INT64_C( 58),
INT64_C( 30) },
{ INT64_C( 8630891392336856793),
-INT64_C( 57),
INT64_C( 60) },
{ -INT64_C( 6633450720136744621),
-INT64_C( 56),
-INT64_C( 92) },
{ -INT64_C( 8857869841899943325),
-INT64_C( 55),
-INT64_C( 246) },
{ -INT64_C( 8725931340852501297),
-INT64_C( 54),
-INT64_C( 484) },
{ -INT64_C( 8665350969519432119),
-INT64_C( 53),
-INT64_C( 962) },
{ -INT64_C( 8031703545357537746),
-INT64_C( 52),
-INT64_C( 1783) },
{ -INT64_C( 4105046489986797262),
-INT64_C( 51),
-INT64_C( 1823) },
{ -INT64_C( 7203193884498390827),
-INT64_C( 50),
-INT64_C( 6398) },
{ INT64_C( 7707806563920231995),
-INT64_C( 49),
INT64_C( 13692) },
{ -INT64_C( 8624999844306506097),
-INT64_C( 48),
-INT64_C( 30642) },
{ -INT64_C( 1006536798886089655),
-INT64_C( 47),
-INT64_C( 7152) },
{ -INT64_C( 7633182065961976543),
-INT64_C( 46),
-INT64_C( 108474) },
{ INT64_C( 2729740572335404092),
-INT64_C( 45),
INT64_C( 77584) },
{ INT64_C( 6019112617696702890),
-INT64_C( 44),
INT64_C( 342147) },
{ -INT64_C( 4365504667160636837),
-INT64_C( 43),
-INT64_C( 496300) },
{ -INT64_C( 7437051174286991655),
-INT64_C( 42),
-INT64_C( 1690990) },
{ INT64_C( 8573149227693100861),
-INT64_C( 41),
INT64_C( 3898617) },
{ INT64_C( 7313563264040295202),
-INT64_C( 40),
INT64_C( 6651647) },
{ -INT64_C( 8577308151767035247),
-INT64_C( 39),
-INT64_C( 15602033) },
{ -INT64_C( 5325077232258109659),
-INT64_C( 38),
-INT64_C( 19372518) },
{ INT64_C( 4366382887479093589),
-INT64_C( 37),
INT64_C( 31769617) },
{ -INT64_C( 6859855182853370019),
-INT64_C( 36),
-INT64_C( 99824031) },
{ INT64_C( 1598720627208137208),
-INT64_C( 35),
INT64_C( 46528894) },
{ -INT64_C( 4167604879325926405),
-INT64_C( 34),
-INT64_C( 242586532) },
{ -INT64_C( 7840625982021520422),
-INT64_C( 33),
-INT64_C( 912768997) },
{ INT64_C( 8520185412390131599),
-INT64_C( 32),
INT64_C( 1983760254) },
{ -INT64_C( 2848723725587771024),
-INT64_C( 31),
-INT64_C( 1326540357) },
{ -INT64_C( 7390840472445710793),
-INT64_C( 30),
-INT64_C( 6883256577) },
{ INT64_C( 7345579720631473704),
-INT64_C( 29),
INT64_C( 13682208435) },
{ INT64_C( 2470295532384545621),
-INT64_C( 28),
INT64_C( 9202567981) },
{ -INT64_C( 1727136293160000174),
-INT64_C( 27),
-INT64_C( 12868168154) },
{ -INT64_C( 1197113317398654455),
-INT64_C( 26),
-INT64_C( 17838378510) },
{ INT64_C( 184996873680842581),
-INT64_C( 25),
INT64_C( 5513336470) },
{ INT64_C( 2881492140923589672),
-INT64_C( 24),
INT64_C( 171750315483) },
{ -INT64_C( 8927157577614720894),
-INT64_C( 23),
-INT64_C( 1064200112535) },
{ INT64_C( 100960097421536687),
-INT64_C( 22),
INT64_C( 24070762973) },
{ INT64_C( 1823324467224228766),
-INT64_C( 21),
INT64_C( 869428857433) },
{ -INT64_C( 4517126651951963821),
-INT64_C( 20),
-INT64_C( 4307867671921) },
{ -INT64_C( 5588948433303657103),
-INT64_C( 19),
-INT64_C( 10660073153121) },
{ INT64_C( 679075335331495358),
-INT64_C( 18),
INT64_C( 2590466824842) },
{ -INT64_C( 6030986925772072637),
-INT64_C( 17),
-INT64_C( 46012778669526) },
{ -INT64_C( 6574652708809850429),
-INT64_C( 16),
-INT64_C( 100321238842924) },
{ -INT64_C( 8683501065291647031),
-INT64_C( 15),
-INT64_C( 264999422158559) },
{ INT64_C( 8733427689126537150),
-INT64_C( 14),
INT64_C( 533046123603915) },
{ -INT64_C( 1369944031761692681),
-INT64_C( 13),
-INT64_C( 167229496064660) },
{ -INT64_C( 4750258618049376196),
-INT64_C( 12),
-INT64_C( 1159731107922211) },
{ INT64_C( 7113445112713749351),
-INT64_C( 11),
INT64_C( 3473361871442260) },
{ -INT64_C( 45107426318570833),
-INT64_C( 10),
-INT64_C( 44050221014229) },
{ INT64_C( 4925613112764075078),
-INT64_C( 9),
INT64_C( 9620338110867334) },
{ INT64_C( 6975731645872818460),
-INT64_C( 8),
INT64_C( 27248951741690697) },
{ INT64_C( 1112469784870606953),
-INT64_C( 7),
INT64_C( 8691170194301617) },
{ INT64_C( 214577098616339699),
-INT64_C( 6),
INT64_C( 3352767165880308) },
{ -INT64_C( 5643910191415997856),
-INT64_C( 5),
-INT64_C( 176372193481749933) },
{ -INT64_C( 8183163509056315626),
-INT64_C( 4),
-INT64_C( 511447719316019727) },
{ INT64_C( 4348521523621658857),
-INT64_C( 3),
INT64_C( 543565190452707357) },
{ INT64_C( 200184383116103177),
-INT64_C( 2),
INT64_C( 50046095779025794) },
{ INT64_C( 2000466870505453692),
-INT64_C( 1),
INT64_C( 1000233435252726846) },
{ -INT64_C( 132405296459250315),
INT64_C( 0),
-INT64_C( 132405296459250315) },
{ -INT64_C( 2584888258965486182),
INT64_C( 1),
-INT64_C( 5169776517930972364) },
{ INT64_C( 473837330162079983),
INT64_C( 2),
INT64_C( 1895349320648319932) },
{ -INT64_C( 8448231643749548384),
INT64_C( 3),
INT64_MIN },
{ INT64_C( 2338297871421729887),
INT64_C( 4),
INT64_MAX },
{ INT64_C( 5458685304259263251),
INT64_C( 5),
INT64_MAX },
{ INT64_C( 7713945749773116029),
INT64_C( 6),
INT64_MAX },
{ INT64_C( 6777023534126408814),
INT64_C( 7),
INT64_MAX },
{ -INT64_C( 7969885357916081730),
INT64_C( 8),
INT64_MIN },
{ INT64_C( 840546464596191490),
INT64_C( 9),
INT64_MAX },
{ INT64_C( 7336398940399634331),
INT64_C( 10),
INT64_MAX },
{ INT64_C( 8260152246644760900),
INT64_C( 11),
INT64_MAX },
{ -INT64_C( 4740851436211440347),
INT64_C( 12),
INT64_MIN },
{ INT64_C( 9160261049010465925),
INT64_C( 13),
INT64_MAX },
{ -INT64_C( 7661830980354362801),
INT64_C( 14),
INT64_MIN },
{ -INT64_C( 6071562005408869737),
INT64_C( 15),
INT64_MIN },
{ INT64_C( 1614967698273301743),
INT64_C( 16),
INT64_MAX },
{ -INT64_C( 7019905315174185168),
INT64_C( 17),
INT64_MIN },
{ -INT64_C( 4223656069334533765),
INT64_C( 18),
INT64_MIN },
{ -INT64_C( 6605708948818347231),
INT64_C( 19),
INT64_MIN },
{ INT64_C( 6262739233728864834),
INT64_C( 20),
INT64_MAX },
{ -INT64_C( 2869638089550392513),
INT64_C( 21),
INT64_MIN },
{ -INT64_C( 4509220744627679112),
INT64_C( 22),
INT64_MIN },
{ -INT64_C( 8242787662807073726),
INT64_C( 23),
INT64_MIN },
{ -INT64_C( 2099722359595275681),
INT64_C( 24),
INT64_MIN },
{ -INT64_C( 4715095882789206180),
INT64_C( 25),
INT64_MIN },
{ INT64_C( 9155484054200792494),
INT64_C( 26),
INT64_MAX },
{ -INT64_C( 7844124633883773107),
INT64_C( 27),
INT64_MIN },
{ INT64_C( 2991222266518865149),
INT64_C( 28),
INT64_MAX },
{ INT64_C( 4557487317197189947),
INT64_C( 29),
INT64_MAX },
{ -INT64_C( 4511310000348683096),
INT64_C( 30),
INT64_MIN },
{ -INT64_C( 1451990942514291950),
INT64_C( 31),
INT64_MIN },
{ INT64_C( 2520060751466197506),
INT64_C( 32),
INT64_MAX },
{ -INT64_C( 733555341972481279),
INT64_C( 33),
INT64_MIN },
{ INT64_C( 845902643625352583),
INT64_C( 34),
INT64_MAX },
{ -INT64_C( 7641716232217881062),
INT64_C( 35),
INT64_MIN },
{ -INT64_C( 8276104784778002915),
INT64_C( 36),
INT64_MIN },
{ INT64_C( 3710104816821717305),
INT64_C( 37),
INT64_MAX },
{ -INT64_C( 5741549023560575411),
INT64_C( 38),
INT64_MIN },
{ -INT64_C( 1573255120832388607),
INT64_C( 39),
INT64_MIN },
{ INT64_C( 2757069308578139946),
INT64_C( 40),
INT64_MAX },
{ -INT64_C( 6864847772539067684),
INT64_C( 41),
INT64_MIN },
{ -INT64_C( 2898849396808029569),
INT64_C( 42),
INT64_MIN },
{ INT64_C( 6093816876455722457),
INT64_C( 43),
INT64_MAX },
{ INT64_C( 8014804880445832998),
INT64_C( 44),
INT64_MAX },
{ -INT64_C( 8096430823714527312),
INT64_C( 45),
INT64_MIN },
{ -INT64_C( 7400986762335188579),
INT64_C( 46),
INT64_MIN },
{ INT64_C( 8242944442126874343),
INT64_C( 47),
INT64_MAX },
{ INT64_C( 7878133569993207633),
INT64_C( 48),
INT64_MAX },
{ -INT64_C( 7113976572369941337),
INT64_C( 49),
INT64_MIN },
{ INT64_C( 4320740210876935068),
INT64_C( 50),
INT64_MAX },
{ INT64_C( 6543642333547345424),
INT64_C( 51),
INT64_MAX },
{ -INT64_C( 4878926623715470049),
INT64_C( 52),
INT64_MIN },
{ INT64_C( 7672930688302299870),
INT64_C( 53),
INT64_MAX },
{ -INT64_C( 777788040192488540),
INT64_C( 54),
INT64_MIN },
{ INT64_C( 5788849770090037491),
INT64_C( 55),
INT64_MAX },
{ INT64_C( 380122230265058421),
INT64_C( 56),
INT64_MAX },
{ INT64_C( 1687264862711036209),
INT64_C( 57),
INT64_MAX },
{ -INT64_C( 2178820902755487255),
INT64_C( 58),
INT64_MIN },
{ -INT64_C( 6104854463009450555),
INT64_C( 59),
INT64_MIN },
{ INT64_C( 2086429880151798984),
INT64_C( 60),
INT64_MAX },
{ INT64_C( 2360033774048958517),
INT64_C( 61),
INT64_MAX },
{ -INT64_C( 2628217526476156745),
INT64_C( 62),
INT64_MIN },
{ INT64_C( 6892504795774543047),
INT64_C( 63),
INT64_MAX },
{ -INT64_C( 8172833372237800052),
INT64_C( 64),
INT64_MIN },
{ -INT64_C( 1337015801689427941),
INT64_C( 65),
INT64_MIN },
{ -INT64_C( 2758428302458593081),
INT64_C( 66),
INT64_MIN },
{ INT64_C( 3347157083154123132),
INT64_C( 67),
INT64_MAX },
{ INT64_C( 2324202678863184474),
INT64_C( 68),
INT64_MAX },
{ INT64_C( 3967076913208457450),
INT64_C( 69),
INT64_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
int64_t r = simde_vqrshld_s64(test_vec[i].a, test_vec[i].b);
simde_assert_equal_i64(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
int64_t a = simde_test_codegen_random_i64();
int64_t b = simde_test_codegen_random_i64();
int64_t r = simde_vqrshld_s64(a, b);
simde_test_codegen_write_i64(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i64(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -70 ; i < 70 ; i++) {
int64_t a = simde_test_codegen_random_i64();
int64_t b = i;
int64_t r = simde_vqrshld_s64(a, b);
simde_test_codegen_write_i64(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i64(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlb_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint8_t a;
int8_t b;
uint8_t r;
} test_vec[] = {
{ UINT8_C(230),
-INT8_C( 102),
UINT8_C( 0) },
{ UINT8_C( 28),
-INT8_C( 91),
UINT8_C( 0) },
{ UINT8_C(199),
INT8_MIN,
UINT8_C( 0) },
{ UINT8_C( 97),
INT8_C( 125),
UINT8_MAX },
{ UINT8_C(164),
INT8_C( 97),
UINT8_MAX },
{ UINT8_C( 92),
INT8_C( 124),
UINT8_MAX },
{ UINT8_C(224),
INT8_MAX,
UINT8_MAX },
{ UINT8_C( 35),
INT8_C( 32),
UINT8_MAX },
{ UINT8_C( 85),
-INT8_C( 10),
UINT8_C( 0) },
{ UINT8_C( 32),
-INT8_C( 9),
UINT8_C( 0) },
{ UINT8_C(249),
-INT8_C( 9),
UINT8_C( 0) },
{ UINT8_C(143),
-INT8_C( 9),
UINT8_C( 0) },
{ UINT8_C(231),
-INT8_C( 9),
UINT8_C( 0) },
{ UINT8_C( 20),
-INT8_C( 8),
UINT8_C( 0) },
{ UINT8_C(153),
-INT8_C( 8),
UINT8_C( 1) },
{ UINT8_C( 97),
-INT8_C( 8),
UINT8_C( 0) },
{ UINT8_C( 5),
-INT8_C( 8),
UINT8_C( 0) },
{ UINT8_C( 7),
-INT8_C( 7),
UINT8_C( 0) },
{ UINT8_C( 22),
-INT8_C( 7),
UINT8_C( 0) },
{ UINT8_C( 24),
-INT8_C( 7),
UINT8_C( 0) },
{ UINT8_C( 42),
-INT8_C( 7),
UINT8_C( 0) },
{ UINT8_C(138),
-INT8_C( 6),
UINT8_C( 2) },
{ UINT8_C(187),
-INT8_C( 6),
UINT8_C( 3) },
{ UINT8_C( 16),
-INT8_C( 6),
UINT8_C( 0) },
{ UINT8_C( 37),
-INT8_C( 6),
UINT8_C( 1) },
{ UINT8_C(216),
-INT8_C( 5),
UINT8_C( 7) },
{ UINT8_C(182),
-INT8_C( 5),
UINT8_C( 6) },
{ UINT8_C(236),
-INT8_C( 5),
UINT8_C( 7) },
{ UINT8_C( 88),
-INT8_C( 5),
UINT8_C( 3) },
{ UINT8_C( 23),
-INT8_C( 4),
UINT8_C( 1) },
{ UINT8_C(105),
-INT8_C( 4),
UINT8_C( 7) },
{ UINT8_C(252),
-INT8_C( 4),
UINT8_C( 16) },
{ UINT8_C(120),
-INT8_C( 4),
UINT8_C( 8) },
{ UINT8_C(198),
-INT8_C( 3),
UINT8_C( 25) },
{ UINT8_C(121),
-INT8_C( 3),
UINT8_C( 15) },
{ UINT8_C( 89),
-INT8_C( 3),
UINT8_C( 11) },
{ UINT8_C( 69),
-INT8_C( 3),
UINT8_C( 9) },
{ UINT8_C(156),
-INT8_C( 2),
UINT8_C( 39) },
{ UINT8_C(121),
-INT8_C( 2),
UINT8_C( 30) },
{ UINT8_C(155),
-INT8_C( 2),
UINT8_C( 39) },
{ UINT8_C(188),
-INT8_C( 2),
UINT8_C( 47) },
{ UINT8_C(114),
-INT8_C( 1),
UINT8_C( 57) },
{ UINT8_C( 42),
-INT8_C( 1),
UINT8_C( 21) },
{ UINT8_C(163),
-INT8_C( 1),
UINT8_C( 82) },
{ UINT8_C(134),
-INT8_C( 1),
UINT8_C( 67) },
{ UINT8_C(195),
INT8_C( 0),
UINT8_C(195) },
{ UINT8_C( 5),
INT8_C( 0),
UINT8_C( 5) },
{ UINT8_C(139),
INT8_C( 0),
UINT8_C(139) },
{ UINT8_C(203),
INT8_C( 0),
UINT8_C(203) },
{ UINT8_C( 27),
INT8_C( 0),
UINT8_C( 27) },
{ UINT8_C(164),
INT8_C( 0),
UINT8_C(164) },
{ UINT8_C(245),
INT8_C( 0),
UINT8_C(245) },
{ UINT8_C(165),
INT8_C( 1),
UINT8_MAX },
{ UINT8_C( 95),
INT8_C( 1),
UINT8_C(190) },
{ UINT8_C( 5),
INT8_C( 1),
UINT8_C( 10) },
{ UINT8_C(202),
INT8_C( 1),
UINT8_MAX },
{ UINT8_C( 55),
INT8_C( 2),
UINT8_C(220) },
{ UINT8_C(187),
INT8_C( 2),
UINT8_MAX },
{ UINT8_C(183),
INT8_C( 2),
UINT8_MAX },
{ UINT8_C(144),
INT8_C( 2),
UINT8_MAX },
{ UINT8_C(211),
INT8_C( 3),
UINT8_MAX },
{ UINT8_C( 32),
INT8_C( 3),
UINT8_MAX },
{ UINT8_C(140),
INT8_C( 3),
UINT8_MAX },
{ UINT8_C( 75),
INT8_C( 3),
UINT8_MAX },
{ UINT8_C(230),
INT8_C( 4),
UINT8_MAX },
{ UINT8_C( 5),
INT8_C( 4),
UINT8_C( 80) },
{ UINT8_C(164),
INT8_C( 4),
UINT8_MAX },
{ UINT8_C( 44),
INT8_C( 4),
UINT8_MAX },
{ UINT8_C(161),
INT8_C( 5),
UINT8_MAX },
{ UINT8_C( 29),
INT8_C( 5),
UINT8_MAX },
{ UINT8_C(199),
INT8_C( 5),
UINT8_MAX },
{ UINT8_C( 94),
INT8_C( 5),
UINT8_MAX },
{ UINT8_C(144),
INT8_C( 6),
UINT8_MAX },
{ UINT8_C(241),
INT8_C( 6),
UINT8_MAX },
{ UINT8_C( 1),
INT8_C( 6),
UINT8_C( 64) },
{ UINT8_C( 22),
INT8_C( 6),
UINT8_MAX },
{ UINT8_C(180),
INT8_C( 7),
UINT8_MAX },
{ UINT8_C( 6),
INT8_C( 7),
UINT8_MAX },
{ UINT8_C(162),
INT8_C( 7),
UINT8_MAX },
{ UINT8_C(127),
INT8_C( 7),
UINT8_MAX },
{ UINT8_C( 33),
INT8_C( 8),
UINT8_MAX },
{ UINT8_C( 70),
INT8_C( 8),
UINT8_MAX },
{ UINT8_C(116),
INT8_C( 8),
UINT8_MAX },
{ UINT8_C(199),
INT8_C( 8),
UINT8_MAX },
{ UINT8_C(165),
INT8_C( 9),
UINT8_MAX },
{ UINT8_C(122),
INT8_C( 9),
UINT8_MAX },
{ UINT8_C(145),
INT8_C( 9),
UINT8_MAX },
{ UINT8_C(221),
INT8_C( 9),
UINT8_MAX },
{ UINT8_C( 1),
-INT8_C( 10),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 9),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 8),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 7),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 6),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 5),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 4),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 3),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 2),
UINT8_C( 0) },
{ UINT8_C( 1),
-INT8_C( 1),
UINT8_C( 1) },
{ UINT8_C( 1),
INT8_C( 0),
UINT8_C( 1) },
{ UINT8_C( 1),
INT8_C( 1),
UINT8_C( 2) },
{ UINT8_C( 1),
INT8_C( 2),
UINT8_C( 4) },
{ UINT8_C( 1),
INT8_C( 3),
UINT8_C( 8) },
{ UINT8_C( 1),
INT8_C( 4),
UINT8_C( 16) },
{ UINT8_C( 1),
INT8_C( 5),
UINT8_C( 32) },
{ UINT8_C( 1),
INT8_C( 6),
UINT8_C( 64) },
{ UINT8_C( 1),
INT8_C( 7),
UINT8_C(128) },
{ UINT8_C( 1),
INT8_C( 8),
UINT8_MAX },
{ UINT8_C( 1),
INT8_C( 9),
UINT8_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
uint8_t r = simde_vqrshlb_u8(test_vec[i].a, test_vec[i].b);
simde_assert_equal_u8(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
uint8_t a = simde_test_codegen_random_u8();
int8_t b = simde_test_codegen_random_i8();
uint8_t r = simde_vqrshlb_u8(a, b);
simde_test_codegen_write_u8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -40; i < 40 ; i++) {
uint8_t a = simde_test_codegen_random_u8();
int8_t b = i / 4;
uint8_t r = simde_vqrshlb_u8(a, b);
simde_test_codegen_write_u8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -10; i < 10 ; i++) {
uint8_t a = 1;
int8_t b = i;
uint8_t r = simde_vqrshlb_u8(a, b);
simde_test_codegen_write_u8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlh_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint16_t a;
int16_t b;
uint16_t r;
} test_vec[] = {
{ UINT16_C( 9680),
-INT16_C( 11216),
UINT16_MAX },
{ UINT16_C(11523),
-INT16_C( 22795),
UINT16_C( 6) },
{ UINT16_C(60986),
INT16_C( 6367),
UINT16_C( 0) },
{ UINT16_C(14582),
-INT16_C( 13512),
UINT16_MAX },
{ UINT16_C(14838),
INT16_C( 17219),
UINT16_MAX },
{ UINT16_C(24173),
INT16_C( 20594),
UINT16_MAX },
{ UINT16_C(21801),
-INT16_C( 29743),
UINT16_C( 0) },
{ UINT16_C(49619),
-INT16_C( 23808),
UINT16_C(49619) },
{ UINT16_C(12519),
-INT16_C( 20),
UINT16_C( 0) },
{ UINT16_C(60024),
-INT16_C( 19),
UINT16_C( 0) },
{ UINT16_C(27997),
-INT16_C( 19),
UINT16_C( 0) },
{ UINT16_C(38800),
-INT16_C( 18),
UINT16_C( 0) },
{ UINT16_C(28507),
-INT16_C( 18),
UINT16_C( 0) },
{ UINT16_C(20912),
-INT16_C( 17),
UINT16_C( 0) },
{ UINT16_C(59560),
-INT16_C( 17),
UINT16_C( 0) },
{ UINT16_C(40476),
-INT16_C( 16),
UINT16_C( 1) },
{ UINT16_C(24609),
-INT16_C( 16),
UINT16_C( 0) },
{ UINT16_C(36578),
-INT16_C( 15),
UINT16_C( 1) },
{ UINT16_C(21694),
-INT16_C( 15),
UINT16_C( 1) },
{ UINT16_C(59358),
-INT16_C( 14),
UINT16_C( 4) },
{ UINT16_C(44970),
-INT16_C( 14),
UINT16_C( 3) },
{ UINT16_C(32114),
-INT16_C( 13),
UINT16_C( 4) },
{ UINT16_C(29297),
-INT16_C( 13),
UINT16_C( 4) },
{ UINT16_C(22561),
-INT16_C( 12),
UINT16_C( 6) },
{ UINT16_C(39330),
-INT16_C( 12),
UINT16_C( 10) },
{ UINT16_C(65346),
-INT16_C( 11),
UINT16_C( 32) },
{ UINT16_C(54022),
-INT16_C( 11),
UINT16_C( 26) },
{ UINT16_C(24982),
-INT16_C( 10),
UINT16_C( 24) },
{ UINT16_C(17986),
-INT16_C( 10),
UINT16_C( 18) },
{ UINT16_C(60083),
-INT16_C( 9),
UINT16_C( 117) },
{ UINT16_C(53038),
-INT16_C( 9),
UINT16_C( 104) },
{ UINT16_C(20361),
-INT16_C( 8),
UINT16_C( 80) },
{ UINT16_C(27439),
-INT16_C( 8),
UINT16_C( 107) },
{ UINT16_C(60894),
-INT16_C( 7),
UINT16_C( 476) },
{ UINT16_C(48319),
-INT16_C( 7),
UINT16_C( 377) },
{ UINT16_C(27092),
-INT16_C( 6),
UINT16_C( 423) },
{ UINT16_C(18028),
-INT16_C( 6),
UINT16_C( 282) },
{ UINT16_C(56807),
-INT16_C( 5),
UINT16_C( 1775) },
{ UINT16_C( 2232),
-INT16_C( 5),
UINT16_C( 70) },
{ UINT16_C(23093),
-INT16_C( 4),
UINT16_C( 1443) },
{ UINT16_C(30625),
-INT16_C( 4),
UINT16_C( 1914) },
{ UINT16_C(42841),
-INT16_C( 3),
UINT16_C( 5355) },
{ UINT16_C(61514),
-INT16_C( 3),
UINT16_C( 7689) },
{ UINT16_C(36104),
-INT16_C( 2),
UINT16_C( 9026) },
{ UINT16_C(47926),
-INT16_C( 2),
UINT16_C(11982) },
{ UINT16_C(25975),
-INT16_C( 1),
UINT16_C(12988) },
{ UINT16_C( 139),
-INT16_C( 1),
UINT16_C( 70) },
{ UINT16_C(47796),
INT16_C( 0),
UINT16_C(47796) },
{ UINT16_C(37483),
INT16_C( 0),
UINT16_C(37483) },
{ UINT16_C(11176),
INT16_C( 0),
UINT16_C(11176) },
{ UINT16_C(31823),
INT16_C( 1),
UINT16_C(63646) },
{ UINT16_C(48020),
INT16_C( 1),
UINT16_MAX },
{ UINT16_C(31683),
INT16_C( 2),
UINT16_MAX },
{ UINT16_C(31640),
INT16_C( 2),
UINT16_MAX },
{ UINT16_C(52611),
INT16_C( 3),
UINT16_MAX },
{ UINT16_C( 9430),
INT16_C( 3),
UINT16_MAX },
{ UINT16_C(12100),
INT16_C( 4),
UINT16_MAX },
{ UINT16_C(36811),
INT16_C( 4),
UINT16_MAX },
{ UINT16_C(54303),
INT16_C( 5),
UINT16_MAX },
{ UINT16_C(22044),
INT16_C( 5),
UINT16_MAX },
{ UINT16_C(37775),
INT16_C( 6),
UINT16_MAX },
{ UINT16_C( 6843),
INT16_C( 6),
UINT16_MAX },
{ UINT16_C(28564),
INT16_C( 7),
UINT16_MAX },
{ UINT16_C(65493),
INT16_C( 7),
UINT16_MAX },
{ UINT16_C(32002),
INT16_C( 8),
UINT16_MAX },
{ UINT16_C(20778),
INT16_C( 8),
UINT16_MAX },
{ UINT16_C(49145),
INT16_C( 9),
UINT16_MAX },
{ UINT16_C(48140),
INT16_C( 9),
UINT16_MAX },
{ UINT16_C(42042),
INT16_C( 10),
UINT16_MAX },
{ UINT16_C(48696),
INT16_C( 10),
UINT16_MAX },
{ UINT16_C( 3697),
INT16_C( 11),
UINT16_MAX },
{ UINT16_C(46562),
INT16_C( 11),
UINT16_MAX },
{ UINT16_C(44605),
INT16_C( 12),
UINT16_MAX },
{ UINT16_C(23876),
INT16_C( 12),
UINT16_MAX },
{ UINT16_C(24706),
INT16_C( 13),
UINT16_MAX },
{ UINT16_C( 4531),
INT16_C( 13),
UINT16_MAX },
{ UINT16_C(28404),
INT16_C( 14),
UINT16_MAX },
{ UINT16_C(34860),
INT16_C( 14),
UINT16_MAX },
{ UINT16_C( 477),
INT16_C( 15),
UINT16_MAX },
{ UINT16_C(57223),
INT16_C( 15),
UINT16_MAX },
{ UINT16_C(45694),
INT16_C( 16),
UINT16_MAX },
{ UINT16_C(30512),
INT16_C( 16),
UINT16_MAX },
{ UINT16_C(15473),
INT16_C( 17),
UINT16_MAX },
{ UINT16_C(43828),
INT16_C( 17),
UINT16_MAX },
{ UINT16_C(27872),
INT16_C( 18),
UINT16_MAX },
{ UINT16_C(20841),
INT16_C( 18),
UINT16_MAX },
{ UINT16_C(19578),
INT16_C( 19),
UINT16_MAX },
{ UINT16_C(46855),
INT16_C( 19),
UINT16_MAX },
{ UINT16_C( 1),
-INT16_C( 20),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 19),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 18),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 17),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 16),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 15),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 14),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 13),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 12),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 11),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 10),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 9),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 8),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 7),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 6),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 5),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 4),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 3),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 2),
UINT16_C( 0) },
{ UINT16_C( 1),
-INT16_C( 1),
UINT16_C( 1) },
{ UINT16_C( 1),
INT16_C( 0),
UINT16_C( 1) },
{ UINT16_C( 1),
INT16_C( 1),
UINT16_C( 2) },
{ UINT16_C( 1),
INT16_C( 2),
UINT16_C( 4) },
{ UINT16_C( 1),
INT16_C( 3),
UINT16_C( 8) },
{ UINT16_C( 1),
INT16_C( 4),
UINT16_C( 16) },
{ UINT16_C( 1),
INT16_C( 5),
UINT16_C( 32) },
{ UINT16_C( 1),
INT16_C( 6),
UINT16_C( 64) },
{ UINT16_C( 1),
INT16_C( 7),
UINT16_C( 128) },
{ UINT16_C( 1),
INT16_C( 8),
UINT16_C( 256) },
{ UINT16_C( 1),
INT16_C( 9),
UINT16_C( 512) },
{ UINT16_C( 1),
INT16_C( 10),
UINT16_C( 1024) },
{ UINT16_C( 1),
INT16_C( 11),
UINT16_C( 2048) },
{ UINT16_C( 1),
INT16_C( 12),
UINT16_C( 4096) },
{ UINT16_C( 1),
INT16_C( 13),
UINT16_C( 8192) },
{ UINT16_C( 1),
INT16_C( 14),
UINT16_C(16384) },
{ UINT16_C( 1),
INT16_C( 15),
UINT16_C(32768) },
{ UINT16_C( 1),
INT16_C( 16),
UINT16_MAX },
{ UINT16_C( 1),
INT16_C( 17),
UINT16_MAX },
{ UINT16_C( 1),
INT16_C( 18),
UINT16_MAX },
{ UINT16_C( 1),
INT16_C( 19),
UINT16_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
uint16_t r = simde_vqrshlh_u16(test_vec[i].a, test_vec[i].b);
simde_assert_equal_u16(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
uint16_t a = simde_test_codegen_random_u16();
int16_t b = simde_test_codegen_random_i16();
uint16_t r = simde_vqrshlh_u16(a, b);
simde_test_codegen_write_u16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -40 ; i < 40 ; i++) {
uint16_t a = simde_test_codegen_random_u16();
int16_t b = i / 2;
uint16_t r = simde_vqrshlh_u16(a, b);
simde_test_codegen_write_u16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -20 ; i < 20 ; i++) {
uint16_t a = 1;
int16_t b = i;
uint16_t r = simde_vqrshlh_u16(a, b);
simde_test_codegen_write_u16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshls_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint32_t a;
int32_t b;
uint32_t r;
} test_vec[] = {
{ UINT32_C(2090916658),
-INT32_C( 1876413820),
UINT32_C( 0) },
{ UINT32_C(1522271204),
-INT32_C( 1655473296),
UINT32_MAX },
{ UINT32_C(2975898342),
INT32_C( 354288286),
UINT32_C( 0) },
{ UINT32_C( 254363755),
INT32_C( 1179680020),
UINT32_MAX },
{ UINT32_C(3720540248),
INT32_C( 107866914),
UINT32_MAX },
{ UINT32_C(1583360494),
-INT32_C( 1946438491),
UINT32_C( 0) },
{ UINT32_C(3963444046),
-INT32_C( 922592419),
UINT32_MAX },
{ UINT32_C(3084397475),
INT32_C( 16656552),
UINT32_C( 0) },
{ UINT32_C( 987611160),
-INT32_C( 40),
UINT32_C( 0) },
{ UINT32_C(2571127467),
-INT32_C( 39),
UINT32_C( 0) },
{ UINT32_C( 435724660),
-INT32_C( 39),
UINT32_C( 0) },
{ UINT32_C(2745496405),
-INT32_C( 38),
UINT32_C( 0) },
{ UINT32_C(2895176015),
-INT32_C( 38),
UINT32_C( 0) },
{ UINT32_C(3765801533),
-INT32_C( 37),
UINT32_C( 0) },
{ UINT32_C(1704480189),
-INT32_C( 37),
UINT32_C( 0) },
{ UINT32_C(2372245109),
-INT32_C( 36),
UINT32_C( 0) },
{ UINT32_C( 46613334),
-INT32_C( 36),
UINT32_C( 0) },
{ UINT32_C( 26937485),
-INT32_C( 35),
UINT32_C( 0) },
{ UINT32_C(4263154601),
-INT32_C( 35),
UINT32_C( 0) },
{ UINT32_C(3600924551),
-INT32_C( 34),
UINT32_C( 0) },
{ UINT32_C(3716297120),
-INT32_C( 34),
UINT32_C( 0) },
{ UINT32_C(2159999171),
-INT32_C( 33),
UINT32_C( 0) },
{ UINT32_C(3152369221),
-INT32_C( 33),
UINT32_C( 0) },
{ UINT32_C(1112034284),
-INT32_C( 32),
UINT32_C( 0) },
{ UINT32_C( 457445518),
-INT32_C( 32),
UINT32_C( 0) },
{ UINT32_C(3239960600),
-INT32_C( 31),
UINT32_C( 2) },
{ UINT32_C(4206835571),
-INT32_C( 31),
UINT32_C( 2) },
{ UINT32_C(2547015926),
-INT32_C( 30),
UINT32_C( 2) },
{ UINT32_C(1433686930),
-INT32_C( 30),
UINT32_C( 1) },
{ UINT32_C(2429956683),
-INT32_C( 29),
UINT32_C( 5) },
{ UINT32_C(1951120264),
-INT32_C( 29),
UINT32_C( 4) },
{ UINT32_C(2495058950),
-INT32_C( 28),
UINT32_C( 9) },
{ UINT32_C(3165715364),
-INT32_C( 28),
UINT32_C( 12) },
{ UINT32_C(1333644763),
-INT32_C( 27),
UINT32_C( 10) },
{ UINT32_C(4215880708),
-INT32_C( 27),
UINT32_C( 31) },
{ UINT32_C( 781327004),
-INT32_C( 26),
UINT32_C( 12) },
{ UINT32_C(3095660141),
-INT32_C( 26),
UINT32_C( 46) },
{ UINT32_C(3242744377),
-INT32_C( 25),
UINT32_C( 97) },
{ UINT32_C( 473338901),
-INT32_C( 25),
UINT32_C( 14) },
{ UINT32_C(3434147112),
-INT32_C( 24),
UINT32_C( 205) },
{ UINT32_C(3297272040),
-INT32_C( 24),
UINT32_C( 197) },
{ UINT32_C( 840107309),
-INT32_C( 23),
UINT32_C( 100) },
{ UINT32_C(3710737473),
-INT32_C( 23),
UINT32_C( 442) },
{ UINT32_C(3809263478),
-INT32_C( 22),
UINT32_C( 908) },
{ UINT32_C(4271608005),
-INT32_C( 22),
UINT32_C( 1018) },
{ UINT32_C(4290831594),
-INT32_C( 21),
UINT32_C( 2046) },
{ UINT32_C(2686187128),
-INT32_C( 21),
UINT32_C( 1281) },
{ UINT32_C(3412905187),
-INT32_C( 20),
UINT32_C( 3255) },
{ UINT32_C(1519383596),
-INT32_C( 20),
UINT32_C( 1449) },
{ UINT32_C( 982295289),
-INT32_C( 19),
UINT32_C( 1874) },
{ UINT32_C(1964489215),
-INT32_C( 19),
UINT32_C( 3747) },
{ UINT32_C(1029251960),
-INT32_C( 18),
UINT32_C( 3926) },
{ UINT32_C(2638017715),
-INT32_C( 18),
UINT32_C( 10063) },
{ UINT32_C(1352531160),
-INT32_C( 17),
UINT32_C( 10319) },
{ UINT32_C(3589322994),
-INT32_C( 17),
UINT32_C( 27384) },
{ UINT32_C(2980076676),
-INT32_C( 16),
UINT32_C( 45472) },
{ UINT32_C(1225470032),
-INT32_C( 16),
UINT32_C( 18699) },
{ UINT32_C(3515062226),
-INT32_C( 15),
UINT32_C( 107271) },
{ UINT32_C(3360136016),
-INT32_C( 15),
UINT32_C( 102543) },
{ UINT32_C(1912971454),
-INT32_C( 14),
UINT32_C( 116759) },
{ UINT32_C(1829716372),
-INT32_C( 14),
UINT32_C( 111677) },
{ UINT32_C( 800959549),
-INT32_C( 13),
UINT32_C( 97773) },
{ UINT32_C(3909398117),
-INT32_C( 13),
UINT32_C( 477221) },
{ UINT32_C(1536861450),
-INT32_C( 12),
UINT32_C( 375210) },
{ UINT32_C(2812585429),
-INT32_C( 12),
UINT32_C( 686666) },
{ UINT32_C(2356750396),
-INT32_C( 11),
UINT32_C( 1150757) },
{ UINT32_C(2169815235),
-INT32_C( 11),
UINT32_C( 1059480) },
{ UINT32_C(4109589088),
-INT32_C( 10),
UINT32_C( 4013271) },
{ UINT32_C(3647013787),
-INT32_C( 10),
UINT32_C( 3561537) },
{ UINT32_C( 336076719),
-INT32_C( 9),
UINT32_C( 656400) },
{ UINT32_C(3623751117),
-INT32_C( 9),
UINT32_C( 7077639) },
{ UINT32_C(2268240050),
-INT32_C( 8),
UINT32_C( 8860313) },
{ UINT32_C(2049890110),
-INT32_C( 8),
UINT32_C( 8007383) },
{ UINT32_C(3255281663),
-INT32_C( 7),
UINT32_C( 25431888) },
{ UINT32_C(3343080295),
-INT32_C( 7),
UINT32_C( 26117815) },
{ UINT32_C(1371289525),
-INT32_C( 6),
UINT32_C( 21426399) },
{ UINT32_C(3911851322),
-INT32_C( 6),
UINT32_C( 61122677) },
{ UINT32_C( 167653948),
-INT32_C( 5),
UINT32_C( 5239186) },
{ UINT32_C(4058119231),
-INT32_C( 5),
UINT32_C( 126816226) },
{ UINT32_C(3531084692),
-INT32_C( 4),
UINT32_C( 220692793) },
{ UINT32_C(3914180586),
-INT32_C( 4),
UINT32_C( 244636287) },
{ UINT32_C(3064681550),
-INT32_C( 3),
UINT32_C( 383085194) },
{ UINT32_C(1702752175),
-INT32_C( 3),
UINT32_C( 212844022) },
{ UINT32_C(1622554918),
-INT32_C( 2),
UINT32_C( 405638730) },
{ UINT32_C(2471092311),
-INT32_C( 2),
UINT32_C( 617773078) },
{ UINT32_C(1386039058),
-INT32_C( 1),
UINT32_C( 693019529) },
{ UINT32_C(3628301891),
-INT32_C( 1),
UINT32_C(1814150946) },
{ UINT32_C(2091564177),
INT32_C( 0),
UINT32_C(2091564177) },
{ UINT32_C(2976249699),
INT32_C( 0),
UINT32_C(2976249699) },
{ UINT32_C(4217835851),
INT32_C( 0),
UINT32_C(4217835851) },
{ UINT32_C( 643884288),
INT32_C( 1),
UINT32_C(1287768576) },
{ UINT32_C(1971721758),
INT32_C( 1),
UINT32_C(3943443516) },
{ UINT32_C( 134860790),
INT32_C( 2),
UINT32_C( 539443160) },
{ UINT32_C(1515890199),
INT32_C( 2),
UINT32_MAX },
{ UINT32_C(3039993380),
INT32_C( 3),
UINT32_MAX },
{ UINT32_C(3174161754),
INT32_C( 3),
UINT32_MAX },
{ UINT32_C( 544118740),
INT32_C( 4),
UINT32_MAX },
{ UINT32_C(2820396712),
INT32_C( 4),
UINT32_MAX },
{ UINT32_C(3654187963),
INT32_C( 5),
UINT32_MAX },
{ UINT32_C(2270123153),
INT32_C( 5),
UINT32_MAX },
{ UINT32_C( 982472739),
INT32_C( 6),
UINT32_MAX },
{ UINT32_C( 580250366),
INT32_C( 6),
UINT32_MAX },
{ UINT32_C(3805792136),
INT32_C( 7),
UINT32_MAX },
{ UINT32_C(2040465828),
INT32_C( 7),
UINT32_MAX },
{ UINT32_C(1217990048),
INT32_C( 8),
UINT32_MAX },
{ UINT32_C(2666575075),
INT32_C( 8),
UINT32_MAX },
{ UINT32_C(3229138479),
INT32_C( 9),
UINT32_MAX },
{ UINT32_C( 893896466),
INT32_C( 9),
UINT32_MAX },
{ UINT32_C( 493934111),
INT32_C( 10),
UINT32_MAX },
{ UINT32_C(1212089792),
INT32_C( 10),
UINT32_MAX },
{ UINT32_C(1898583756),
INT32_C( 11),
UINT32_MAX },
{ UINT32_C(3219835167),
INT32_C( 11),
UINT32_MAX },
{ UINT32_C(3121054679),
INT32_C( 12),
UINT32_MAX },
{ UINT32_C(1717172023),
INT32_C( 12),
UINT32_MAX },
{ UINT32_C(3341210037),
INT32_C( 13),
UINT32_MAX },
{ UINT32_C(3086839192),
INT32_C( 13),
UINT32_MAX },
{ UINT32_C( 81030467),
INT32_C( 14),
UINT32_MAX },
{ UINT32_C(1045173106),
INT32_C( 14),
UINT32_MAX },
{ UINT32_C(1236236073),
INT32_C( 15),
UINT32_MAX },
{ UINT32_C( 386439488),
INT32_C( 15),
UINT32_MAX },
{ UINT32_C(1406275612),
INT32_C( 16),
UINT32_MAX },
{ UINT32_C(3183028999),
INT32_C( 16),
UINT32_MAX },
{ UINT32_C(2491736060),
INT32_C( 17),
UINT32_MAX },
{ UINT32_C(2420867404),
INT32_C( 17),
UINT32_MAX },
{ UINT32_C(1620320238),
INT32_C( 18),
UINT32_MAX },
{ UINT32_C(1537204274),
INT32_C( 18),
UINT32_MAX },
{ UINT32_C(2560904791),
INT32_C( 19),
UINT32_MAX },
{ UINT32_C( 78622184),
INT32_C( 19),
UINT32_MAX },
{ UINT32_C(3294134717),
INT32_C( 20),
UINT32_MAX },
{ UINT32_C(2827030956),
INT32_C( 20),
UINT32_MAX },
{ UINT32_C(1027344113),
INT32_C( 21),
UINT32_MAX },
{ UINT32_C(1993181063),
INT32_C( 21),
UINT32_MAX },
{ UINT32_C(3637928358),
INT32_C( 22),
UINT32_MAX },
{ UINT32_C(2570351938),
INT32_C( 22),
UINT32_MAX },
{ UINT32_C(2888947908),
INT32_C( 23),
UINT32_MAX },
{ UINT32_C(1118888325),
INT32_C( 23),
UINT32_MAX },
{ UINT32_C( 252119138),
INT32_C( 24),
UINT32_MAX },
{ UINT32_C( 196577306),
INT32_C( 24),
UINT32_MAX },
{ UINT32_C( 373879950),
INT32_C( 25),
UINT32_MAX },
{ UINT32_C( 579606139),
INT32_C( 25),
UINT32_MAX },
{ UINT32_C(3120194167),
INT32_C( 26),
UINT32_MAX },
{ UINT32_C(2622697176),
INT32_C( 26),
UINT32_MAX },
{ UINT32_C(2353562631),
INT32_C( 27),
UINT32_MAX },
{ UINT32_C(3369072741),
INT32_C( 27),
UINT32_MAX },
{ UINT32_C( 467129857),
INT32_C( 28),
UINT32_MAX },
{ UINT32_C(3978727006),
INT32_C( 28),
UINT32_MAX },
{ UINT32_C(4261637762),
INT32_C( 29),
UINT32_MAX },
{ UINT32_C(4229992324),
INT32_C( 29),
UINT32_MAX },
{ UINT32_C(3384089329),
INT32_C( 30),
UINT32_MAX },
{ UINT32_C(1348798537),
INT32_C( 30),
UINT32_MAX },
{ UINT32_C(4074548621),
INT32_C( 31),
UINT32_MAX },
{ UINT32_C(2814028710),
INT32_C( 31),
UINT32_MAX },
{ UINT32_C(3770847617),
INT32_C( 32),
UINT32_MAX },
{ UINT32_C(2731403296),
INT32_C( 32),
UINT32_MAX },
{ UINT32_C(3684749398),
INT32_C( 33),
UINT32_MAX },
{ UINT32_C(1356316767),
INT32_C( 33),
UINT32_MAX },
{ UINT32_C( 605719771),
INT32_C( 34),
UINT32_MAX },
{ UINT32_C( 578060181),
INT32_C( 34),
UINT32_MAX },
{ UINT32_C(3541323821),
INT32_C( 35),
UINT32_MAX },
{ UINT32_C(2105200636),
INT32_C( 35),
UINT32_MAX },
{ UINT32_C(2153593952),
INT32_C( 36),
UINT32_MAX },
{ UINT32_C(2049124900),
INT32_C( 36),
UINT32_MAX },
{ UINT32_C(1498792954),
INT32_C( 37),
UINT32_MAX },
{ UINT32_C(1604988036),
INT32_C( 37),
UINT32_MAX },
{ UINT32_C(1317258425),
INT32_C( 38),
UINT32_MAX },
{ UINT32_C(1886451523),
INT32_C( 38),
UINT32_MAX },
{ UINT32_C(1128498247),
INT32_C( 39),
UINT32_MAX },
{ UINT32_C(3032595795),
INT32_C( 39),
UINT32_MAX },
{ UINT32_C( 1),
-INT32_C( 40),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 39),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 38),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 37),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 36),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 35),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 34),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 33),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 32),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 31),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 30),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 29),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 28),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 27),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 26),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 25),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 24),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 23),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 22),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 21),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 20),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 19),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 18),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 17),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 16),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 15),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 14),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 13),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 12),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 11),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 10),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 9),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 8),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 7),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 6),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 5),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 4),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 3),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 2),
UINT32_C( 0) },
{ UINT32_C( 1),
-INT32_C( 1),
UINT32_C( 1) },
{ UINT32_C( 1),
INT32_C( 0),
UINT32_C( 1) },
{ UINT32_C( 1),
INT32_C( 1),
UINT32_C( 2) },
{ UINT32_C( 1),
INT32_C( 2),
UINT32_C( 4) },
{ UINT32_C( 1),
INT32_C( 3),
UINT32_C( 8) },
{ UINT32_C( 1),
INT32_C( 4),
UINT32_C( 16) },
{ UINT32_C( 1),
INT32_C( 5),
UINT32_C( 32) },
{ UINT32_C( 1),
INT32_C( 6),
UINT32_C( 64) },
{ UINT32_C( 1),
INT32_C( 7),
UINT32_C( 128) },
{ UINT32_C( 1),
INT32_C( 8),
UINT32_C( 256) },
{ UINT32_C( 1),
INT32_C( 9),
UINT32_C( 512) },
{ UINT32_C( 1),
INT32_C( 10),
UINT32_C( 1024) },
{ UINT32_C( 1),
INT32_C( 11),
UINT32_C( 2048) },
{ UINT32_C( 1),
INT32_C( 12),
UINT32_C( 4096) },
{ UINT32_C( 1),
INT32_C( 13),
UINT32_C( 8192) },
{ UINT32_C( 1),
INT32_C( 14),
UINT32_C( 16384) },
{ UINT32_C( 1),
INT32_C( 15),
UINT32_C( 32768) },
{ UINT32_C( 1),
INT32_C( 16),
UINT32_C( 65536) },
{ UINT32_C( 1),
INT32_C( 17),
UINT32_C( 131072) },
{ UINT32_C( 1),
INT32_C( 18),
UINT32_C( 262144) },
{ UINT32_C( 1),
INT32_C( 19),
UINT32_C( 524288) },
{ UINT32_C( 1),
INT32_C( 20),
UINT32_C( 1048576) },
{ UINT32_C( 1),
INT32_C( 21),
UINT32_C( 2097152) },
{ UINT32_C( 1),
INT32_C( 22),
UINT32_C( 4194304) },
{ UINT32_C( 1),
INT32_C( 23),
UINT32_C( 8388608) },
{ UINT32_C( 1),
INT32_C( 24),
UINT32_C( 16777216) },
{ UINT32_C( 1),
INT32_C( 25),
UINT32_C( 33554432) },
{ UINT32_C( 1),
INT32_C( 26),
UINT32_C( 67108864) },
{ UINT32_C( 1),
INT32_C( 27),
UINT32_C( 134217728) },
{ UINT32_C( 1),
INT32_C( 28),
UINT32_C( 268435456) },
{ UINT32_C( 1),
INT32_C( 29),
UINT32_C( 536870912) },
{ UINT32_C( 1),
INT32_C( 30),
UINT32_C(1073741824) },
{ UINT32_C( 1),
INT32_C( 31),
UINT32_C(2147483648) },
{ UINT32_C( 1),
INT32_C( 32),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 33),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 34),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 35),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 36),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 37),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 38),
UINT32_MAX },
{ UINT32_C( 1),
INT32_C( 39),
UINT32_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
uint32_t r = simde_vqrshls_u32(test_vec[i].a, test_vec[i].b);
simde_assert_equal_u32(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
uint32_t a = simde_test_codegen_random_u32();
int32_t b = simde_test_codegen_random_i32();
uint32_t r = simde_vqrshls_u32(a, b);
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -80 ; i < 80 ; i++) {
uint32_t a = simde_test_codegen_random_u32();
int32_t b = i / 2;
uint32_t r = simde_vqrshls_u32(a, b);
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -40 ; i < 40 ; i++) {
uint32_t a = 1;
int32_t b = i;
uint32_t r = simde_vqrshls_u32(a, b);
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshld_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint64_t a;
int64_t b;
uint64_t r;
} test_vec[] = {
{ UINT64_C( 7429138017364722758),
INT64_C( 4619745276961468766),
UINT64_MAX },
{ UINT64_C(16729366776128966668),
-INT64_C( 6295118163883541953),
UINT64_MAX },
{ UINT64_C(18020346440811283203),
-INT64_C( 2959584269102208813),
UINT64_C( 512169) },
{ UINT64_C( 3917121183626973185),
INT64_C( 4264310951252916258),
UINT64_MAX },
{ UINT64_C( 3061038548513273571),
INT64_C( 4739692536268312102),
UINT64_MAX },
{ UINT64_C(10322832451653927957),
INT64_C( 4718436907658542601),
UINT64_MAX },
{ UINT64_C( 9942042947975472247),
-INT64_C( 6085982031727439607),
UINT64_MAX },
{ UINT64_C( 6430851442872368963),
INT64_C( 799412662857978488),
UINT64_MAX },
{ UINT64_C( 2118332385817450873),
-INT64_C( 70),
UINT64_C( 0) },
{ UINT64_C( 6982532280625847973),
-INT64_C( 69),
UINT64_C( 0) },
{ UINT64_C( 1141748918117178927),
-INT64_C( 68),
UINT64_C( 0) },
{ UINT64_C( 18294255171039904),
-INT64_C( 67),
UINT64_C( 0) },
{ UINT64_C(10594790617804184279),
-INT64_C( 66),
UINT64_C( 0) },
{ UINT64_C(10348345464437239583),
-INT64_C( 65),
UINT64_C( 0) },
{ UINT64_C(11167493290873236563),
-INT64_C( 64),
UINT64_C( 1) },
{ UINT64_C(13105492365577019481),
-INT64_C( 63),
UINT64_C( 1) },
{ UINT64_C( 2210045851443707177),
-INT64_C( 62),
UINT64_C( 0) },
{ UINT64_C( 9369447858028837399),
-INT64_C( 61),
UINT64_C( 4) },
{ UINT64_C( 6068432253768963235),
-INT64_C( 60),
UINT64_C( 5) },
{ UINT64_C( 4600731674881558086),
-INT64_C( 59),
UINT64_C( 8) },
{ UINT64_C( 4174276253166565842),
-INT64_C( 58),
UINT64_C( 14) },
{ UINT64_C(16369940609436240252),
-INT64_C( 57),
UINT64_C( 114) },
{ UINT64_C( 5123890215022271179),
-INT64_C( 56),
UINT64_C( 71) },
{ UINT64_C( 3896252926974971838),
-INT64_C( 55),
UINT64_C( 108) },
{ UINT64_C(16724950014157613502),
-INT64_C( 54),
UINT64_C( 928) },
{ UINT64_C( 5503892981542079038),
-INT64_C( 53),
UINT64_C( 611) },
{ UINT64_C( 6314941239201554779),
-INT64_C( 52),
UINT64_C( 1402) },
{ UINT64_C( 1303859522592968317),
-INT64_C( 51),
UINT64_C( 579) },
{ UINT64_C( 6051443804659130278),
-INT64_C( 50),
UINT64_C( 5375) },
{ UINT64_C(12440124490884681687),
-INT64_C( 49),
UINT64_C( 22098) },
{ UINT64_C( 6990901520229774868),
-INT64_C( 48),
UINT64_C( 24837) },
{ UINT64_C( 1305861837086142393),
-INT64_C( 47),
UINT64_C( 9279) },
{ UINT64_C(17717477724658143609),
-INT64_C( 46),
UINT64_C( 251781) },
{ UINT64_C(18062796700632593071),
-INT64_C( 45),
UINT64_C( 513376) },
{ UINT64_C( 1795999873483912103),
-INT64_C( 44),
UINT64_C( 102091) },
{ UINT64_C( 241299411435859931),
-INT64_C( 43),
UINT64_C( 27433) },
{ UINT64_C( 5577834163367673429),
-INT64_C( 42),
UINT64_C( 1268253) },
{ UINT64_C( 5621891626886346020),
-INT64_C( 41),
UINT64_C( 2556540) },
{ UINT64_C( 3612667928251050924),
-INT64_C( 40),
UINT64_C( 3285702) },
{ UINT64_C(16249501526605252597),
-INT64_C( 39),
UINT64_C( 29557671) },
{ UINT64_C(12195111744654545489),
-INT64_C( 38),
UINT64_C( 44365558) },
{ UINT64_C( 3415900616083606130),
-INT64_C( 37),
UINT64_C( 24853948) },
{ UINT64_C(18152985381987500130),
-INT64_C( 36),
UINT64_C( 264160704) },
{ UINT64_C( 9948727799889684131),
-INT64_C( 35),
UINT64_C( 289546087) },
{ UINT64_C(10681333395570189326),
-INT64_C( 34),
UINT64_C( 621735432) },
{ UINT64_C( 645163348839493186),
-INT64_C( 33),
UINT64_C( 75106899) },
{ UINT64_C( 3266990488972045908),
-INT64_C( 32),
UINT64_C( 760655498) },
{ UINT64_C(15769473719964848148),
-INT64_C( 31),
UINT64_C( 7343233433) },
{ UINT64_C( 5586337152770003665),
-INT64_C( 30),
UINT64_C( 5202681900) },
{ UINT64_C(11260132970864980886),
-INT64_C( 29),
UINT64_C( 20973632058) },
{ UINT64_C(14550089934837319221),
-INT64_C( 28),
UINT64_C( 54203308876) },
{ UINT64_C( 9711149161601452318),
-INT64_C( 27),
UINT64_C( 72353699517) },
{ UINT64_C( 8041458439114272833),
-INT64_C( 26),
UINT64_C( 119827068435) },
{ UINT64_C(16651760222090275635),
-INT64_C( 25),
UINT64_C( 496261126461) },
{ UINT64_C( 8751217948320206325),
-INT64_C( 24),
UINT64_C( 521613237162) },
{ UINT64_C(13265114621936896475),
-INT64_C( 23),
UINT64_C( 1581324889891) },
{ UINT64_C(14096157501787770967),
-INT64_C( 22),
UINT64_C( 3360785842368) },
{ UINT64_C( 3377792328499284551),
-INT64_C( 21),
UINT64_C( 1610656894922) },
{ UINT64_C(17597052593422960225),
-INT64_C( 20),
UINT64_C( 16781857102797) },
{ UINT64_C( 1658342532717058259),
-INT64_C( 19),
UINT64_C( 3163037362513) },
{ UINT64_C(16969816986861635373),
-INT64_C( 18),
UINT64_C( 64734714457938) },
{ UINT64_C( 8329342718721703472),
-INT64_C( 17),
UINT64_C( 63547841787122) },
{ UINT64_C(10041168686828514891),
-INT64_C( 16),
UINT64_C( 153216074933296) },
{ UINT64_C(12237645212961660670),
-INT64_C( 15),
UINT64_C( 373463293852590) },
{ UINT64_C( 3562038348982131680),
-INT64_C( 14),
UINT64_C( 217409567198616) },
{ UINT64_C( 7145577741006033829),
-INT64_C( 13),
UINT64_C( 872262907837651) },
{ UINT64_C(13755156271903300256),
-INT64_C( 12),
UINT64_C( 3358192449195142) },
{ UINT64_C( 8296845007885417215),
-INT64_C( 11),
UINT64_C( 4051193851506551) },
{ UINT64_C( 1629851653005281899),
-INT64_C( 10),
UINT64_C( 1591652004887971) },
{ UINT64_C( 735204301844855224),
-INT64_C( 9),
UINT64_C( 1435945902040733) },
{ UINT64_C( 2076237614110997330),
-INT64_C( 8),
UINT64_C( 8110303180121083) },
{ UINT64_C( 506579764284705793),
-INT64_C( 7),
UINT64_C( 3957654408474264) },
{ UINT64_C( 1931221129917431109),
-INT64_C( 6),
UINT64_C( 30175330154959861) },
{ UINT64_C(16555547324968508236),
-INT64_C( 5),
UINT64_C( 517360853905265882) },
{ UINT64_C( 7805521466995778585),
-INT64_C( 4),
UINT64_C( 487845091687236162) },
{ UINT64_C(16841219210460850452),
-INT64_C( 3),
UINT64_C( 2105152401307606307) },
{ UINT64_C(10052437061868203012),
-INT64_C( 2),
UINT64_C( 2513109265467050753) },
{ UINT64_C(11781701994039897097),
-INT64_C( 1),
UINT64_C( 5890850997019948549) },
{ UINT64_C( 6268495296277870887),
INT64_C( 0),
UINT64_C( 6268495296277870887) },
{ UINT64_C( 694327323851750932),
INT64_C( 1),
UINT64_C( 1388654647703501864) },
{ UINT64_C(13382150181234950891),
INT64_C( 2),
UINT64_MAX },
{ UINT64_C( 2489320695987042398),
INT64_C( 3),
UINT64_MAX },
{ UINT64_C(11955283019838022992),
INT64_C( 4),
UINT64_MAX },
{ UINT64_C(11150912332519829680),
INT64_C( 5),
UINT64_MAX },
{ UINT64_C( 9199864624059854658),
INT64_C( 6),
UINT64_MAX },
{ UINT64_C( 2995724813079085428),
INT64_C( 7),
UINT64_MAX },
{ UINT64_C(12289660351422351192),
INT64_C( 8),
UINT64_MAX },
{ UINT64_C( 3233055574000135060),
INT64_C( 9),
UINT64_MAX },
{ UINT64_C(10732019772915950414),
INT64_C( 10),
UINT64_MAX },
{ UINT64_C(11659421728354096844),
INT64_C( 11),
UINT64_MAX },
{ UINT64_C(14015509005305809373),
INT64_C( 12),
UINT64_MAX },
{ UINT64_C( 5555723403182661634),
INT64_C( 13),
UINT64_MAX },
{ UINT64_C(15004774615702321287),
INT64_C( 14),
UINT64_MAX },
{ UINT64_C(12965093485642596098),
INT64_C( 15),
UINT64_MAX },
{ UINT64_C(10501562614814504908),
INT64_C( 16),
UINT64_MAX },
{ UINT64_C( 3330297196913279979),
INT64_C( 17),
UINT64_MAX },
{ UINT64_C(11647171339950093520),
INT64_C( 18),
UINT64_MAX },
{ UINT64_C( 2943342441499793487),
INT64_C( 19),
UINT64_MAX },
{ UINT64_C( 6372839135717253713),
INT64_C( 20),
UINT64_MAX },
{ UINT64_C( 6230864801640476322),
INT64_C( 21),
UINT64_MAX },
{ UINT64_C(12515447693334105454),
INT64_C( 22),
UINT64_MAX },
{ UINT64_C(14369203510989462757),
INT64_C( 23),
UINT64_MAX },
{ UINT64_C( 995884217972263692),
INT64_C( 24),
UINT64_MAX },
{ UINT64_C(18366470445812094214),
INT64_C( 25),
UINT64_MAX },
{ UINT64_C(13702408404709673756),
INT64_C( 26),
UINT64_MAX },
{ UINT64_C(12796530452571617880),
INT64_C( 27),
UINT64_MAX },
{ UINT64_C( 6515861299697237491),
INT64_C( 28),
UINT64_MAX },
{ UINT64_C(12582996416003490578),
INT64_C( 29),
UINT64_MAX },
{ UINT64_C(13792926314487458772),
INT64_C( 30),
UINT64_MAX },
{ UINT64_C(14240984356289866059),
INT64_C( 31),
UINT64_MAX },
{ UINT64_C(15857050913779993952),
INT64_C( 32),
UINT64_MAX },
{ UINT64_C(10561818256828397138),
INT64_C( 33),
UINT64_MAX },
{ UINT64_C( 6408245193887169736),
INT64_C( 34),
UINT64_MAX },
{ UINT64_C( 47828343026449427),
INT64_C( 35),
UINT64_MAX },
{ UINT64_C(12636753506057178552),
INT64_C( 36),
UINT64_MAX },
{ UINT64_C(13910254722697386938),
INT64_C( 37),
UINT64_MAX },
{ UINT64_C( 524915599679179490),
INT64_C( 38),
UINT64_MAX },
{ UINT64_C( 3817527998168142171),
INT64_C( 39),
UINT64_MAX },
{ UINT64_C( 3345352589854551906),
INT64_C( 40),
UINT64_MAX },
{ UINT64_C( 768342195431735791),
INT64_C( 41),
UINT64_MAX },
{ UINT64_C(15274030123938585085),
INT64_C( 42),
UINT64_MAX },
{ UINT64_C(15817425264617383122),
INT64_C( 43),
UINT64_MAX },
{ UINT64_C( 4330782018638526584),
INT64_C( 44),
UINT64_MAX },
{ UINT64_C( 8230835697182097928),
INT64_C( 45),
UINT64_MAX },
{ UINT64_C( 5166293379581227878),
INT64_C( 46),
UINT64_MAX },
{ UINT64_C(13948800650798530624),
INT64_C( 47),
UINT64_MAX },
{ UINT64_C( 4456812339352383056),
INT64_C( 48),
UINT64_MAX },
{ UINT64_C( 3490754576971005321),
INT64_C( 49),
UINT64_MAX },
{ UINT64_C( 8256437533879031257),
INT64_C( 50),
UINT64_MAX },
{ UINT64_C(10542012219802724930),
INT64_C( 51),
UINT64_MAX },
{ UINT64_C( 5359293182182947310),
INT64_C( 52),
UINT64_MAX },
{ UINT64_C( 5404524555111353349),
INT64_C( 53),
UINT64_MAX },
{ UINT64_C( 1455276008496762767),
INT64_C( 54),
UINT64_MAX },
{ UINT64_C( 877335643600936535),
INT64_C( 55),
UINT64_MAX },
{ UINT64_C( 7634040505817324517),
INT64_C( 56),
UINT64_MAX },
{ UINT64_C( 9446645416980986459),
INT64_C( 57),
UINT64_MAX },
{ UINT64_C( 3976246225900122696),
INT64_C( 58),
UINT64_MAX },
{ UINT64_C(11528931071199661524),
INT64_C( 59),
UINT64_MAX },
{ UINT64_C( 1668080896227749208),
INT64_C( 60),
UINT64_MAX },
{ UINT64_C(16206202814108884848),
INT64_C( 61),
UINT64_MAX },
{ UINT64_C( 8487359647160347569),
INT64_C( 62),
UINT64_MAX },
{ UINT64_C(17243831725405477622),
INT64_C( 63),
UINT64_MAX },
{ UINT64_C( 4280058787230684306),
INT64_C( 64),
UINT64_MAX },
{ UINT64_C(18134174129864002353),
INT64_C( 65),
UINT64_MAX },
{ UINT64_C(14035563674275259570),
INT64_C( 66),
UINT64_MAX },
{ UINT64_C( 2771614364853219312),
INT64_C( 67),
UINT64_MAX },
{ UINT64_C( 2691703369830244948),
INT64_C( 68),
UINT64_MAX },
{ UINT64_C( 3632883726812117284),
INT64_C( 69),
UINT64_MAX },
{ UINT64_C( 1),
-INT64_C( 70),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 69),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 68),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 67),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 66),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 65),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 64),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 63),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 62),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 61),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 60),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 59),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 58),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 57),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 56),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 55),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 54),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 53),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 52),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 51),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 50),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 49),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 48),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 47),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 46),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 45),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 44),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 43),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 42),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 41),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 40),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 39),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 38),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 37),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 36),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 35),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 34),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 33),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 32),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 31),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 30),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 29),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 28),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 27),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 26),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 25),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 24),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 23),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 22),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 21),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 20),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 19),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 18),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 17),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 16),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 15),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 14),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 13),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 12),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 11),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 10),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 9),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 8),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 7),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 6),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 5),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 4),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 3),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 2),
UINT64_C( 0) },
{ UINT64_C( 1),
-INT64_C( 1),
UINT64_C( 1) },
{ UINT64_C( 1),
INT64_C( 0),
UINT64_C( 1) },
{ UINT64_C( 1),
INT64_C( 1),
UINT64_C( 2) },
{ UINT64_C( 1),
INT64_C( 2),
UINT64_C( 4) },
{ UINT64_C( 1),
INT64_C( 3),
UINT64_C( 8) },
{ UINT64_C( 1),
INT64_C( 4),
UINT64_C( 16) },
{ UINT64_C( 1),
INT64_C( 5),
UINT64_C( 32) },
{ UINT64_C( 1),
INT64_C( 6),
UINT64_C( 64) },
{ UINT64_C( 1),
INT64_C( 7),
UINT64_C( 128) },
{ UINT64_C( 1),
INT64_C( 8),
UINT64_C( 256) },
{ UINT64_C( 1),
INT64_C( 9),
UINT64_C( 512) },
{ UINT64_C( 1),
INT64_C( 10),
UINT64_C( 1024) },
{ UINT64_C( 1),
INT64_C( 11),
UINT64_C( 2048) },
{ UINT64_C( 1),
INT64_C( 12),
UINT64_C( 4096) },
{ UINT64_C( 1),
INT64_C( 13),
UINT64_C( 8192) },
{ UINT64_C( 1),
INT64_C( 14),
UINT64_C( 16384) },
{ UINT64_C( 1),
INT64_C( 15),
UINT64_C( 32768) },
{ UINT64_C( 1),
INT64_C( 16),
UINT64_C( 65536) },
{ UINT64_C( 1),
INT64_C( 17),
UINT64_C( 131072) },
{ UINT64_C( 1),
INT64_C( 18),
UINT64_C( 262144) },
{ UINT64_C( 1),
INT64_C( 19),
UINT64_C( 524288) },
{ UINT64_C( 1),
INT64_C( 20),
UINT64_C( 1048576) },
{ UINT64_C( 1),
INT64_C( 21),
UINT64_C( 2097152) },
{ UINT64_C( 1),
INT64_C( 22),
UINT64_C( 4194304) },
{ UINT64_C( 1),
INT64_C( 23),
UINT64_C( 8388608) },
{ UINT64_C( 1),
INT64_C( 24),
UINT64_C( 16777216) },
{ UINT64_C( 1),
INT64_C( 25),
UINT64_C( 33554432) },
{ UINT64_C( 1),
INT64_C( 26),
UINT64_C( 67108864) },
{ UINT64_C( 1),
INT64_C( 27),
UINT64_C( 134217728) },
{ UINT64_C( 1),
INT64_C( 28),
UINT64_C( 268435456) },
{ UINT64_C( 1),
INT64_C( 29),
UINT64_C( 536870912) },
{ UINT64_C( 1),
INT64_C( 30),
UINT64_C( 1073741824) },
{ UINT64_C( 1),
INT64_C( 31),
UINT64_C( 2147483648) },
{ UINT64_C( 1),
INT64_C( 32),
UINT64_C( 4294967296) },
{ UINT64_C( 1),
INT64_C( 33),
UINT64_C( 8589934592) },
{ UINT64_C( 1),
INT64_C( 34),
UINT64_C( 17179869184) },
{ UINT64_C( 1),
INT64_C( 35),
UINT64_C( 34359738368) },
{ UINT64_C( 1),
INT64_C( 36),
UINT64_C( 68719476736) },
{ UINT64_C( 1),
INT64_C( 37),
UINT64_C( 137438953472) },
{ UINT64_C( 1),
INT64_C( 38),
UINT64_C( 274877906944) },
{ UINT64_C( 1),
INT64_C( 39),
UINT64_C( 549755813888) },
{ UINT64_C( 1),
INT64_C( 40),
UINT64_C( 1099511627776) },
{ UINT64_C( 1),
INT64_C( 41),
UINT64_C( 2199023255552) },
{ UINT64_C( 1),
INT64_C( 42),
UINT64_C( 4398046511104) },
{ UINT64_C( 1),
INT64_C( 43),
UINT64_C( 8796093022208) },
{ UINT64_C( 1),
INT64_C( 44),
UINT64_C( 17592186044416) },
{ UINT64_C( 1),
INT64_C( 45),
UINT64_C( 35184372088832) },
{ UINT64_C( 1),
INT64_C( 46),
UINT64_C( 70368744177664) },
{ UINT64_C( 1),
INT64_C( 47),
UINT64_C( 140737488355328) },
{ UINT64_C( 1),
INT64_C( 48),
UINT64_C( 281474976710656) },
{ UINT64_C( 1),
INT64_C( 49),
UINT64_C( 562949953421312) },
{ UINT64_C( 1),
INT64_C( 50),
UINT64_C( 1125899906842624) },
{ UINT64_C( 1),
INT64_C( 51),
UINT64_C( 2251799813685248) },
{ UINT64_C( 1),
INT64_C( 52),
UINT64_C( 4503599627370496) },
{ UINT64_C( 1),
INT64_C( 53),
UINT64_C( 9007199254740992) },
{ UINT64_C( 1),
INT64_C( 54),
UINT64_C( 18014398509481984) },
{ UINT64_C( 1),
INT64_C( 55),
UINT64_C( 36028797018963968) },
{ UINT64_C( 1),
INT64_C( 56),
UINT64_C( 72057594037927936) },
{ UINT64_C( 1),
INT64_C( 57),
UINT64_C( 144115188075855872) },
{ UINT64_C( 1),
INT64_C( 58),
UINT64_C( 288230376151711744) },
{ UINT64_C( 1),
INT64_C( 59),
UINT64_C( 576460752303423488) },
{ UINT64_C( 1),
INT64_C( 60),
UINT64_C( 1152921504606846976) },
{ UINT64_C( 1),
INT64_C( 61),
UINT64_C( 2305843009213693952) },
{ UINT64_C( 1),
INT64_C( 62),
UINT64_C( 4611686018427387904) },
{ UINT64_C( 1),
INT64_C( 63),
UINT64_C( 9223372036854775808) },
{ UINT64_C( 1),
INT64_C( 64),
UINT64_MAX },
{ UINT64_C( 1),
INT64_C( 65),
UINT64_MAX },
{ UINT64_C( 1),
INT64_C( 66),
UINT64_MAX },
{ UINT64_C( 1),
INT64_C( 67),
UINT64_MAX },
{ UINT64_C( 1),
INT64_C( 68),
UINT64_MAX },
{ UINT64_C( 1),
INT64_C( 69),
UINT64_MAX },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
uint64_t r = simde_vqrshld_u64(test_vec[i].a, test_vec[i].b);
simde_assert_equal_u64(r, test_vec[i].r);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
uint64_t a = simde_test_codegen_random_u64();
int64_t b = simde_test_codegen_random_i64();
uint64_t r = simde_vqrshld_u64(a, b);
simde_test_codegen_write_u64(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -70 ; i < 70 ; i++) {
uint64_t a = simde_test_codegen_random_u64();
int64_t b = i;
uint64_t r = simde_vqrshld_u64(a, b);
simde_test_codegen_write_u64(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
}
for (int i = -70 ; i < 70 ; i++) {
uint64_t a = 1;
int64_t b = i;
uint64_t r = simde_vqrshld_u64(a, b);
simde_test_codegen_write_u64(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_i64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[8];
int8_t b[8];
int8_t r[8];
} test_vec[] = {
{ { -INT8_C( 87), -INT8_C( 1), INT8_C( 80), INT8_C( 77),
INT8_C( 56), -INT8_C( 54), INT8_C( 102), INT8_C( 111) },
{ INT8_C( 8), INT8_C( 3), -INT8_C( 7), INT8_C( 2),
INT8_C( 1), INT8_C( 7), INT8_C( 4), -INT8_C( 7) },
{ INT8_MIN, -INT8_C( 8), INT8_C( 1), INT8_MAX,
INT8_C( 112), INT8_MIN, INT8_MAX, INT8_C( 1) } },
{ { INT8_C( 42), INT8_C( 74), -INT8_C( 106), -INT8_C( 29),
-INT8_C( 94), -INT8_C( 66), -INT8_C( 22), INT8_C( 88) },
{ INT8_C( 5), INT8_C( 4), -INT8_C( 5), INT8_C( 1),
-INT8_C( 7), -INT8_C( 6), -INT8_C( 4), INT8_C( 0) },
{ INT8_MAX, INT8_MAX, -INT8_C( 3), -INT8_C( 58),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 88) } },
{ { INT8_MIN, INT8_C( 100), INT8_C( 4), INT8_C( 14),
INT8_C( 92), INT8_C( 74), INT8_C( 59), -INT8_C( 98) },
{ -INT8_C( 3), INT8_C( 8), INT8_C( 8), INT8_C( 6),
INT8_C( 5), INT8_C( 5), INT8_C( 5), -INT8_C( 6) },
{ -INT8_C( 16), INT8_MAX, INT8_MAX, INT8_MAX,
INT8_MAX, INT8_MAX, INT8_MAX, -INT8_C( 2) } },
{ { INT8_C( 40), INT8_C( 61), INT8_C( 73), -INT8_C( 94),
INT8_C( 120), INT8_C( 65), INT8_C( 61), -INT8_C( 71) },
{ INT8_C( 7), INT8_C( 1), -INT8_C( 6), -INT8_C( 8),
INT8_C( 6), -INT8_C( 5), -INT8_C( 4), -INT8_C( 6) },
{ INT8_MAX, INT8_C( 122), INT8_C( 1), INT8_C( 0),
INT8_MAX, INT8_C( 2), INT8_C( 4), -INT8_C( 1) } },
{ { INT8_C( 32), -INT8_C( 33), -INT8_C( 42), -INT8_C( 124),
INT8_C( 13), -INT8_C( 93), INT8_C( 29), INT8_C( 93) },
{ -INT8_C( 8), -INT8_C( 1), INT8_C( 1), -INT8_C( 1),
INT8_C( 7), -INT8_C( 2), INT8_C( 0), INT8_C( 6) },
{ INT8_C( 0), -INT8_C( 16), -INT8_C( 84), -INT8_C( 62),
INT8_MAX, -INT8_C( 23), INT8_C( 29), INT8_MAX } },
{ { INT8_C( 109), -INT8_C( 121), -INT8_C( 67), -INT8_C( 26),
INT8_C( 116), -INT8_C( 14), -INT8_C( 107), INT8_C( 120) },
{ -INT8_C( 8), INT8_C( 1), -INT8_C( 7), INT8_C( 2),
INT8_C( 1), -INT8_C( 5), INT8_C( 2), INT8_C( 2) },
{ INT8_C( 0), INT8_MIN, -INT8_C( 1), -INT8_C( 104),
INT8_MAX, INT8_C( 0), INT8_MIN, INT8_MAX } },
{ { -INT8_C( 75), INT8_C( 9), INT8_C( 17), INT8_C( 9),
-INT8_C( 82), INT8_C( 82), -INT8_C( 91), -INT8_C( 24) },
{ INT8_C( 1), INT8_C( 7), INT8_C( 4), -INT8_C( 4),
INT8_C( 0), INT8_C( 6), -INT8_C( 8), -INT8_C( 7) },
{ INT8_MIN, INT8_MAX, INT8_MAX, INT8_C( 1),
-INT8_C( 82), INT8_MAX, INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 3), -INT8_C( 107), INT8_C( 50), -INT8_C( 31),
INT8_MIN, INT8_C( 61), INT8_C( 53), -INT8_C( 4) },
{ -INT8_C( 5), INT8_C( 5), INT8_C( 6), INT8_C( 2),
-INT8_C( 2), INT8_C( 5), -INT8_C( 6), -INT8_C( 5) },
{ INT8_C( 0), INT8_MIN, INT8_MAX, -INT8_C( 124),
-INT8_C( 32), INT8_MAX, INT8_C( 1), INT8_C( 0) } },
{ { INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX,
INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) },
{ INT8_C( 64), INT8_C( 64), INT8_C( 64), INT8_C( 64),
INT8_C( 64), INT8_C( 64), INT8_C( 64), INT8_C( 64) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
simde_int8x8_t r = simde_vqrshl_s8(a, b);
simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int8x8_t a = simde_test_arm_neon_random_i8x8();
simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
simde_int8x8_t r = simde_vqrshl_s8(a, b);
simde_test_arm_neon_write_i8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[4];
int16_t b[4];
int16_t r[4];
} test_vec[] = {
{ { INT16_C( 31263), INT16_C( 18737), INT16_C( 14706), -INT16_C( 22084) },
{ INT16_C( 0), -INT16_C( 6), INT16_C( 5), INT16_C( 11) },
{ INT16_C( 31263), INT16_C( 293), INT16_MAX, INT16_MIN } },
{ { -INT16_C( 27185), INT16_C( 1410), INT16_C( 26995), -INT16_C( 8974) },
{ -INT16_C( 15), INT16_C( 9), -INT16_C( 4), INT16_C( 4) },
{ -INT16_C( 1), INT16_MAX, INT16_C( 1687), INT16_MIN } },
{ { -INT16_C( 5300), INT16_C( 1064), -INT16_C( 4694), INT16_C( 25472) },
{ INT16_C( 3), INT16_C( 0), INT16_C( 5), INT16_C( 8) },
{ INT16_MIN, INT16_C( 1064), INT16_MIN, INT16_MAX } },
{ { -INT16_C( 9080), INT16_C( 16802), -INT16_C( 10592), -INT16_C( 30376) },
{ -INT16_C( 4), -INT16_C( 8), INT16_C( 0), INT16_C( 16) },
{ -INT16_C( 567), INT16_C( 66), -INT16_C( 10592), INT16_MIN } },
{ { -INT16_C( 10167), INT16_C( 25018), INT16_C( 28423), -INT16_C( 9608) },
{ -INT16_C( 2), -INT16_C( 4), -INT16_C( 6), -INT16_C( 8) },
{ -INT16_C( 2542), INT16_C( 1564), INT16_C( 444), -INT16_C( 38) } },
{ { INT16_C( 32142), -INT16_C( 28370), INT16_C( 24856), INT16_C( 26195) },
{ -INT16_C( 3), -INT16_C( 8), INT16_C( 15), INT16_C( 9) },
{ INT16_C( 4018), -INT16_C( 111), INT16_MAX, INT16_MAX } },
{ { -INT16_C( 23494), -INT16_C( 25691), -INT16_C( 8401), -INT16_C( 31132) },
{ INT16_C( 3), -INT16_C( 13), -INT16_C( 16), INT16_C( 14) },
{ INT16_MIN, -INT16_C( 3), INT16_C( 0), INT16_MIN } },
{ { INT16_C( 14453), -INT16_C( 12196), INT16_C( 27445), INT16_C( 31840) },
{ INT16_C( 14), INT16_C( 5), INT16_C( 13), -INT16_C( 9) },
{ INT16_MAX, INT16_MIN, INT16_MAX, INT16_C( 62) } },
{ { INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) },
{ INT16_C( 16384), INT16_C( 16384), INT16_C( 16384), INT16_C( 16384) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
simde_int16x4_t r = simde_vqrshl_s16(a, b);
simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x4_t a = simde_test_arm_neon_random_i16x4();
simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
simde_int16x4_t r = simde_vqrshl_s16(a, b);
simde_test_arm_neon_write_i16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[2];
int32_t b[2];
int32_t r[2];
} test_vec[] = {
{ { INT32_C( 37316345), INT32_C( 852588016) },
{ -INT32_C( 21), INT32_C( 22) },
{ INT32_C( 18), INT32_MAX } },
{ { INT32_C( 1713047364), -INT32_C( 718155773) },
{ -INT32_C( 2), INT32_C( 18) },
{ INT32_C( 428261841), INT32_MIN } },
{ { INT32_C( 2011282434), -INT32_C( 1644508231) },
{ INT32_C( 12), -INT32_C( 21) },
{ INT32_MAX, -INT32_C( 784) } },
{ { -INT32_C( 8819381), -INT32_C( 112184656) },
{ -INT32_C( 12), -INT32_C( 21) },
{ -INT32_C( 2153), -INT32_C( 53) } },
{ { INT32_C( 305438996), INT32_C( 1662430416) },
{ INT32_C( 29), -INT32_C( 19) },
{ INT32_MAX, INT32_C( 3171) } },
{ { INT32_C( 1246050521), -INT32_C( 703046011) },
{ INT32_C( 11), INT32_C( 11) },
{ INT32_MAX, INT32_MIN } },
{ { -INT32_C( 129492298), -INT32_C( 1643446120) },
{ INT32_C( 13), INT32_C( 25) },
{ INT32_MIN, INT32_MIN } },
{ { INT32_C( 58593943), -INT32_C( 594339506) },
{ -INT32_C( 21), -INT32_C( 9) },
{ INT32_C( 28), -INT32_C( 1160819) } },
{ { INT32_MAX, INT32_MAX },
{ -INT32_C( 1), -INT32_C( 1) },
{ INT32_C( 1073741824), INT32_C( 1073741824) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
simde_int32x2_t r = simde_vqrshl_s32(a, b);
simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x2_t a = simde_test_arm_neon_random_i32x2();
simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
simde_int32x2_t r = simde_vqrshl_s32(a, b);
simde_test_arm_neon_write_i32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int64_t a[1];
int64_t b[1];
int64_t r[1];
} test_vec[] = {
{ { INT64_C( 2379025802943267314) },
{ -INT64_C( 3) },
{ INT64_C( 297378225367908414) } },
{ { -INT64_C( 7880843795017100943) },
{ INT64_C( 13) },
{ INT64_MIN } },
{ { INT64_C( 5060086036473607234) },
{ -INT64_C( 12) },
{ INT64_C( 1235372567498439) } },
{ { -INT64_C( 1251288881944570923) },
{ INT64_C( 59) },
{ INT64_MIN } },
{ { -INT64_C( 818197169458855311) },
{ -INT64_C( 46) },
{ -INT64_C( 11627) } },
{ { -INT64_C( 3470264563169298453) },
{ -INT64_C( 56) },
{ -INT64_C( 48) } },
{ { -INT64_C( 6566310065777805324) },
{ -INT64_C( 54) },
{ -INT64_C( 365) } },
{ { INT64_C( 8846445702649439056) },
{ -INT64_C( 5) },
{ INT64_C( 276451428207794971) } },
{ { INT64_MAX },
{ -INT64_C( 1) },
{ INT64_C( 4611686018427387904) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int64x1_t a = simde_vld1_s64(test_vec[i].a);
simde_int64x1_t b = simde_vld1_s64(test_vec[i].b);
simde_int64x1_t r = simde_vqrshl_s64(a, b);
simde_test_arm_neon_assert_equal_i64x1(r, simde_vld1_s64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int64x1_t a = simde_test_arm_neon_random_i64x1();
simde_int64x1_t b = simde_test_arm_neon_random_i64x1();
simde_int64x1_t r = simde_vqrshl_s64(a, b);
simde_test_arm_neon_write_i64x1(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i64x1(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i64x1(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[8];
int8_t b[8];
uint8_t r[8];
} test_vec[] = {
{ { UINT8_C( 17), UINT8_C( 254), UINT8_C( 166), UINT8_C( 242),
UINT8_C( 224), UINT8_C( 96), UINT8_C( 134), UINT8_C( 31) },
{ -INT8_C( 2), INT8_C( 6), -INT8_C( 5), -INT8_C( 2),
-INT8_C( 1), INT8_C( 0), -INT8_C( 4), INT8_C( 4) },
{ UINT8_C( 4), UINT8_C( 255), UINT8_C( 5), UINT8_C( 61),
UINT8_C( 112), UINT8_C( 96), UINT8_C( 8), UINT8_C( 255) } },
{ { UINT8_C( 236), UINT8_C( 17), UINT8_C( 172), UINT8_C( 17),
UINT8_C( 72), UINT8_C( 97), UINT8_C( 108), UINT8_C( 128) },
{ INT8_C( 6), INT8_C( 0), INT8_C( 6), INT8_C( 7),
-INT8_C( 4), -INT8_C( 5), INT8_C( 1), -INT8_C( 7) },
{ UINT8_C( 255), UINT8_C( 17), UINT8_C( 255), UINT8_C( 255),
UINT8_C( 5), UINT8_C( 3), UINT8_C( 216), UINT8_C( 1) } },
{ { UINT8_C( 101), UINT8_C( 167), UINT8_C( 60), UINT8_C( 143),
UINT8_C( 234), UINT8_C( 177), UINT8_C( 216), UINT8_C( 221) },
{ -INT8_C( 3), -INT8_C( 8), INT8_C( 3), -INT8_C( 6),
INT8_C( 3), INT8_C( 5), -INT8_C( 8), INT8_C( 5) },
{ UINT8_C( 13), UINT8_C( 1), UINT8_C( 255), UINT8_C( 2),
UINT8_C( 255), UINT8_C( 255), UINT8_C( 1), UINT8_C( 255) } },
{ { UINT8_C( 9), UINT8_C( 223), UINT8_C( 27), UINT8_C( 204),
UINT8_C( 106), UINT8_C( 241), UINT8_C( 32), UINT8_C( 220) },
{ -INT8_C( 5), INT8_C( 8), INT8_C( 3), INT8_C( 4),
-INT8_C( 4), INT8_C( 6), INT8_C( 6), -INT8_C( 8) },
{ UINT8_C( 0), UINT8_C( 255), UINT8_C( 216), UINT8_C( 255),
UINT8_C( 7), UINT8_C( 255), UINT8_C( 255), UINT8_C( 1) } },
{ { UINT8_C( 175), UINT8_C( 114), UINT8_C( 53), UINT8_C( 46),
UINT8_C( 26), UINT8_C( 170), UINT8_C( 171), UINT8_C( 213) },
{ -INT8_C( 6), -INT8_C( 6), -INT8_C( 4), INT8_C( 3),
INT8_C( 1), -INT8_C( 2), -INT8_C( 3), -INT8_C( 8) },
{ UINT8_C( 3), UINT8_C( 2), UINT8_C( 3), UINT8_C( 255),
UINT8_C( 52), UINT8_C( 43), UINT8_C( 21), UINT8_C( 1) } },
{ { UINT8_C( 37), UINT8_C( 113), UINT8_C( 207), UINT8_C( 209),
UINT8_C( 209), UINT8_C( 8), UINT8_C( 239), UINT8_C( 42) },
{ -INT8_C( 8), -INT8_C( 6), -INT8_C( 7), -INT8_C( 5),
INT8_C( 2), INT8_C( 7), INT8_C( 1), -INT8_C( 5) },
{ UINT8_C( 0), UINT8_C( 2), UINT8_C( 2), UINT8_C( 7),
UINT8_C( 255), UINT8_C( 255), UINT8_C( 255), UINT8_C( 1) } },
{ { UINT8_C( 249), UINT8_C( 98), UINT8_C( 62), UINT8_C( 112),
UINT8_C( 21), UINT8_C( 89), UINT8_C( 159), UINT8_C( 208) },
{ INT8_C( 4), -INT8_C( 3), INT8_C( 8), INT8_C( 0),
-INT8_C( 4), -INT8_C( 6), -INT8_C( 3), INT8_C( 2) },
{ UINT8_C( 255), UINT8_C( 12), UINT8_C( 255), UINT8_C( 112),
UINT8_C( 1), UINT8_C( 1), UINT8_C( 20), UINT8_C( 255) } },
{ { UINT8_C( 38), UINT8_C( 128), UINT8_C( 239), UINT8_C( 139),
UINT8_C( 165), UINT8_C( 233), UINT8_C( 134), UINT8_C( 247) },
{ -INT8_C( 3), INT8_C( 5), INT8_C( 6), INT8_C( 3),
-INT8_C( 5), INT8_C( 4), INT8_C( 1), INT8_C( 7) },
{ UINT8_C( 5), UINT8_C( 255), UINT8_C( 255), UINT8_C( 255),
UINT8_C( 5), UINT8_C( 255), UINT8_C( 255), UINT8_C( 255) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
simde_uint8x8_t r = simde_vqrshl_u8(a, b);
simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint8x8_t a = simde_test_arm_neon_random_u8x8();
simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
simde_uint8x8_t r = simde_vqrshl_u8(a, b);
simde_test_arm_neon_write_u8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[4];
int16_t b[4];
uint16_t r[4];
} test_vec[] = {
{ { UINT16_C( 36529), UINT16_C( 29829), UINT16_C( 2096), UINT16_C( 2729) },
{ INT16_C( 0), INT16_C( 4), INT16_C( 9), -INT16_C( 4) },
{ UINT16_C( 36529), UINT16_C( 65535), UINT16_C( 65535), UINT16_C( 171) } },
{ { UINT16_C( 39946), UINT16_C( 27950), UINT16_C( 23605), UINT16_C( 4911) },
{ INT16_C( 11), -INT16_C( 14), -INT16_C( 7), INT16_C( 9) },
{ UINT16_C( 65535), UINT16_C( 2), UINT16_C( 184), UINT16_C( 65535) } },
{ { UINT16_C( 42859), UINT16_C( 2240), UINT16_C( 20043), UINT16_C( 10036) },
{ INT16_C( 8), INT16_C( 14), -INT16_C( 15), -INT16_C( 12) },
{ UINT16_C( 65535), UINT16_C( 65535), UINT16_C( 1), UINT16_C( 2) } },
{ { UINT16_C( 50980), UINT16_C( 165), UINT16_C( 10039), UINT16_C( 30538) },
{ INT16_C( 8), -INT16_C( 8), INT16_C( 11), -INT16_C( 9) },
{ UINT16_C( 65535), UINT16_C( 1), UINT16_C( 65535), UINT16_C( 60) } },
{ { UINT16_C( 61605), UINT16_C( 27801), UINT16_C( 14514), UINT16_C( 31459) },
{ -INT16_C( 2), INT16_C( 9), INT16_C( 7), INT16_C( 13) },
{ UINT16_C( 15401), UINT16_C( 65535), UINT16_C( 65535), UINT16_C( 65535) } },
{ { UINT16_C( 27895), UINT16_C( 11683), UINT16_C( 16781), UINT16_C( 38533) },
{ -INT16_C( 10), -INT16_C( 4), INT16_C( 16), -INT16_C( 10) },
{ UINT16_C( 27), UINT16_C( 730), UINT16_C( 65535), UINT16_C( 38) } },
{ { UINT16_C( 53996), UINT16_C( 31874), UINT16_C( 57883), UINT16_C( 4747) },
{ -INT16_C( 16), INT16_C( 8), -INT16_C( 9), INT16_C( 9) },
{ UINT16_C( 1), UINT16_C( 65535), UINT16_C( 113), UINT16_C( 65535) } },
{ { UINT16_C( 37059), UINT16_C( 57524), UINT16_C( 51263), UINT16_C( 61052) },
{ INT16_C( 6), -INT16_C( 11), -INT16_C( 1), -INT16_C( 6) },
{ UINT16_C( 65535), UINT16_C( 28), UINT16_C( 25632), UINT16_C( 954) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
simde_uint16x4_t r = simde_vqrshl_u16(a, b);
simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x4_t a = simde_test_arm_neon_random_u16x4();
simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
simde_uint16x4_t r = simde_vqrshl_u16(a, b);
simde_test_arm_neon_write_u16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[2];
int32_t b[2];
uint32_t r[2];
} test_vec[] = {
{ { UINT32_C( 4032142366), UINT32_C( 2503991721) },
{ INT32_C( 23), -INT32_C( 11) },
{ UINT32_C( 4294967295), UINT32_C( 1222652) } },
{ { UINT32_C( 1849889977), UINT32_C( 1539239213) },
{ INT32_C( 3), -INT32_C( 31) },
{ UINT32_C( 4294967295), UINT32_C( 1) } },
{ { UINT32_C( 3780982194), UINT32_C( 1551554012) },
{ INT32_C( 8), INT32_C( 30) },
{ UINT32_C( 4294967295), UINT32_C( 4294967295) } },
{ { UINT32_C( 457931350), UINT32_C( 2322708363) },
{ -INT32_C( 24), -INT32_C( 15) },
{ UINT32_C( 27), UINT32_C( 70883) } },
{ { UINT32_C( 1302772324), UINT32_C( 3149457440) },
{ -INT32_C( 8), INT32_C( 31) },
{ UINT32_C( 5088954), UINT32_C( 4294967295) } },
{ { UINT32_C( 2656566271), UINT32_C( 10727285) },
{ -INT32_C( 11), INT32_C( 23) },
{ UINT32_C( 1297151), UINT32_C( 4294967295) } },
{ { UINT32_C( 580186040), UINT32_C( 879645142) },
{ INT32_C( 26), INT32_C( 8) },
{ UINT32_C( 4294967295), UINT32_C( 4294967295) } },
{ { UINT32_C( 2842364758), UINT32_C( 627566619) },
{ -INT32_C( 19), -INT32_C( 17) },
{ UINT32_C( 5421), UINT32_C( 4788) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
simde_uint32x2_t r = simde_vqrshl_u32(a, b);
simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x2_t a = simde_test_arm_neon_random_u32x2();
simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
simde_uint32x2_t r = simde_vqrshl_u32(a, b);
simde_test_arm_neon_write_u32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshl_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint64_t a[1];
int64_t b[1];
uint64_t r[1];
} test_vec[] = {
{ { UINT64_C(10606652271688138073) },
{ -INT64_C( 24) },
{ UINT64_C( 632205740910) } },
{ { UINT64_C( 6951000685328207734) },
{ -INT64_C( 41) },
{ UINT64_C( 3160949) } },
{ { UINT64_C( 2652753700446653166) },
{ INT64_C( 16) },
{ UINT64_C(18446744073709551615) } },
{ { UINT64_C( 2887850072060195408) },
{ INT64_C( 8) },
{ UINT64_C(18446744073709551615) } },
{ { UINT64_C( 3003532981166020057) },
{ -INT64_C( 18) },
{ UINT64_C( 11457569050469) } },
{ { UINT64_C( 2467308484911859140) },
{ -INT64_C( 4) },
{ UINT64_C( 154206780306991196) } },
{ { UINT64_C(10329885492628171968) },
{ INT64_C( 8) },
{ UINT64_C(18446744073709551615) } },
{ { UINT64_C( 2016469675685954892) },
{ -INT64_C( 62) },
{ UINT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint64x1_t a = simde_vld1_u64(test_vec[i].a);
simde_int64x1_t b = simde_vld1_s64(test_vec[i].b);
simde_uint64x1_t r = simde_vqrshl_u64(a, b);
simde_test_arm_neon_assert_equal_u64x1(r, simde_vld1_u64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint64x1_t a = simde_test_arm_neon_random_u64x1();
simde_int64x1_t b = simde_test_arm_neon_random_i64x1();
simde_uint64x1_t r = simde_vqrshl_u64(a, b);
simde_test_arm_neon_write_u64x1(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i64x1(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u64x1(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[16];
int8_t b[16];
int8_t r[16];
} test_vec[] = {
{ { INT8_C( 40), -INT8_C( 12), -INT8_C( 107), INT8_C( 91),
INT8_C( 39), INT8_C( 70), -INT8_C( 66), -INT8_C( 32),
INT8_C( 44), INT8_C( 106), INT8_C( 13), -INT8_C( 17),
INT8_C( 42), -INT8_C( 33), INT8_C( 0), INT8_C( 99) },
{ -INT8_C( 1), INT8_C( 5), INT8_C( 7), -INT8_C( 6),
INT8_C( 5), INT8_C( 3), -INT8_C( 4), -INT8_C( 2),
INT8_C( 8), INT8_C( 7), -INT8_C( 8), -INT8_C( 8),
INT8_C( 8), INT8_C( 4), INT8_C( 4), -INT8_C( 7) },
{ INT8_C( 20), INT8_MIN, INT8_MIN, INT8_C( 1),
INT8_MAX, INT8_MAX, -INT8_C( 4), -INT8_C( 8),
INT8_MAX, INT8_MAX, INT8_C( 0), INT8_C( 0),
INT8_MAX, INT8_MIN, INT8_C( 0), INT8_C( 1) } },
{ { INT8_C( 13), -INT8_C( 18), -INT8_C( 109), INT8_C( 117),
-INT8_C( 115), INT8_C( 11), INT8_C( 28), INT8_C( 34),
INT8_C( 84), INT8_C( 24), -INT8_C( 56), INT8_C( 69),
INT8_C( 112), -INT8_C( 93), -INT8_C( 57), INT8_C( 46) },
{ INT8_C( 3), INT8_C( 1), -INT8_C( 6), INT8_C( 4),
-INT8_C( 7), INT8_C( 1), INT8_C( 3), -INT8_C( 4),
INT8_C( 6), INT8_C( 1), -INT8_C( 2), -INT8_C( 3),
INT8_C( 0), INT8_C( 6), INT8_C( 3), INT8_C( 8) },
{ INT8_C( 104), -INT8_C( 36), -INT8_C( 2), INT8_MAX,
-INT8_C( 1), INT8_C( 22), INT8_MAX, INT8_C( 2),
INT8_MAX, INT8_C( 48), -INT8_C( 14), INT8_C( 9),
INT8_C( 112), INT8_MIN, INT8_MIN, INT8_MAX } },
{ { -INT8_C( 20), INT8_C( 92), -INT8_C( 120), INT8_C( 62),
-INT8_C( 85), INT8_C( 61), -INT8_C( 9), -INT8_C( 121),
INT8_C( 18), -INT8_C( 16), -INT8_C( 124), -INT8_C( 109),
INT8_C( 101), INT8_C( 14), -INT8_C( 15), -INT8_C( 69) },
{ INT8_C( 2), -INT8_C( 3), INT8_C( 3), INT8_C( 2),
-INT8_C( 2), -INT8_C( 2), -INT8_C( 2), INT8_C( 6),
INT8_C( 0), INT8_C( 2), INT8_C( 4), INT8_C( 5),
-INT8_C( 8), -INT8_C( 3), -INT8_C( 1), INT8_C( 8) },
{ -INT8_C( 80), INT8_C( 12), INT8_MIN, INT8_MAX,
-INT8_C( 21), INT8_C( 15), -INT8_C( 2), INT8_MIN,
INT8_C( 18), -INT8_C( 64), INT8_MIN, INT8_MIN,
INT8_C( 0), INT8_C( 2), -INT8_C( 7), INT8_MIN } },
{ { INT8_C( 38), INT8_C( 60), -INT8_C( 70), INT8_C( 91),
INT8_C( 120), -INT8_C( 121), INT8_C( 71), -INT8_C( 22),
INT8_C( 92), INT8_C( 8), INT8_C( 124), -INT8_C( 117),
INT8_C( 115), INT8_C( 44), -INT8_C( 93), INT8_C( 66) },
{ INT8_C( 1), INT8_C( 5), INT8_C( 2), INT8_C( 8),
-INT8_C( 6), -INT8_C( 4), INT8_C( 8), -INT8_C( 2),
INT8_C( 5), INT8_C( 4), -INT8_C( 2), INT8_C( 2),
INT8_C( 8), INT8_C( 0), -INT8_C( 5), INT8_C( 0) },
{ INT8_C( 76), INT8_MAX, INT8_MIN, INT8_MAX,
INT8_C( 2), -INT8_C( 8), INT8_MAX, -INT8_C( 5),
INT8_MAX, INT8_MAX, INT8_C( 31), INT8_MIN,
INT8_MAX, INT8_C( 44), -INT8_C( 3), INT8_C( 66) } },
{ { INT8_C( 122), -INT8_C( 112), -INT8_C( 124), INT8_C( 42),
INT8_C( 87), -INT8_C( 117), INT8_C( 56), -INT8_C( 93),
INT8_C( 78), INT8_C( 31), -INT8_C( 3), -INT8_C( 50),
INT8_C( 116), INT8_C( 68), INT8_C( 64), INT8_C( 69) },
{ INT8_C( 2), INT8_C( 4), -INT8_C( 7), INT8_C( 4),
-INT8_C( 3), -INT8_C( 8), INT8_C( 8), INT8_C( 1),
-INT8_C( 5), -INT8_C( 1), INT8_C( 6), -INT8_C( 3),
-INT8_C( 3), INT8_C( 5), INT8_C( 2), INT8_C( 1) },
{ INT8_MAX, INT8_MIN, -INT8_C( 1), INT8_MAX,
INT8_C( 11), INT8_C( 0), INT8_MAX, INT8_MIN,
INT8_C( 2), INT8_C( 16), INT8_MIN, -INT8_C( 6),
INT8_C( 15), INT8_MAX, INT8_MAX, INT8_MAX } },
{ { -INT8_C( 34), -INT8_C( 5), -INT8_C( 85), -INT8_C( 77),
INT8_C( 98), INT8_C( 107), INT8_C( 84), -INT8_C( 115),
-INT8_C( 127), -INT8_C( 1), -INT8_C( 33), INT8_C( 111),
INT8_C( 33), INT8_C( 97), INT8_C( 46), INT8_C( 76) },
{ INT8_C( 8), INT8_C( 4), INT8_C( 0), -INT8_C( 7),
INT8_C( 2), -INT8_C( 6), INT8_C( 4), -INT8_C( 8),
INT8_C( 4), INT8_C( 6), INT8_C( 4), -INT8_C( 8),
INT8_C( 1), -INT8_C( 5), -INT8_C( 6), -INT8_C( 7) },
{ INT8_MIN, -INT8_C( 80), -INT8_C( 85), -INT8_C( 1),
INT8_MAX, INT8_C( 2), INT8_MAX, INT8_C( 0),
INT8_MIN, -INT8_C( 64), INT8_MIN, INT8_C( 0),
INT8_C( 66), INT8_C( 3), INT8_C( 1), INT8_C( 1) } },
{ { -INT8_C( 69), -INT8_C( 87), INT8_C( 96), INT8_C( 21),
INT8_C( 66), -INT8_C( 29), -INT8_C( 72), -INT8_C( 116),
-INT8_C( 125), INT8_C( 72), INT8_C( 98), INT8_C( 60),
INT8_C( 99), INT8_C( 102), -INT8_C( 72), -INT8_C( 39) },
{ INT8_C( 2), -INT8_C( 3), -INT8_C( 6), -INT8_C( 3),
-INT8_C( 3), INT8_C( 4), INT8_C( 4), -INT8_C( 2),
INT8_C( 0), -INT8_C( 5), INT8_C( 1), INT8_C( 5),
-INT8_C( 3), -INT8_C( 3), -INT8_C( 7), -INT8_C( 7) },
{ INT8_MIN, -INT8_C( 11), INT8_C( 2), INT8_C( 3),
INT8_C( 8), INT8_MIN, INT8_MIN, -INT8_C( 29),
-INT8_C( 125), INT8_C( 2), INT8_MAX, INT8_MAX,
INT8_C( 12), INT8_C( 13), -INT8_C( 1), INT8_C( 0) } },
{ { -INT8_C( 121), INT8_C( 38), INT8_C( 117), INT8_C( 37),
-INT8_C( 14), -INT8_C( 96), INT8_C( 74), INT8_C( 115),
-INT8_C( 24), INT8_C( 64), INT8_C( 105), -INT8_C( 122),
-INT8_C( 82), INT8_C( 2), INT8_C( 119), INT8_C( 84) },
{ INT8_C( 5), INT8_C( 1), INT8_C( 1), INT8_C( 3),
-INT8_C( 1), INT8_C( 3), INT8_C( 8), INT8_C( 2),
INT8_C( 0), -INT8_C( 4), INT8_C( 8), INT8_C( 3),
INT8_C( 0), INT8_C( 0), -INT8_C( 6), -INT8_C( 1) },
{ INT8_MIN, INT8_C( 76), INT8_MAX, INT8_MAX,
-INT8_C( 7), INT8_MIN, INT8_MAX, INT8_MAX,
-INT8_C( 24), INT8_C( 4), INT8_MAX, INT8_MIN,
-INT8_C( 82), INT8_C( 2), INT8_C( 2), INT8_C( 42) } },
{ { INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX,
INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX,
INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX,
INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) },
{ INT8_C( 64), INT8_C( 64), INT8_C( 64), INT8_C( 64),
INT8_C( 64), INT8_C( 64), INT8_C( 64), INT8_C( 64),
INT8_C( 64), INT8_C( 64), INT8_C( 64), INT8_C( 64),
INT8_C( 64), INT8_C( 64), INT8_C( 64), INT8_C( 64) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
simde_int8x16_t r = simde_vqrshlq_s8(a, b);
simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int8x16_t a = simde_test_arm_neon_random_i8x16();
simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
simde_int8x16_t r = simde_vqrshlq_s8(a, b);
simde_test_arm_neon_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[8];
int16_t b[8];
int16_t r[8];
} test_vec[] = {
{ { INT16_C( 17), -INT16_C( 18060), INT16_C( 2082), INT16_C( 3026),
-INT16_C( 23678), INT16_C( 13144), -INT16_C( 19898), INT16_C( 26465) },
{ -INT16_C( 9), INT16_C( 4), -INT16_C( 9), -INT16_C( 7),
INT16_C( 6), -INT16_C( 8), -INT16_C( 5), -INT16_C( 7) },
{ INT16_C( 0), INT16_MIN, INT16_C( 4), INT16_C( 24),
INT16_MIN, INT16_C( 51), -INT16_C( 622), INT16_C( 207) } },
{ { -INT16_C( 31358), INT16_C( 28497), -INT16_C( 24101), -INT16_C( 29556),
INT16_C( 23640), INT16_C( 26523), INT16_C( 30555), INT16_C( 32733) },
{ INT16_C( 8), INT16_C( 12), INT16_C( 11), -INT16_C( 9),
-INT16_C( 8), -INT16_C( 11), INT16_C( 4), -INT16_C( 3) },
{ INT16_MIN, INT16_MAX, INT16_MIN, -INT16_C( 58),
INT16_C( 92), INT16_C( 13), INT16_MAX, INT16_C( 4092) } },
{ { -INT16_C( 25371), -INT16_C( 28626), -INT16_C( 10661), -INT16_C( 29662),
INT16_C( 8039), INT16_C( 27599), INT16_C( 27158), INT16_C( 14531) },
{ INT16_C( 0), -INT16_C( 10), INT16_C( 2), INT16_C( 11),
-INT16_C( 2), -INT16_C( 9), INT16_C( 15), INT16_C( 6) },
{ -INT16_C( 25371), -INT16_C( 28), INT16_MIN, INT16_MIN,
INT16_C( 2010), INT16_C( 54), INT16_MAX, INT16_MAX } },
{ { INT16_C( 29383), INT16_C( 13775), INT16_C( 1669), INT16_C( 16370),
-INT16_C( 31950), -INT16_C( 10488), -INT16_C( 4281), -INT16_C( 15443) },
{ INT16_C( 6), -INT16_C( 14), INT16_C( 6), -INT16_C( 13),
-INT16_C( 7), INT16_C( 5), INT16_C( 12), -INT16_C( 2) },
{ INT16_MAX, INT16_C( 1), INT16_MAX, INT16_C( 2),
-INT16_C( 250), INT16_MIN, INT16_MIN, -INT16_C( 3861) } },
{ { -INT16_C( 16008), INT16_C( 6576), INT16_C( 25375), -INT16_C( 2472),
-INT16_C( 22062), -INT16_C( 1594), -INT16_C( 33), -INT16_C( 29140) },
{ -INT16_C( 10), -INT16_C( 16), -INT16_C( 14), INT16_C( 15),
-INT16_C( 11), -INT16_C( 13), INT16_C( 3), -INT16_C( 13) },
{ -INT16_C( 16), INT16_C( 0), INT16_C( 2), INT16_MIN,
-INT16_C( 11), INT16_C( 0), -INT16_C( 264), -INT16_C( 4) } },
{ { -INT16_C( 17438), INT16_C( 21035), -INT16_C( 4482), -INT16_C( 5337),
-INT16_C( 25235), -INT16_C( 6754), -INT16_C( 9668), -INT16_C( 27862) },
{ -INT16_C( 1), -INT16_C( 15), INT16_C( 5), -INT16_C( 4),
-INT16_C( 5), INT16_C( 14), -INT16_C( 8), -INT16_C( 9) },
{ -INT16_C( 8719), INT16_C( 1), INT16_MIN, -INT16_C( 334),
-INT16_C( 789), INT16_MIN, -INT16_C( 38), -INT16_C( 54) } },
{ { INT16_C( 10172), -INT16_C( 6237), -INT16_C( 25431), -INT16_C( 30731),
-INT16_C( 2806), -INT16_C( 24307), -INT16_C( 1303), -INT16_C( 17051) },
{ -INT16_C( 4), INT16_C( 13), -INT16_C( 11), -INT16_C( 1),
INT16_C( 10), INT16_C( 7), -INT16_C( 16), INT16_C( 1) },
{ INT16_C( 636), INT16_MIN, -INT16_C( 12), -INT16_C( 15365),
INT16_MIN, INT16_MIN, INT16_C( 0), INT16_MIN } },
{ { -INT16_C( 1297), INT16_C( 6102), INT16_C( 12306), INT16_C( 23191),
-INT16_C( 2630), -INT16_C( 28109), -INT16_C( 20844), INT16_C( 271) },
{ INT16_C( 3), INT16_C( 15), INT16_C( 8), INT16_C( 6),
INT16_C( 0), INT16_C( 15), -INT16_C( 5), -INT16_C( 13) },
{ -INT16_C( 10376), INT16_MAX, INT16_MAX, INT16_MAX,
-INT16_C( 2630), INT16_MIN, -INT16_C( 651), INT16_C( 0) } },
{ { INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX,
INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1),
-INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) },
{ INT16_C( 16384), INT16_C( 16384), INT16_C( 16384), INT16_C( 16384),
INT16_C( 16384), INT16_C( 16384), INT16_C( 16384), INT16_C( 16384) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
simde_int16x8_t r = simde_vqrshlq_s16(a, b);
simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
simde_int16x8_t r = simde_vqrshlq_s16(a, b);
simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[4];
int32_t b[4];
int32_t r[4];
} test_vec[] = {
{ { INT32_C( 1814886595), -INT32_C( 1646956830), INT32_C( 1237502269), INT32_C( 534733024) },
{ -INT32_C( 21), -INT32_C( 25), INT32_C( 31), -INT32_C( 11) },
{ INT32_C( 865), -INT32_C( 49), INT32_MAX, INT32_C( 261100) } },
{ { INT32_C( 1736113552), INT32_C( 1258318563), INT32_C( 1069774949), INT32_C( 755812542) },
{ -INT32_C( 32), INT32_C( 8), INT32_C( 32), INT32_C( 19) },
{ INT32_C( 0), INT32_MAX, INT32_MAX, INT32_MAX } },
{ { -INT32_C( 1923447339), -INT32_C( 1220148547), -INT32_C( 1485011002), -INT32_C( 1143271085) },
{ -INT32_C( 30), -INT32_C( 24), -INT32_C( 25), INT32_C( 30) },
{ -INT32_C( 2), -INT32_C( 73), -INT32_C( 44), INT32_MIN } },
{ { INT32_C( 1865665830), INT32_C( 2143927441), -INT32_C( 1135678127), INT32_C( 123259338) },
{ INT32_C( 20), -INT32_C( 9), -INT32_C( 31), -INT32_C( 14) },
{ INT32_MAX, INT32_C( 4187358), -INT32_C( 1), INT32_C( 7523) } },
{ { INT32_C( 3352422), -INT32_C( 698249524), INT32_C( 1806447909), INT32_C( 800823842) },
{ -INT32_C( 6), INT32_C( 4), -INT32_C( 6), INT32_C( 32) },
{ INT32_C( 52382), INT32_MIN, INT32_C( 28225749), INT32_MAX } },
{ { -INT32_C( 337342704), INT32_C( 1303521110), INT32_C( 425408117), INT32_C( 231996299) },
{ -INT32_C( 32), -INT32_C( 16), -INT32_C( 31), INT32_C( 2) },
{ INT32_C( 0), INT32_C( 19890), INT32_C( 0), INT32_C( 927985196) } },
{ { -INT32_C( 529877133), -INT32_C( 1960225014), -INT32_C( 1757285913), INT32_C( 1764816475) },
{ INT32_C( 20), -INT32_C( 6), INT32_C( 32), INT32_C( 24) },
{ INT32_MIN, -INT32_C( 30628516), INT32_MIN, INT32_MAX } },
{ { INT32_C( 219035158), INT32_C( 2118934887), INT32_C( 641686675), INT32_C( 264846024) },
{ INT32_C( 6), INT32_C( 28), -INT32_C( 1), INT32_C( 12) },
{ INT32_MAX, INT32_MAX, INT32_C( 320843338), INT32_MAX } },
{ { INT32_MAX, INT32_MAX, INT32_MAX, INT32_MAX },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) },
{ INT32_C( 1073741824), INT32_C( 1073741824), INT32_C( 1073741824), INT32_C( 1073741824) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
simde_int32x4_t r = simde_vqrshlq_s32(a, b);
simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
simde_int32x4_t r = simde_vqrshlq_s32(a, b);
simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int64_t a[2];
int64_t b[2];
int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 5414884328532004708), -INT64_C( 7732031084687741673) },
{ -INT64_C( 63), INT64_C( 61) },
{ -INT64_C( 1), INT64_MIN } },
{ { INT64_C( 3932969372243887233), -INT64_C( 7443478377457562434) },
{ -INT64_C( 45), -INT64_C( 1) },
{ INT64_C( 111782), -INT64_C( 3721739188728781217) } },
{ { -INT64_C( 4624332781887269652), INT64_C( 9194359439567769551) },
{ INT64_C( 18), INT64_C( 12) },
{ INT64_MIN, INT64_MAX } },
{ { INT64_C( 1303116637892605202), INT64_C( 2411425157371539502) },
{ -INT64_C( 35), -INT64_C( 12) },
{ INT64_C( 37925686), INT64_C( 588726845061411) } },
{ { -INT64_C( 5953546370211056151), INT64_C( 4807810721811645268) },
{ -INT64_C( 15), INT64_C( 44) },
{ -INT64_C( 181687816473726), INT64_MAX } },
{ { -INT64_C( 671209687377174666), -INT64_C( 2105758642682840471) },
{ INT64_C( 35), INT64_C( 6) },
{ INT64_MIN, INT64_MIN } },
{ { -INT64_C( 1318546396640194493), INT64_C( 4726180957159977633) },
{ INT64_C( 33), INT64_C( 3) },
{ INT64_MIN, INT64_MAX } },
{ { INT64_C( 570160631599597498), INT64_C( 7291438976119207855) },
{ -INT64_C( 54), INT64_C( 30) },
{ INT64_C( 32), INT64_MAX } },
{ { INT64_MAX, INT64_MAX },
{ -INT64_C( 1), -INT64_C( 1) },
{ INT64_C( 4611686018427387904), INT64_C( 4611686018427387904) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
simde_int64x2_t b = simde_vld1q_s64(test_vec[i].b);
simde_int64x2_t r = simde_vqrshlq_s64(a, b);
simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
simde_int64x2_t b = simde_test_arm_neon_random_i64x2();
simde_int64x2_t r = simde_vqrshlq_s64(a, b);
simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[16];
int8_t b[16];
uint8_t r[16];
} test_vec[] = {
{ { UINT8_C( 48), UINT8_C( 110), UINT8_C( 160), UINT8_C( 230),
UINT8_C( 244), UINT8_C( 14), UINT8_C( 38), UINT8_C( 180),
UINT8_C( 44), UINT8_C( 4), UINT8_C( 143), UINT8_C( 172),
UINT8_C( 51), UINT8_C( 77), UINT8_C( 188), UINT8_C( 81) },
{ INT8_C( 2), -INT8_C( 3), INT8_C( 1), INT8_C( 7),
INT8_C( 1), -INT8_C( 7), -INT8_C( 3), -INT8_C( 3),
-INT8_C( 6), -INT8_C( 6), INT8_C( 0), -INT8_C( 5),
-INT8_C( 7), INT8_C( 0), INT8_C( 1), -INT8_C( 7) },
{ UINT8_C( 192), UINT8_C( 14), UINT8_C( 255), UINT8_C( 255),
UINT8_C( 255), UINT8_C( 0), UINT8_C( 5), UINT8_C( 23),
UINT8_C( 1), UINT8_C( 0), UINT8_C( 143), UINT8_C( 5),
UINT8_C( 0), UINT8_C( 77), UINT8_C( 255), UINT8_C( 1) } },
{ { UINT8_C( 145), UINT8_C( 198), UINT8_C( 59), UINT8_C( 229),
UINT8_C( 193), UINT8_C( 40), UINT8_C( 202), UINT8_C( 18),
UINT8_C( 189), UINT8_C( 226), UINT8_C( 53), UINT8_C( 190),
UINT8_C( 171), UINT8_C( 119), UINT8_C( 184), UINT8_C( 228) },
{ -INT8_C( 5), INT8_C( 2), INT8_C( 3), -INT8_C( 1),
-INT8_C( 6), INT8_C( 6), INT8_C( 0), INT8_C( 5),
INT8_C( 5), INT8_C( 1), -INT8_C( 3), INT8_C( 1),
-INT8_C( 5), INT8_C( 7), -INT8_C( 4), INT8_C( 4) },
{ UINT8_C( 5), UINT8_C( 255), UINT8_C( 255), UINT8_C( 115),
UINT8_C( 3), UINT8_C( 255), UINT8_C( 202), UINT8_C( 255),
UINT8_C( 255), UINT8_C( 255), UINT8_C( 7), UINT8_C( 255),
UINT8_C( 5), UINT8_C( 255), UINT8_C( 12), UINT8_C( 255) } },
{ { UINT8_C( 144), UINT8_C( 70), UINT8_C( 74), UINT8_C( 4),
UINT8_C( 109), UINT8_C( 142), UINT8_C( 116), UINT8_C( 159),
UINT8_C( 142), UINT8_C( 25), UINT8_C( 177), UINT8_C( 177),
UINT8_C( 76), UINT8_C( 150), UINT8_C( 86), UINT8_C( 238) },
{ INT8_C( 0), -INT8_C( 3), INT8_C( 3), -INT8_C( 3),
INT8_C( 5), -INT8_C( 4), -INT8_C( 3), -INT8_C( 2),
INT8_C( 3), -INT8_C( 4), -INT8_C( 3), INT8_C( 3),
INT8_C( 1), INT8_C( 5), INT8_C( 7), INT8_C( 5) },
{ UINT8_C( 144), UINT8_C( 9), UINT8_C( 255), UINT8_C( 1),
UINT8_C( 255), UINT8_C( 9), UINT8_C( 15), UINT8_C( 40),
UINT8_C( 255), UINT8_C( 2), UINT8_C( 22), UINT8_C( 255),
UINT8_C( 152), UINT8_C( 255), UINT8_C( 255), UINT8_C( 255) } },
{ { UINT8_C( 199), UINT8_C( 104), UINT8_C( 74), UINT8_C( 67),
UINT8_C( 128), UINT8_C( 140), UINT8_C( 56), UINT8_C( 104),
UINT8_C( 88), UINT8_C( 100), UINT8_C( 110), UINT8_C( 42),
UINT8_C( 123), UINT8_C( 111), UINT8_C( 252), UINT8_C( 156) },
{ -INT8_C( 8), INT8_C( 0), -INT8_C( 7), -INT8_C( 1),
-INT8_C( 8), INT8_C( 4), -INT8_C( 5), INT8_C( 4),
-INT8_C( 2), INT8_C( 5), INT8_C( 0), -INT8_C( 6),
INT8_C( 5), -INT8_C( 8), INT8_C( 8), INT8_C( 5) },
{ UINT8_C( 1), UINT8_C( 104), UINT8_C( 1), UINT8_C( 34),
UINT8_C( 1), UINT8_C( 255), UINT8_C( 2), UINT8_C( 255),
UINT8_C( 22), UINT8_C( 255), UINT8_C( 110), UINT8_C( 1),
UINT8_C( 255), UINT8_C( 0), UINT8_C( 255), UINT8_C( 255) } },
{ { UINT8_C( 140), UINT8_C( 24), UINT8_C( 20), UINT8_C( 116),
UINT8_C( 5), UINT8_C( 138), UINT8_C( 42), UINT8_C( 115),
UINT8_C( 111), UINT8_C( 129), UINT8_C( 142), UINT8_C( 213),
UINT8_C( 155), UINT8_C( 130), UINT8_C( 150), UINT8_C( 231) },
{ INT8_C( 2), -INT8_C( 8), -INT8_C( 8), -INT8_C( 6),
INT8_C( 1), -INT8_C( 5), INT8_C( 1), INT8_C( 2),
-INT8_C( 1), -INT8_C( 2), INT8_C( 5), INT8_C( 5),
-INT8_C( 3), INT8_C( 6), -INT8_C( 1), -INT8_C( 6) },
{ UINT8_C( 255), UINT8_C( 0), UINT8_C( 0), UINT8_C( 2),
UINT8_C( 10), UINT8_C( 4), UINT8_C( 84), UINT8_C( 255),
UINT8_C( 56), UINT8_C( 32), UINT8_C( 255), UINT8_C( 255),
UINT8_C( 19), UINT8_C( 255), UINT8_C( 75), UINT8_C( 4) } },
{ { UINT8_C( 123), UINT8_C( 36), UINT8_C( 41), UINT8_C( 105),
UINT8_C( 46), UINT8_C( 64), UINT8_C( 195), UINT8_C( 242),
UINT8_C( 155), UINT8_C( 176), UINT8_C( 255), UINT8_C( 148),
UINT8_C( 51), UINT8_C( 35), UINT8_C( 168), UINT8_C( 226) },
{ INT8_C( 0), INT8_C( 6), INT8_C( 5), -INT8_C( 6),
INT8_C( 1), -INT8_C( 5), -INT8_C( 4), INT8_C( 2),
INT8_C( 6), INT8_C( 3), -INT8_C( 1), INT8_C( 7),
-INT8_C( 2), -INT8_C( 2), -INT8_C( 1), INT8_C( 4) },
{ UINT8_C( 123), UINT8_C( 255), UINT8_C( 255), UINT8_C( 2),
UINT8_C( 92), UINT8_C( 2), UINT8_C( 12), UINT8_C( 255),
UINT8_C( 255), UINT8_C( 255), UINT8_C( 128), UINT8_C( 255),
UINT8_C( 13), UINT8_C( 9), UINT8_C( 84), UINT8_C( 255) } },
{ { UINT8_C( 209), UINT8_C( 246), UINT8_C( 234), UINT8_C( 223),
UINT8_C( 203), UINT8_C( 186), UINT8_C( 139), UINT8_C( 148),
UINT8_C( 180), UINT8_C( 18), UINT8_C( 7), UINT8_C( 172),
UINT8_C( 225), UINT8_C( 26), UINT8_C( 149), UINT8_C( 28) },
{ INT8_C( 5), -INT8_C( 1), INT8_C( 4), INT8_C( 1),
INT8_C( 1), INT8_C( 1), INT8_C( 7), -INT8_C( 5),
-INT8_C( 2), INT8_C( 4), -INT8_C( 7), INT8_C( 1),
-INT8_C( 3), -INT8_C( 2), INT8_C( 7), INT8_C( 0) },
{ UINT8_C( 255), UINT8_C( 123), UINT8_C( 255), UINT8_C( 255),
UINT8_C( 255), UINT8_C( 255), UINT8_C( 255), UINT8_C( 5),
UINT8_C( 45), UINT8_C( 255), UINT8_C( 0), UINT8_C( 255),
UINT8_C( 28), UINT8_C( 7), UINT8_C( 255), UINT8_C( 28) } },
{ { UINT8_C( 186), UINT8_C( 147), UINT8_C( 83), UINT8_C( 114),
UINT8_C( 130), UINT8_C( 80), UINT8_C( 252), UINT8_C( 63),
UINT8_C( 137), UINT8_C( 214), UINT8_C( 119), UINT8_C( 227),
UINT8_C( 29), UINT8_C( 181), UINT8_C( 148), UINT8_C( 21) },
{ INT8_C( 2), INT8_C( 0), INT8_C( 4), INT8_C( 1),
INT8_C( 8), -INT8_C( 6), INT8_C( 3), INT8_C( 6),
INT8_C( 5), -INT8_C( 2), -INT8_C( 6), INT8_C( 0),
INT8_C( 6), INT8_C( 5), INT8_C( 0), INT8_C( 7) },
{ UINT8_C( 255), UINT8_C( 147), UINT8_C( 255), UINT8_C( 228),
UINT8_C( 255), UINT8_C( 1), UINT8_C( 255), UINT8_C( 255),
UINT8_C( 255), UINT8_C( 54), UINT8_C( 2), UINT8_C( 227),
UINT8_C( 255), UINT8_C( 255), UINT8_C( 148), UINT8_C( 255) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
simde_uint8x16_t r = simde_vqrshlq_u8(a, b);
simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
simde_uint8x16_t r = simde_vqrshlq_u8(a, b);
simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[8];
int16_t b[8];
uint16_t r[8];
} test_vec[] = {
{ { UINT16_C( 61506), UINT16_C( 19083), UINT16_C( 60908), UINT16_C( 40546),
UINT16_C( 29927), UINT16_C( 62112), UINT16_C( 60795), UINT16_C( 39381) },
{ INT16_C( 5), -INT16_C( 9), -INT16_C( 2), -INT16_C( 8),
-INT16_C( 7), -INT16_C( 4), INT16_C( 4), -INT16_C( 9) },
{ UINT16_C( 65535), UINT16_C( 37), UINT16_C( 15227), UINT16_C( 158),
UINT16_C( 234), UINT16_C( 3882), UINT16_C( 65535), UINT16_C( 77) } },
{ { UINT16_C( 52703), UINT16_C( 30753), UINT16_C( 21922), UINT16_C( 13244),
UINT16_C( 23660), UINT16_C( 33835), UINT16_C( 6910), UINT16_C( 21793) },
{ -INT16_C( 11), -INT16_C( 12), INT16_C( 15), INT16_C( 11),
INT16_C( 6), -INT16_C( 1), -INT16_C( 16), -INT16_C( 1) },
{ UINT16_C( 26), UINT16_C( 8), UINT16_C( 65535), UINT16_C( 65535),
UINT16_C( 65535), UINT16_C( 16918), UINT16_C( 0), UINT16_C( 10897) } },
{ { UINT16_C( 49424), UINT16_C( 1272), UINT16_C( 11256), UINT16_C( 15451),
UINT16_C( 38439), UINT16_C( 22519), UINT16_C( 53624), UINT16_C( 56406) },
{ -INT16_C( 11), -INT16_C( 3), INT16_C( 10), -INT16_C( 10),
INT16_C( 12), INT16_C( 3), INT16_C( 9), INT16_C( 6) },
{ UINT16_C( 24), UINT16_C( 159), UINT16_C( 65535), UINT16_C( 15),
UINT16_C( 65535), UINT16_C( 65535), UINT16_C( 65535), UINT16_C( 65535) } },
{ { UINT16_C( 34648), UINT16_C( 38658), UINT16_C( 18124), UINT16_C( 29610),
UINT16_C( 34257), UINT16_C( 23288), UINT16_C( 2479), UINT16_C( 51223) },
{ -INT16_C( 11), -INT16_C( 3), INT16_C( 4), -INT16_C( 10),
INT16_C( 7), -INT16_C( 7), INT16_C( 10), INT16_C( 5) },
{ UINT16_C( 17), UINT16_C( 4832), UINT16_C( 65535), UINT16_C( 29),
UINT16_C( 65535), UINT16_C( 182), UINT16_C( 65535), UINT16_C( 65535) } },
{ { UINT16_C( 34910), UINT16_C( 29561), UINT16_C( 57208), UINT16_C( 321),
UINT16_C( 59682), UINT16_C( 10906), UINT16_C( 56329), UINT16_C( 122) },
{ -INT16_C( 9), INT16_C( 4), -INT16_C( 16), -INT16_C( 1),
INT16_C( 10), -INT16_C( 7), -INT16_C( 1), -INT16_C( 1) },
{ UINT16_C( 68), UINT16_C( 65535), UINT16_C( 1), UINT16_C( 161),
UINT16_C( 65535), UINT16_C( 85), UINT16_C( 28165), UINT16_C( 61) } },
{ { UINT16_C( 17592), UINT16_C( 628), UINT16_C( 30585), UINT16_C( 18746),
UINT16_C( 2909), UINT16_C( 4209), UINT16_C( 6780), UINT16_C( 29795) },
{ -INT16_C( 12), INT16_C( 9), -INT16_C( 11), -INT16_C( 9),
INT16_C( 8), INT16_C( 0), INT16_C( 1), INT16_C( 7) },
{ UINT16_C( 4), UINT16_C( 65535), UINT16_C( 15), UINT16_C( 37),
UINT16_C( 65535), UINT16_C( 4209), UINT16_C( 13560), UINT16_C( 65535) } },
{ { UINT16_C( 27761), UINT16_C( 46906), UINT16_C( 25315), UINT16_C( 54517),
UINT16_C( 3930), UINT16_C( 38934), UINT16_C( 33158), UINT16_C( 15978) },
{ -INT16_C( 5), INT16_C( 3), -INT16_C( 14), -INT16_C( 8),
-INT16_C( 13), INT16_C( 16), -INT16_C( 1), -INT16_C( 15) },
{ UINT16_C( 868), UINT16_C( 65535), UINT16_C( 2), UINT16_C( 213),
UINT16_C( 0), UINT16_C( 65535), UINT16_C( 16579), UINT16_C( 0) } },
{ { UINT16_C( 52730), UINT16_C( 21619), UINT16_C( 31344), UINT16_C( 36500),
UINT16_C( 25393), UINT16_C( 44945), UINT16_C( 18048), UINT16_C( 31672) },
{ -INT16_C( 6), -INT16_C( 9), -INT16_C( 7), INT16_C( 1),
INT16_C( 8), -INT16_C( 5), INT16_C( 0), INT16_C( 7) },
{ UINT16_C( 824), UINT16_C( 42), UINT16_C( 245), UINT16_C( 65535),
UINT16_C( 65535), UINT16_C( 1405), UINT16_C( 18048), UINT16_C( 65535) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
simde_uint16x8_t r = simde_vqrshlq_u16(a, b);
simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
simde_uint16x8_t r = simde_vqrshlq_u16(a, b);
simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[4];
int32_t b[4];
uint32_t r[4];
} test_vec[] = {
{ { UINT32_C( 1500975547), UINT32_C( 2108068888), UINT32_C( 2683398431), UINT32_C( 367549241) },
{ INT32_C( 32), INT32_C( 4), INT32_C( 12), INT32_C( 7) },
{ UINT32_C( 4294967295), UINT32_C( 4294967295), UINT32_C( 4294967295), UINT32_C( 4294967295) } },
{ { UINT32_C( 3541445283), UINT32_C( 2942869736), UINT32_C( 2791986498), UINT32_C( 3847214939) },
{ -INT32_C( 15), -INT32_C( 2), INT32_C( 3), -INT32_C( 5) },
{ UINT32_C( 108076), UINT32_C( 735717434), UINT32_C( 4294967295), UINT32_C( 120225467) } },
{ { UINT32_C( 2758985098), UINT32_C( 1301200120), UINT32_C( 2500937308), UINT32_C( 1482943544) },
{ -INT32_C( 15), INT32_C( 26), INT32_C( 4), -INT32_C( 31) },
{ UINT32_C( 84198), UINT32_C( 4294967295), UINT32_C( 4294967295), UINT32_C( 1) } },
{ { UINT32_C( 1695104610), UINT32_C( 2154042730), UINT32_C( 1247813531), UINT32_C( 539880566) },
{ -INT32_C( 5), -INT32_C( 21), INT32_C( 12), INT32_C( 6) },
{ UINT32_C( 52972019), UINT32_C( 1027), UINT32_C( 4294967295), UINT32_C( 4294967295) } },
{ { UINT32_C( 4087492662), UINT32_C( 442729018), UINT32_C( 640768667), UINT32_C( 1635123388) },
{ INT32_C( 7), -INT32_C( 3), INT32_C( 7), INT32_C( 31) },
{ UINT32_C( 4294967295), UINT32_C( 55341127), UINT32_C( 4294967295), UINT32_C( 4294967295) } },
{ { UINT32_C( 4260977946), UINT32_C( 2996827211), UINT32_C( 864415427), UINT32_C( 4108108071) },
{ -INT32_C( 16), INT32_C( 7), INT32_C( 10), -INT32_C( 27) },
{ UINT32_C( 65017), UINT32_C( 4294967295), UINT32_C( 4294967295), UINT32_C( 31) } },
{ { UINT32_C( 4249729102), UINT32_C( 3434311192), UINT32_C( 2916969933), UINT32_C( 1847713867) },
{ -INT32_C( 31), -INT32_C( 15), -INT32_C( 21), -INT32_C( 21) },
{ UINT32_C( 2), UINT32_C( 104807), UINT32_C( 1391), UINT32_C( 881) } },
{ { UINT32_C( 2544619547), UINT32_C( 3247194592), UINT32_C( 2391939879), UINT32_C( 2988854179) },
{ INT32_C( 5), INT32_C( 5), INT32_C( 30), -INT32_C( 29) },
{ UINT32_C( 4294967295), UINT32_C( 4294967295), UINT32_C( 4294967295), UINT32_C( 6) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
simde_uint32x4_t r = simde_vqrshlq_u32(a, b);
simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
simde_uint32x4_t r = simde_vqrshlq_u32(a, b);
simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqrshlq_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint64_t a[2];
int64_t b[2];
uint64_t r[2];
} test_vec[] = {
{ { UINT64_C(12257908650438209556), UINT64_C( 734662789645664798) },
{ -INT64_C( 53), -INT64_C( 24) },
{ UINT64_C( 1361), UINT64_C( 43789314607) } },
{ { UINT64_C(15401328157929644581), UINT64_C(11927978306316211307) },
{ INT64_C( 54), -INT64_C( 26) },
{ UINT64_C(18446744073709551615), UINT64_C( 177740727459) } },
{ { UINT64_C( 9806006901024356755), UINT64_C( 2220988353704575177) },
{ INT64_C( 18), INT64_C( 48) },
{ UINT64_C(18446744073709551615), UINT64_C(18446744073709551615) } },
{ { UINT64_C(17911317278255258189), UINT64_C(16943905161406011814) },
{ INT64_C( 60), INT64_C( 1) },
{ UINT64_C(18446744073709551615), UINT64_C(18446744073709551615) } },
{ { UINT64_C( 2887718461795313073), UINT64_C(17639433086009224754) },
{ INT64_C( 32), INT64_C( 23) },
{ UINT64_C(18446744073709551615), UINT64_C(18446744073709551615) } },
{ { UINT64_C( 5907043747386205374), UINT64_C(11542381187061170644) },
{ INT64_C( 57), -INT64_C( 15) },
{ UINT64_C(18446744073709551615), UINT64_C( 352245519624670) } },
{ { UINT64_C(15325393461537196969), UINT64_C(16407202451519969415) },
{ -INT64_C( 15), -INT64_C( 50) },
{ UINT64_C( 467693892258826), UINT64_C( 14573) } },
{ { UINT64_C(17890801295880430688), UINT64_C(12355916188791687384) },
{ -INT64_C( 38), -INT64_C( 25) },
{ UINT64_C( 65086356), UINT64_C( 368234997654) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
simde_int64x2_t b = simde_vld1q_s64(test_vec[i].b);
simde_uint64x2_t r = simde_vqrshlq_u64(a, b);
simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
simde_int64x2_t b = simde_test_arm_neon_random_i64x2();
simde_uint64x2_t r = simde_vqrshlq_u64(a, b);
simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlb_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlh_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshls_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshld_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlb_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlh_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshls_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshld_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshl_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqrshlq_u64)
SIMDE_TEST_FUNC_LIST_END
#include "test-neon-footer.h"