1909 lines
126 KiB
C
1909 lines
126 KiB
C
|
|
#define SIMDE_TEST_ARM_NEON_INSN ld4_lane
|
||
|
|
|
||
|
|
#include "test-neon.h"
|
||
|
|
#include "../../../simde/arm/neon/ld4_lane.h"
|
||
|
|
#include "../../../simde/arm/neon/ld1.h"
|
||
|
|
|
||
|
|
#if !defined(SIMDE_BUG_INTEL_857088)
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_s8 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int8_t src[4][8];
|
||
|
|
int8_t buf[4];
|
||
|
|
int8_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { INT8_C( 6), -INT8_C( 79), INT8_C( 63), INT8_C( 82), -INT8_C( 98), -INT8_C( 121), -INT8_C( 69), -INT8_C( 122) },
|
||
|
|
{ -INT8_C( 38), -INT8_C( 97), INT8_C( 91), INT8_C( 123), -INT8_C( 112), INT8_C( 117), INT8_C( 78), INT8_C( 80) },
|
||
|
|
{ -INT8_C( 106), -INT8_C( 55), -INT8_C( 36), -INT8_C( 71), INT8_C( 6), INT8_C( 116), -INT8_C( 45), -INT8_C( 83) },
|
||
|
|
{ -INT8_C( 43), INT8_C( 17), -INT8_C( 42), -INT8_C( 12), INT8_C( 7), -INT8_C( 50), INT8_C( 6), INT8_C( 13) } },
|
||
|
|
{ INT8_MAX, INT8_C( 69), INT8_C( 95), INT8_C( 29) },
|
||
|
|
{ { INT8_MAX, -INT8_C( 79), INT8_C( 63), INT8_C( 82), -INT8_C( 98), -INT8_C( 121), -INT8_C( 69), -INT8_C( 122) },
|
||
|
|
{ INT8_C( 69), -INT8_C( 97), INT8_C( 91), INT8_C( 123), -INT8_C( 112), INT8_C( 117), INT8_C( 78), INT8_C( 80) },
|
||
|
|
{ INT8_C( 95), -INT8_C( 55), -INT8_C( 36), -INT8_C( 71), INT8_C( 6), INT8_C( 116), -INT8_C( 45), -INT8_C( 83) },
|
||
|
|
{ INT8_C( 29), INT8_C( 17), -INT8_C( 42), -INT8_C( 12), INT8_C( 7), -INT8_C( 50), INT8_C( 6), INT8_C( 13) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT8_C( 51), INT8_C( 26), -INT8_C( 93), -INT8_C( 89), -INT8_C( 70), -INT8_C( 2), INT8_C( 34), INT8_C( 74) },
|
||
|
|
{ INT8_C( 116), INT8_C( 112), -INT8_C( 102), INT8_C( 10), INT8_C( 57), INT8_C( 118), -INT8_C( 61), INT8_C( 63) },
|
||
|
|
{ -INT8_C( 22), -INT8_C( 106), -INT8_C( 20), -INT8_C( 64), -INT8_C( 88), -INT8_C( 62), -INT8_C( 76), -INT8_C( 81) },
|
||
|
|
{ -INT8_C( 112), -INT8_C( 70), -INT8_C( 68), INT8_C( 16), INT8_C( 0), INT8_C( 27), INT8_C( 45), -INT8_C( 51) } },
|
||
|
|
{ INT8_C( 53), -INT8_C( 47), INT8_C( 116), -INT8_C( 17) },
|
||
|
|
{ { -INT8_C( 51), INT8_C( 53), -INT8_C( 93), -INT8_C( 89), -INT8_C( 70), -INT8_C( 2), INT8_C( 34), INT8_C( 74) },
|
||
|
|
{ INT8_C( 116), -INT8_C( 47), -INT8_C( 102), INT8_C( 10), INT8_C( 57), INT8_C( 118), -INT8_C( 61), INT8_C( 63) },
|
||
|
|
{ -INT8_C( 22), INT8_C( 116), -INT8_C( 20), -INT8_C( 64), -INT8_C( 88), -INT8_C( 62), -INT8_C( 76), -INT8_C( 81) },
|
||
|
|
{ -INT8_C( 112), -INT8_C( 17), -INT8_C( 68), INT8_C( 16), INT8_C( 0), INT8_C( 27), INT8_C( 45), -INT8_C( 51) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT8_C( 49), -INT8_C( 105), INT8_C( 57), INT8_C( 67), INT8_C( 7), -INT8_C( 45), INT8_C( 77), INT8_C( 65) },
|
||
|
|
{ INT8_C( 74), INT8_C( 17), INT8_MIN, INT8_C( 52), -INT8_C( 89), INT8_C( 109), -INT8_C( 12), INT8_C( 79) },
|
||
|
|
{ INT8_C( 47), -INT8_C( 87), -INT8_C( 2), -INT8_C( 64), INT8_C( 99), -INT8_C( 70), -INT8_C( 48), INT8_C( 99) },
|
||
|
|
{ -INT8_C( 43), -INT8_C( 3), INT8_C( 48), INT8_C( 11), -INT8_C( 50), -INT8_C( 91), -INT8_C( 6), -INT8_C( 98) } },
|
||
|
|
{ INT8_C( 60), INT8_C( 52), -INT8_C( 31), INT8_C( 67) },
|
||
|
|
{ { -INT8_C( 49), -INT8_C( 105), INT8_C( 60), INT8_C( 67), INT8_C( 7), -INT8_C( 45), INT8_C( 77), INT8_C( 65) },
|
||
|
|
{ INT8_C( 74), INT8_C( 17), INT8_C( 52), INT8_C( 52), -INT8_C( 89), INT8_C( 109), -INT8_C( 12), INT8_C( 79) },
|
||
|
|
{ INT8_C( 47), -INT8_C( 87), -INT8_C( 31), -INT8_C( 64), INT8_C( 99), -INT8_C( 70), -INT8_C( 48), INT8_C( 99) },
|
||
|
|
{ -INT8_C( 43), -INT8_C( 3), INT8_C( 67), INT8_C( 11), -INT8_C( 50), -INT8_C( 91), -INT8_C( 6), -INT8_C( 98) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 7), INT8_C( 47), -INT8_C( 124), INT8_C( 81), INT8_C( 64), INT8_C( 5), -INT8_C( 122), -INT8_C( 25) },
|
||
|
|
{ INT8_C( 114), INT8_C( 122), INT8_C( 55), -INT8_C( 95), INT8_C( 35), INT8_C( 53), INT8_C( 97), -INT8_C( 121) },
|
||
|
|
{ -INT8_C( 16), INT8_C( 49), -INT8_C( 22), -INT8_C( 59), INT8_C( 47), INT8_C( 27), -INT8_C( 48), -INT8_C( 3) },
|
||
|
|
{ -INT8_C( 64), -INT8_C( 53), -INT8_C( 101), -INT8_C( 4), -INT8_C( 1), INT8_C( 125), INT8_C( 63), INT8_C( 6) } },
|
||
|
|
{ -INT8_C( 84), -INT8_C( 60), INT8_C( 88), -INT8_C( 20) },
|
||
|
|
{ { INT8_C( 7), INT8_C( 47), -INT8_C( 124), -INT8_C( 84), INT8_C( 64), INT8_C( 5), -INT8_C( 122), -INT8_C( 25) },
|
||
|
|
{ INT8_C( 114), INT8_C( 122), INT8_C( 55), -INT8_C( 60), INT8_C( 35), INT8_C( 53), INT8_C( 97), -INT8_C( 121) },
|
||
|
|
{ -INT8_C( 16), INT8_C( 49), -INT8_C( 22), INT8_C( 88), INT8_C( 47), INT8_C( 27), -INT8_C( 48), -INT8_C( 3) },
|
||
|
|
{ -INT8_C( 64), -INT8_C( 53), -INT8_C( 101), -INT8_C( 20), -INT8_C( 1), INT8_C( 125), INT8_C( 63), INT8_C( 6) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT8_C( 55), -INT8_C( 34), -INT8_C( 45), INT8_C( 59), INT8_C( 88), INT8_C( 10), -INT8_C( 36), INT8_C( 124) },
|
||
|
|
{ INT8_C( 64), INT8_C( 62), INT8_C( 3), INT8_C( 48), INT8_C( 111), -INT8_C( 19), -INT8_C( 11), -INT8_C( 98) },
|
||
|
|
{ INT8_C( 8), -INT8_C( 58), -INT8_C( 100), -INT8_C( 56), -INT8_C( 111), INT8_C( 55), -INT8_C( 60), -INT8_C( 112) },
|
||
|
|
{ -INT8_C( 76), INT8_C( 4), -INT8_C( 106), INT8_C( 96), -INT8_C( 56), -INT8_C( 18), INT8_C( 76), -INT8_C( 111) } },
|
||
|
|
{ -INT8_C( 52), INT8_C( 32), -INT8_C( 52), INT8_C( 37) },
|
||
|
|
{ { -INT8_C( 55), -INT8_C( 34), -INT8_C( 45), INT8_C( 59), -INT8_C( 52), INT8_C( 10), -INT8_C( 36), INT8_C( 124) },
|
||
|
|
{ INT8_C( 64), INT8_C( 62), INT8_C( 3), INT8_C( 48), INT8_C( 32), -INT8_C( 19), -INT8_C( 11), -INT8_C( 98) },
|
||
|
|
{ INT8_C( 8), -INT8_C( 58), -INT8_C( 100), -INT8_C( 56), -INT8_C( 52), INT8_C( 55), -INT8_C( 60), -INT8_C( 112) },
|
||
|
|
{ -INT8_C( 76), INT8_C( 4), -INT8_C( 106), INT8_C( 96), INT8_C( 37), -INT8_C( 18), INT8_C( 76), -INT8_C( 111) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 42), -INT8_C( 88), -INT8_C( 95), INT8_C( 106), -INT8_C( 26), -INT8_C( 92), -INT8_C( 102), INT8_C( 86) },
|
||
|
|
{ -INT8_C( 111), -INT8_C( 112), -INT8_C( 12), -INT8_C( 102), INT8_C( 86), -INT8_C( 112), INT8_C( 98), -INT8_C( 25) },
|
||
|
|
{ -INT8_C( 56), INT8_C( 39), INT8_C( 119), INT8_C( 124), INT8_C( 43), INT8_C( 13), -INT8_C( 35), -INT8_C( 13) },
|
||
|
|
{ -INT8_C( 4), INT8_C( 41), -INT8_C( 124), -INT8_C( 56), INT8_C( 73), INT8_C( 80), -INT8_C( 19), INT8_C( 116) } },
|
||
|
|
{ -INT8_C( 8), -INT8_C( 114), -INT8_C( 34), -INT8_C( 33) },
|
||
|
|
{ { INT8_C( 42), -INT8_C( 88), -INT8_C( 95), INT8_C( 106), -INT8_C( 26), -INT8_C( 8), -INT8_C( 102), INT8_C( 86) },
|
||
|
|
{ -INT8_C( 111), -INT8_C( 112), -INT8_C( 12), -INT8_C( 102), INT8_C( 86), -INT8_C( 114), INT8_C( 98), -INT8_C( 25) },
|
||
|
|
{ -INT8_C( 56), INT8_C( 39), INT8_C( 119), INT8_C( 124), INT8_C( 43), -INT8_C( 34), -INT8_C( 35), -INT8_C( 13) },
|
||
|
|
{ -INT8_C( 4), INT8_C( 41), -INT8_C( 124), -INT8_C( 56), INT8_C( 73), -INT8_C( 33), -INT8_C( 19), INT8_C( 116) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 50), INT8_C( 121), INT8_C( 53), -INT8_C( 60), INT8_C( 9), INT8_C( 41), INT8_C( 94), INT8_C( 95) },
|
||
|
|
{ -INT8_C( 70), -INT8_C( 64), INT8_C( 70), -INT8_C( 126), -INT8_C( 25), -INT8_C( 67), -INT8_C( 2), INT8_C( 18) },
|
||
|
|
{ -INT8_C( 54), -INT8_C( 37), INT8_C( 5), -INT8_C( 58), INT8_C( 5), -INT8_C( 119), -INT8_C( 113), INT8_C( 78) },
|
||
|
|
{ -INT8_C( 39), INT8_C( 124), -INT8_C( 62), -INT8_C( 46), INT8_C( 11), -INT8_C( 95), -INT8_C( 79), INT8_C( 61) } },
|
||
|
|
{ INT8_C( 26), -INT8_C( 26), INT8_C( 1), INT8_C( 35) },
|
||
|
|
{ { INT8_C( 50), INT8_C( 121), INT8_C( 53), -INT8_C( 60), INT8_C( 9), INT8_C( 41), INT8_C( 26), INT8_C( 95) },
|
||
|
|
{ -INT8_C( 70), -INT8_C( 64), INT8_C( 70), -INT8_C( 126), -INT8_C( 25), -INT8_C( 67), -INT8_C( 26), INT8_C( 18) },
|
||
|
|
{ -INT8_C( 54), -INT8_C( 37), INT8_C( 5), -INT8_C( 58), INT8_C( 5), -INT8_C( 119), INT8_C( 1), INT8_C( 78) },
|
||
|
|
{ -INT8_C( 39), INT8_C( 124), -INT8_C( 62), -INT8_C( 46), INT8_C( 11), -INT8_C( 95), INT8_C( 35), INT8_C( 61) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 15), INT8_C( 95), -INT8_C( 126), -INT8_C( 55), INT8_C( 32), -INT8_C( 56), INT8_C( 75), INT8_C( 7) },
|
||
|
|
{ -INT8_C( 123), INT8_C( 74), INT8_C( 26), INT8_C( 79), INT8_C( 37), INT8_C( 31), INT8_C( 22), INT8_C( 42) },
|
||
|
|
{ -INT8_C( 87), -INT8_C( 91), INT8_C( 121), -INT8_C( 126), INT8_C( 33), INT8_C( 59), INT8_C( 84), INT8_C( 44) },
|
||
|
|
{ -INT8_C( 36), INT8_C( 5), INT8_C( 106), -INT8_C( 10), -INT8_C( 21), INT8_C( 107), INT8_C( 25), -INT8_C( 5) } },
|
||
|
|
{ -INT8_C( 53), -INT8_C( 101), -INT8_C( 60), -INT8_C( 21) },
|
||
|
|
{ { INT8_C( 15), INT8_C( 95), -INT8_C( 126), -INT8_C( 55), INT8_C( 32), -INT8_C( 56), INT8_C( 75), -INT8_C( 53) },
|
||
|
|
{ -INT8_C( 123), INT8_C( 74), INT8_C( 26), INT8_C( 79), INT8_C( 37), INT8_C( 31), INT8_C( 22), -INT8_C( 101) },
|
||
|
|
{ -INT8_C( 87), -INT8_C( 91), INT8_C( 121), -INT8_C( 126), INT8_C( 33), INT8_C( 59), INT8_C( 84), -INT8_C( 60) },
|
||
|
|
{ -INT8_C( 36), INT8_C( 5), INT8_C( 106), -INT8_C( 10), -INT8_C( 21), INT8_C( 107), INT8_C( 25), -INT8_C( 21) } },
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int8x8x4_t r;
|
||
|
|
simde_int8x8x4_t src = {
|
||
|
|
{simde_vld1_s8(test_vec[i].src[0]), simde_vld1_s8(test_vec[i].src[1]),
|
||
|
|
simde_vld1_s8(test_vec[i].src[2]), simde_vld1_s8(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4_lane_s8, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_int8x8x4_t expected = {
|
||
|
|
{simde_vld1_s8(test_vec[i].r[0]), simde_vld1_s8(test_vec[i].r[1]),
|
||
|
|
simde_vld1_s8(test_vec[i].r[2]), simde_vld1_s8(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i8x8(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i8x8(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i8x8(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i8x8(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 8 ; i++) {
|
||
|
|
simde_int8x8x4_t src = simde_test_arm_neon_random_i8x8x4();
|
||
|
|
simde_test_arm_neon_write_i8x8x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int8_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi8(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int8x8x4_t r;
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4_lane_s8, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_i8x8x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int16_t src[4][4];
|
||
|
|
int16_t buf[4];
|
||
|
|
int16_t r[4][4];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { -INT16_C( 18424), INT16_C( 22298), -INT16_C( 9407), INT16_C( 10821) },
|
||
|
|
{ INT16_C( 1649), INT16_C( 28692), -INT16_C( 29690), INT16_C( 4079) },
|
||
|
|
{ INT16_C( 5162), INT16_C( 10635), INT16_C( 21625), INT16_C( 24093) },
|
||
|
|
{ -INT16_C( 4458), -INT16_C( 23250), INT16_C( 1945), -INT16_C( 24312) } },
|
||
|
|
{ INT16_C( 8895), INT16_C( 504), INT16_C( 0), INT16_C( 0) },
|
||
|
|
{ { INT16_C( 8895), INT16_C( 22298), -INT16_C( 9407), INT16_C( 10821) },
|
||
|
|
{ INT16_C( 504), INT16_C( 28692), -INT16_C( 29690), INT16_C( 4079) },
|
||
|
|
{ INT16_C( 0), INT16_C( 10635), INT16_C( 21625), INT16_C( 24093) },
|
||
|
|
{ INT16_C( 0), -INT16_C( 23250), INT16_C( 1945), -INT16_C( 24312) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT16_C( 16125), INT16_C( 28203), INT16_C( 16196), INT16_C( 19166) },
|
||
|
|
{ -INT16_C( 12853), -INT16_C( 2727), -INT16_C( 6687), INT16_C( 23326) },
|
||
|
|
{ INT16_C( 15417), -INT16_C( 12359), -INT16_C( 6358), -INT16_C( 15244) },
|
||
|
|
{ INT16_C( 31983), -INT16_C( 20891), INT16_C( 24222), -INT16_C( 25425) } },
|
||
|
|
{ -INT16_C( 9316), -INT16_C( 8182), INT16_C( 0), INT16_C( 0) },
|
||
|
|
{ { INT16_C( 16125), -INT16_C( 9316), INT16_C( 16196), INT16_C( 19166) },
|
||
|
|
{ -INT16_C( 12853), -INT16_C( 8182), -INT16_C( 6687), INT16_C( 23326) },
|
||
|
|
{ INT16_C( 15417), INT16_C( 0), -INT16_C( 6358), -INT16_C( 15244) },
|
||
|
|
{ INT16_C( 31983), INT16_C( 0), INT16_C( 24222), -INT16_C( 25425) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT16_C( 5862), -INT16_C( 6613), -INT16_C( 31562), -INT16_C( 26405) },
|
||
|
|
{ -INT16_C( 1431), -INT16_C( 23821), -INT16_C( 21450), INT16_C( 24689) },
|
||
|
|
{ -INT16_C( 6765), -INT16_C( 32220), -INT16_C( 30111), INT16_C( 49) },
|
||
|
|
{ -INT16_C( 7960), -INT16_C( 31588), -INT16_C( 22853), -INT16_C( 10652) } },
|
||
|
|
{ -INT16_C( 28785), INT16_C( 18108), INT16_C( 0), INT16_C( 0) },
|
||
|
|
{ { -INT16_C( 5862), -INT16_C( 6613), -INT16_C( 28785), -INT16_C( 26405) },
|
||
|
|
{ -INT16_C( 1431), -INT16_C( 23821), INT16_C( 18108), INT16_C( 24689) },
|
||
|
|
{ -INT16_C( 6765), -INT16_C( 32220), INT16_C( 0), INT16_C( 49) },
|
||
|
|
{ -INT16_C( 7960), -INT16_C( 31588), INT16_C( 0), -INT16_C( 10652) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT16_C( 26860), INT16_C( 32222), -INT16_C( 11887), -INT16_C( 14560) },
|
||
|
|
{ -INT16_C( 28291), INT16_C( 4136), INT16_C( 19575), -INT16_C( 10093) },
|
||
|
|
{ -INT16_C( 15146), -INT16_C( 16680), INT16_C( 29860), INT16_C( 24642) },
|
||
|
|
{ -INT16_C( 22757), -INT16_C( 21962), -INT16_C( 3530), INT16_C( 19184) } },
|
||
|
|
{ -INT16_C( 12663), INT16_C( 7112), INT16_C( 0), INT16_C( 0) },
|
||
|
|
{ { -INT16_C( 26860), INT16_C( 32222), -INT16_C( 11887), -INT16_C( 12663) },
|
||
|
|
{ -INT16_C( 28291), INT16_C( 4136), INT16_C( 19575), INT16_C( 7112) },
|
||
|
|
{ -INT16_C( 15146), -INT16_C( 16680), INT16_C( 29860), INT16_C( 0) },
|
||
|
|
{ -INT16_C( 22757), -INT16_C( 21962), -INT16_C( 3530), INT16_C( 0) } },
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int16x4x4_t r;
|
||
|
|
simde_int16x4x4_t src = {
|
||
|
|
{simde_vld1_s16(test_vec[i].src[0]), simde_vld1_s16(test_vec[i].src[1]),
|
||
|
|
simde_vld1_s16(test_vec[i].src[2]), simde_vld1_s16(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4_lane_s16, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_int16x4x4_t expected = {
|
||
|
|
{simde_vld1_s16(test_vec[i].r[0]), simde_vld1_s16(test_vec[i].r[1]),
|
||
|
|
simde_vld1_s16(test_vec[i].r[2]), simde_vld1_s16(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i16x4(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i16x4(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i16x4(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i16x4(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 4 ; i++) {
|
||
|
|
simde_int16x4x4_t src = simde_test_arm_neon_random_i16x4x4();
|
||
|
|
simde_test_arm_neon_write_i16x4x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int16_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi16(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int16x4x4_t r;
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4_lane_s16, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_i16x4x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int32_t src[4][8];
|
||
|
|
int32_t buf[4];
|
||
|
|
int32_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { INT32_C( 1600659140), -INT32_C( 869507461) },
|
||
|
|
{ -INT32_C( 257181748), INT32_C( 970225014) },
|
||
|
|
{ INT32_C( 1880013894), INT32_C( 1806348973) },
|
||
|
|
{ -INT32_C( 1085848577), -INT32_C( 1482812702) } },
|
||
|
|
{ -INT32_C( 1408891343), INT32_C( 0), INT32_C( 1063663797), INT32_C( 1073734480) },
|
||
|
|
{ { -INT32_C( 1408891343), -INT32_C( 869507461) },
|
||
|
|
{ INT32_C( 0), INT32_C( 970225014) },
|
||
|
|
{ INT32_C( 1063663797), INT32_C( 1806348973) },
|
||
|
|
{ INT32_C( 1073734480), -INT32_C( 1482812702) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT32_C( 813183844), INT32_C( 1612719082) },
|
||
|
|
{ -INT32_C( 543492968), INT32_C( 1565501616) },
|
||
|
|
{ INT32_C( 1506343514), INT32_C( 538447677) },
|
||
|
|
{ INT32_C( 1405597474), INT32_C( 587189693) } },
|
||
|
|
{ -INT32_C( 363694336), INT32_C( 0), INT32_C( 1063663797), INT32_C( 1073734480) },
|
||
|
|
{ { INT32_C( 813183844), -INT32_C( 363694336) },
|
||
|
|
{ -INT32_C( 543492968), INT32_C( 0) },
|
||
|
|
{ INT32_C( 1506343514), INT32_C( 1063663797) },
|
||
|
|
{ INT32_C( 1405597474), INT32_C( 1073734480) } },
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int32x2x4_t r;
|
||
|
|
simde_int32x2x4_t src = {
|
||
|
|
{simde_vld1_s32(test_vec[i].src[0]), simde_vld1_s32(test_vec[i].src[1]),
|
||
|
|
simde_vld1_s32(test_vec[i].src[2]), simde_vld1_s32(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4_lane_s32, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_int32x2x4_t expected = {
|
||
|
|
{simde_vld1_s32(test_vec[i].r[0]), simde_vld1_s32(test_vec[i].r[1]),
|
||
|
|
simde_vld1_s32(test_vec[i].r[2]), simde_vld1_s32(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i32x2(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i32x2(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i32x2(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i32x2(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_int32x2x4_t src = simde_test_arm_neon_random_i32x2x4();
|
||
|
|
simde_test_arm_neon_write_i32x2x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int32_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi32(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int32x2x4_t r;
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4_lane_s32, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_i32x2x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_s64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int64_t src[4][8];
|
||
|
|
int64_t buf[4];
|
||
|
|
int64_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { INT64_C( 5642904371545280401) },
|
||
|
|
{ -INT64_C( 711416625901707609) },
|
||
|
|
{ INT64_C( 8299642698000536885) },
|
||
|
|
{ INT64_C( 3817005894186430286) } },
|
||
|
|
{ INT64_C( 4611654480098454601), INT64_C( 0), INT64_C( 4294967296), INT64_C( 4616194021471028225) },
|
||
|
|
{ { INT64_C( 4611654480098454601) },
|
||
|
|
{ INT64_C( 0) },
|
||
|
|
{ INT64_C( 4294967296) },
|
||
|
|
{ INT64_C( 4616194021471028225) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT64_C( 2506546529019849484) },
|
||
|
|
{ -INT64_C( 8268304906103232108) },
|
||
|
|
{ INT64_C( 202818524639424341) },
|
||
|
|
{ INT64_C( 4646397826290927688) } },
|
||
|
|
{ INT64_C( 4611654478451749565), INT64_C( 0), INT64_C( 4294967296), INT64_C( 4616194021471028225) },
|
||
|
|
{ { INT64_C( 4611654478451749565) },
|
||
|
|
{ INT64_C( 0) },
|
||
|
|
{ INT64_C( 4294967296) },
|
||
|
|
{ INT64_C( 4616194021471028225) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int64x1x4_t src = {
|
||
|
|
{simde_vld1_s64(test_vec[i].src[0]), simde_vld1_s64(test_vec[i].src[1]),
|
||
|
|
simde_vld1_s64(test_vec[i].src[2]), simde_vld1_s64(test_vec[i].src[3])}};
|
||
|
|
simde_int64x1x4_t r = simde_vld4_lane_s64(test_vec[i].buf, src, 0);
|
||
|
|
|
||
|
|
simde_int64x1x4_t expected = {
|
||
|
|
{simde_vld1_s64(test_vec[i].r[0]), simde_vld1_s64(test_vec[i].r[1]),
|
||
|
|
simde_vld1_s64(test_vec[i].r[2]), simde_vld1_s64(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i64x1(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i64x1(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i64x1(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i64x1(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_int64x1x4_t src = simde_test_arm_neon_random_i64x1x4();
|
||
|
|
simde_test_arm_neon_write_i64x1x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int64_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi64(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int64x1x4_t r = simde_vld4_lane_s64(buf, src, 0);
|
||
|
|
simde_test_arm_neon_write_i64x1x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_u8 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint8_t src[4][8];
|
||
|
|
uint8_t buf[4];
|
||
|
|
uint8_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT8_C(117), UINT8_C( 19), UINT8_C(134), UINT8_C(112), UINT8_C(144), UINT8_C(147), UINT8_C( 77), UINT8_C( 69) },
|
||
|
|
{ UINT8_C( 36), UINT8_C(194), UINT8_C( 23), UINT8_C(228), UINT8_C( 1), UINT8_C( 38), UINT8_C( 18), UINT8_C(146) },
|
||
|
|
{ UINT8_C(113), UINT8_C(220), UINT8_C(108), UINT8_C( 23), UINT8_C(208), UINT8_C(110), UINT8_C(202), UINT8_C(158) },
|
||
|
|
{ UINT8_C( 71), UINT8_C( 69), UINT8_C(247), UINT8_C(164), UINT8_C( 87), UINT8_C( 73), UINT8_C(196), UINT8_C(204) } },
|
||
|
|
{ UINT8_C( 92), UINT8_C( 74), UINT8_C( 60), UINT8_C(236) },
|
||
|
|
{ { UINT8_C( 92), UINT8_C( 19), UINT8_C(134), UINT8_C(112), UINT8_C(144), UINT8_C(147), UINT8_C( 77), UINT8_C( 69) },
|
||
|
|
{ UINT8_C( 74), UINT8_C(194), UINT8_C( 23), UINT8_C(228), UINT8_C( 1), UINT8_C( 38), UINT8_C( 18), UINT8_C(146) },
|
||
|
|
{ UINT8_C( 60), UINT8_C(220), UINT8_C(108), UINT8_C( 23), UINT8_C(208), UINT8_C(110), UINT8_C(202), UINT8_C(158) },
|
||
|
|
{ UINT8_C(236), UINT8_C( 69), UINT8_C(247), UINT8_C(164), UINT8_C( 87), UINT8_C( 73), UINT8_C(196), UINT8_C(204) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(221), UINT8_C(138), UINT8_C( 50), UINT8_C( 1), UINT8_C( 76), UINT8_C( 73), UINT8_C(230), UINT8_C( 77) },
|
||
|
|
{ UINT8_C(111), UINT8_C(248), UINT8_C(223), UINT8_C(225), UINT8_C(212), UINT8_C( 76), UINT8_C(248), UINT8_C(164) },
|
||
|
|
{ UINT8_C(186), UINT8_C(194), UINT8_C( 66), UINT8_C( 1), UINT8_C( 7), UINT8_C( 57), UINT8_C(165), UINT8_C( 94) },
|
||
|
|
{ UINT8_C(130), UINT8_C(106), UINT8_C( 43), UINT8_C(223), UINT8_C(180), UINT8_C(103), UINT8_C(203), UINT8_C(146) } },
|
||
|
|
{ UINT8_C(241), UINT8_C(253), UINT8_C(147), UINT8_C( 61) },
|
||
|
|
{ { UINT8_C(221), UINT8_C(241), UINT8_C( 50), UINT8_C( 1), UINT8_C( 76), UINT8_C( 73), UINT8_C(230), UINT8_C( 77) },
|
||
|
|
{ UINT8_C(111), UINT8_C(253), UINT8_C(223), UINT8_C(225), UINT8_C(212), UINT8_C( 76), UINT8_C(248), UINT8_C(164) },
|
||
|
|
{ UINT8_C(186), UINT8_C(147), UINT8_C( 66), UINT8_C( 1), UINT8_C( 7), UINT8_C( 57), UINT8_C(165), UINT8_C( 94) },
|
||
|
|
{ UINT8_C(130), UINT8_C( 61), UINT8_C( 43), UINT8_C(223), UINT8_C(180), UINT8_C(103), UINT8_C(203), UINT8_C(146) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C( 71), UINT8_C(121), UINT8_C(139), UINT8_C(182), UINT8_C(114), UINT8_C(106), UINT8_C(151), UINT8_C( 70) },
|
||
|
|
{ UINT8_C(182), UINT8_C(143), UINT8_C(235), UINT8_C(112), UINT8_C( 81), UINT8_C( 45), UINT8_C(113), UINT8_C( 88) },
|
||
|
|
{ UINT8_C(103), UINT8_C( 23), UINT8_C(183), UINT8_C(233), UINT8_C(129), UINT8_C(226), UINT8_C(200), UINT8_C( 53) },
|
||
|
|
{ UINT8_C( 73), UINT8_C(148), UINT8_C(199), UINT8_C( 59), UINT8_C(145), UINT8_C( 91), UINT8_C(120), UINT8_C(216) } },
|
||
|
|
{ UINT8_C(212), UINT8_C( 3), UINT8_C(143), UINT8_C( 70) },
|
||
|
|
{ { UINT8_C( 71), UINT8_C(121), UINT8_C(212), UINT8_C(182), UINT8_C(114), UINT8_C(106), UINT8_C(151), UINT8_C( 70) },
|
||
|
|
{ UINT8_C(182), UINT8_C(143), UINT8_C( 3), UINT8_C(112), UINT8_C( 81), UINT8_C( 45), UINT8_C(113), UINT8_C( 88) },
|
||
|
|
{ UINT8_C(103), UINT8_C( 23), UINT8_C(143), UINT8_C(233), UINT8_C(129), UINT8_C(226), UINT8_C(200), UINT8_C( 53) },
|
||
|
|
{ UINT8_C( 73), UINT8_C(148), UINT8_C( 70), UINT8_C( 59), UINT8_C(145), UINT8_C( 91), UINT8_C(120), UINT8_C(216) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(110), UINT8_C( 38), UINT8_C(141), UINT8_C( 36), UINT8_C(182), UINT8_C(120), UINT8_C(149), UINT8_C( 7) },
|
||
|
|
{ UINT8_C(165), UINT8_C( 6), UINT8_C( 96), UINT8_C( 12), UINT8_C( 29), UINT8_C( 23), UINT8_C(246), UINT8_C(158) },
|
||
|
|
{ UINT8_C(249), UINT8_C(190), UINT8_C(212), UINT8_C( 66), UINT8_C( 82), UINT8_C(155), UINT8_C(125), UINT8_C(228) },
|
||
|
|
{ UINT8_C(246), UINT8_C(246), UINT8_C(188), UINT8_C(203), UINT8_C(249), UINT8_C( 75), UINT8_C( 17), UINT8_C(103) } },
|
||
|
|
{ UINT8_C(114), UINT8_C(158), UINT8_C(140), UINT8_C( 40) },
|
||
|
|
{ { UINT8_C(110), UINT8_C( 38), UINT8_C(141), UINT8_C(114), UINT8_C(182), UINT8_C(120), UINT8_C(149), UINT8_C( 7) },
|
||
|
|
{ UINT8_C(165), UINT8_C( 6), UINT8_C( 96), UINT8_C(158), UINT8_C( 29), UINT8_C( 23), UINT8_C(246), UINT8_C(158) },
|
||
|
|
{ UINT8_C(249), UINT8_C(190), UINT8_C(212), UINT8_C(140), UINT8_C( 82), UINT8_C(155), UINT8_C(125), UINT8_C(228) },
|
||
|
|
{ UINT8_C(246), UINT8_C(246), UINT8_C(188), UINT8_C( 40), UINT8_C(249), UINT8_C( 75), UINT8_C( 17), UINT8_C(103) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C( 22), UINT8_C( 33), UINT8_C( 47), UINT8_C(188), UINT8_C( 39), UINT8_C(143), UINT8_C(200), UINT8_C( 69) },
|
||
|
|
{ UINT8_C(166), UINT8_C(190), UINT8_C(227), UINT8_C(159), UINT8_C(125), UINT8_C(183), UINT8_C(226), UINT8_C(207) },
|
||
|
|
{ UINT8_C( 83), UINT8_C( 95), UINT8_C(179), UINT8_C( 73), UINT8_C( 85), UINT8_C(112), UINT8_C( 20), UINT8_C( 79) },
|
||
|
|
{ UINT8_C(187), UINT8_C( 38), UINT8_C(182), UINT8_C( 45), UINT8_C(196), UINT8_C( 66), UINT8_C( 85), UINT8_C(219) } },
|
||
|
|
{ UINT8_C( 99), UINT8_C(133), UINT8_C(151), UINT8_C(139) },
|
||
|
|
{ { UINT8_C( 22), UINT8_C( 33), UINT8_C( 47), UINT8_C(188), UINT8_C( 99), UINT8_C(143), UINT8_C(200), UINT8_C( 69) },
|
||
|
|
{ UINT8_C(166), UINT8_C(190), UINT8_C(227), UINT8_C(159), UINT8_C(133), UINT8_C(183), UINT8_C(226), UINT8_C(207) },
|
||
|
|
{ UINT8_C( 83), UINT8_C( 95), UINT8_C(179), UINT8_C( 73), UINT8_C(151), UINT8_C(112), UINT8_C( 20), UINT8_C( 79) },
|
||
|
|
{ UINT8_C(187), UINT8_C( 38), UINT8_C(182), UINT8_C( 45), UINT8_C(139), UINT8_C( 66), UINT8_C( 85), UINT8_C(219) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C( 20), UINT8_C( 95), UINT8_C(208), UINT8_C(187), UINT8_C( 30), UINT8_C(179), UINT8_C( 90), UINT8_C(155) },
|
||
|
|
{ UINT8_C(107), UINT8_C( 60), UINT8_C(106), UINT8_C(190), UINT8_C(156), UINT8_C( 30), UINT8_C( 7), UINT8_C(241) },
|
||
|
|
{ UINT8_C(142), UINT8_C( 28), UINT8_C( 64), UINT8_C( 73), UINT8_C( 66), UINT8_C(247), UINT8_C(119), UINT8_C( 6) },
|
||
|
|
{ UINT8_C( 57), UINT8_C(204), UINT8_C(225), UINT8_C(157), UINT8_C( 81), UINT8_C(120), UINT8_C( 40), UINT8_C(102) } },
|
||
|
|
{ UINT8_C(216), UINT8_C(248), UINT8_C( 33), UINT8_C(246) },
|
||
|
|
{ { UINT8_C( 20), UINT8_C( 95), UINT8_C(208), UINT8_C(187), UINT8_C( 30), UINT8_C(216), UINT8_C( 90), UINT8_C(155) },
|
||
|
|
{ UINT8_C(107), UINT8_C( 60), UINT8_C(106), UINT8_C(190), UINT8_C(156), UINT8_C(248), UINT8_C( 7), UINT8_C(241) },
|
||
|
|
{ UINT8_C(142), UINT8_C( 28), UINT8_C( 64), UINT8_C( 73), UINT8_C( 66), UINT8_C( 33), UINT8_C(119), UINT8_C( 6) },
|
||
|
|
{ UINT8_C( 57), UINT8_C(204), UINT8_C(225), UINT8_C(157), UINT8_C( 81), UINT8_C(246), UINT8_C( 40), UINT8_C(102) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(171), UINT8_C(123), UINT8_C(145), UINT8_C( 22), UINT8_C(184), UINT8_C(251), UINT8_C(212), UINT8_C( 84) },
|
||
|
|
{ UINT8_C( 25), UINT8_C(220), UINT8_C( 69), UINT8_C(167), UINT8_C(248), UINT8_C(134), UINT8_C(241), UINT8_C( 58) },
|
||
|
|
{ UINT8_C(125), UINT8_C(104), UINT8_C( 64), UINT8_C(182), UINT8_C( 52), UINT8_C( 34), UINT8_C( 83), UINT8_C(134) },
|
||
|
|
{ UINT8_C(154), UINT8_C(123), UINT8_C(236), UINT8_C(114), UINT8_C(115), UINT8_C( 13), UINT8_C(104), UINT8_C( 31) } },
|
||
|
|
{ UINT8_C(136), UINT8_C(249), UINT8_C( 53), UINT8_C( 64) },
|
||
|
|
{ { UINT8_C(171), UINT8_C(123), UINT8_C(145), UINT8_C( 22), UINT8_C(184), UINT8_C(251), UINT8_C(136), UINT8_C( 84) },
|
||
|
|
{ UINT8_C( 25), UINT8_C(220), UINT8_C( 69), UINT8_C(167), UINT8_C(248), UINT8_C(134), UINT8_C(249), UINT8_C( 58) },
|
||
|
|
{ UINT8_C(125), UINT8_C(104), UINT8_C( 64), UINT8_C(182), UINT8_C( 52), UINT8_C( 34), UINT8_C( 53), UINT8_C(134) },
|
||
|
|
{ UINT8_C(154), UINT8_C(123), UINT8_C(236), UINT8_C(114), UINT8_C(115), UINT8_C( 13), UINT8_C( 64), UINT8_C( 31) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(245), UINT8_C( 10), UINT8_C(148), UINT8_C( 14), UINT8_C(230), UINT8_C(218), UINT8_C(182), UINT8_C(222) },
|
||
|
|
{ UINT8_C( 96), UINT8_C(167), UINT8_C( 24), UINT8_C(221), UINT8_C( 15), UINT8_C( 88), UINT8_C(147), UINT8_C( 67) },
|
||
|
|
{ UINT8_C(122), UINT8_C(231), UINT8_C(201), UINT8_C( 21), UINT8_C( 98), UINT8_C(181), UINT8_C(135), UINT8_C(214) },
|
||
|
|
{ UINT8_C(194), UINT8_C(240), UINT8_C(245), UINT8_C( 75), UINT8_C(233), UINT8_C( 42), UINT8_C(139), UINT8_C(222) } },
|
||
|
|
{ UINT8_C( 52), UINT8_C( 32), UINT8_C(237), UINT8_C( 26) },
|
||
|
|
{ { UINT8_C(245), UINT8_C( 10), UINT8_C(148), UINT8_C( 14), UINT8_C(230), UINT8_C(218), UINT8_C(182), UINT8_C( 52) },
|
||
|
|
{ UINT8_C( 96), UINT8_C(167), UINT8_C( 24), UINT8_C(221), UINT8_C( 15), UINT8_C( 88), UINT8_C(147), UINT8_C( 32) },
|
||
|
|
{ UINT8_C(122), UINT8_C(231), UINT8_C(201), UINT8_C( 21), UINT8_C( 98), UINT8_C(181), UINT8_C(135), UINT8_C(237) },
|
||
|
|
{ UINT8_C(194), UINT8_C(240), UINT8_C(245), UINT8_C( 75), UINT8_C(233), UINT8_C( 42), UINT8_C(139), UINT8_C( 26) } },
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint8x8x4_t r;
|
||
|
|
simde_uint8x8x4_t src = {
|
||
|
|
{simde_vld1_u8(test_vec[i].src[0]), simde_vld1_u8(test_vec[i].src[1]),
|
||
|
|
simde_vld1_u8(test_vec[i].src[2]), simde_vld1_u8(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4_lane_u8, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_uint8x8x4_t expected = {
|
||
|
|
{simde_vld1_u8(test_vec[i].r[0]), simde_vld1_u8(test_vec[i].r[1]),
|
||
|
|
simde_vld1_u8(test_vec[i].r[2]), simde_vld1_u8(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u8x8(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u8x8(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u8x8(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u8x8(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 8 ; i++) {
|
||
|
|
simde_uint8x8x4_t src = simde_test_arm_neon_random_u8x8x4();
|
||
|
|
simde_test_arm_neon_write_u8x8x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint8_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, buf);
|
||
|
|
simde_test_codegen_write_vu8(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint8x8x4_t r;
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4_lane_u8, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_u8x8x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_u16 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint16_t src[4][4];
|
||
|
|
uint16_t buf[4];
|
||
|
|
uint16_t r[4][4];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT16_C(51978), UINT16_C( 842), UINT16_C(19122), UINT16_C( 1111) },
|
||
|
|
{ UINT16_C(64538), UINT16_C(59508), UINT16_C(24002), UINT16_C(17590) },
|
||
|
|
{ UINT16_C(39624), UINT16_C(38972), UINT16_C(26313), UINT16_C(24858) },
|
||
|
|
{ UINT16_C(58101), UINT16_C(29864), UINT16_C( 4542), UINT16_C(51367) } },
|
||
|
|
{ UINT16_C(61917), UINT16_C(36812), UINT16_C(63644), UINT16_C(61703) },
|
||
|
|
{ { UINT16_C(61917), UINT16_C( 842), UINT16_C(19122), UINT16_C( 1111) },
|
||
|
|
{ UINT16_C(36812), UINT16_C(59508), UINT16_C(24002), UINT16_C(17590) },
|
||
|
|
{ UINT16_C(63644), UINT16_C(38972), UINT16_C(26313), UINT16_C(24858) },
|
||
|
|
{ UINT16_C(61703), UINT16_C(29864), UINT16_C( 4542), UINT16_C(51367) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C( 9019), UINT16_C(21908), UINT16_C( 2079), UINT16_C(57917) },
|
||
|
|
{ UINT16_C(62565), UINT16_C(11558), UINT16_C(25230), UINT16_C(22469) },
|
||
|
|
{ UINT16_C(57288), UINT16_C(48824), UINT16_C(24769), UINT16_C(32818) },
|
||
|
|
{ UINT16_C(55666), UINT16_C(20296), UINT16_C( 5323), UINT16_C( 1758) } },
|
||
|
|
{ UINT16_C(29240), UINT16_C(22364), UINT16_C(63644), UINT16_C(61703) },
|
||
|
|
{ { UINT16_C( 9019), UINT16_C(29240), UINT16_C( 2079), UINT16_C(57917) },
|
||
|
|
{ UINT16_C(62565), UINT16_C(22364), UINT16_C(25230), UINT16_C(22469) },
|
||
|
|
{ UINT16_C(57288), UINT16_C(63644), UINT16_C(24769), UINT16_C(32818) },
|
||
|
|
{ UINT16_C(55666), UINT16_C(61703), UINT16_C( 5323), UINT16_C( 1758) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C(39290), UINT16_C(57145), UINT16_C(24461), UINT16_C( 6925) },
|
||
|
|
{ UINT16_C(53954), UINT16_C(35443), UINT16_C(11186), UINT16_C(29512) },
|
||
|
|
{ UINT16_C(31628), UINT16_C(65267), UINT16_C(15444), UINT16_C( 8013) },
|
||
|
|
{ UINT16_C(11088), UINT16_C(34854), UINT16_C(33438), UINT16_C( 6368) } },
|
||
|
|
{ UINT16_C( 6427), UINT16_C(43512), UINT16_C(63644), UINT16_C(61703) },
|
||
|
|
{ { UINT16_C(39290), UINT16_C(57145), UINT16_C( 6427), UINT16_C( 6925) },
|
||
|
|
{ UINT16_C(53954), UINT16_C(35443), UINT16_C(43512), UINT16_C(29512) },
|
||
|
|
{ UINT16_C(31628), UINT16_C(65267), UINT16_C(63644), UINT16_C( 8013) },
|
||
|
|
{ UINT16_C(11088), UINT16_C(34854), UINT16_C(61703), UINT16_C( 6368) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C( 1401), UINT16_C(15300), UINT16_C(14295), UINT16_C(35269) },
|
||
|
|
{ UINT16_C( 3683), UINT16_C(61437), UINT16_C(61577), UINT16_C(56813) },
|
||
|
|
{ UINT16_C(14892), UINT16_C(32253), UINT16_C( 9061), UINT16_C( 773) },
|
||
|
|
{ UINT16_C(58789), UINT16_C(49180), UINT16_C( 5375), UINT16_C(30825) } },
|
||
|
|
{ UINT16_C(11801), UINT16_C(61619), UINT16_C(63644), UINT16_C(61703) },
|
||
|
|
{ { UINT16_C( 1401), UINT16_C(15300), UINT16_C(14295), UINT16_C(11801) },
|
||
|
|
{ UINT16_C( 3683), UINT16_C(61437), UINT16_C(61577), UINT16_C(61619) },
|
||
|
|
{ UINT16_C(14892), UINT16_C(32253), UINT16_C( 9061), UINT16_C(63644) },
|
||
|
|
{ UINT16_C(58789), UINT16_C(49180), UINT16_C( 5375), UINT16_C(61703) } },
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint16x4x4_t r;
|
||
|
|
simde_uint16x4x4_t src = {
|
||
|
|
{simde_vld1_u16(test_vec[i].src[0]), simde_vld1_u16(test_vec[i].src[1]),
|
||
|
|
simde_vld1_u16(test_vec[i].src[2]), simde_vld1_u16(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4_lane_u16, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_uint16x4x4_t expected = {
|
||
|
|
{simde_vld1_u16(test_vec[i].r[0]), simde_vld1_u16(test_vec[i].r[1]),
|
||
|
|
simde_vld1_u16(test_vec[i].r[2]), simde_vld1_u16(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u16x4(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u16x4(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u16x4(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u16x4(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 4 ; i++) {
|
||
|
|
simde_uint16x4x4_t src = simde_test_arm_neon_random_u16x4x4();
|
||
|
|
simde_test_arm_neon_write_u16x4x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint16_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vu16(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint16x4x4_t r;
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4_lane_u16, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_u16x4x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint32_t src[4][8];
|
||
|
|
uint32_t buf[4];
|
||
|
|
uint32_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT32_C( 185984536), UINT32_C(2412175842) },
|
||
|
|
{ UINT32_C( 538607448), UINT32_C(1935848728) },
|
||
|
|
{ UINT32_C(4135226430), UINT32_C( 537512028) },
|
||
|
|
{ UINT32_C( 995058037), UINT32_C(2893705363) } },
|
||
|
|
{ UINT32_C( 951553878), UINT32_C( 0), UINT32_C(1063663797), UINT32_C(1073734480) },
|
||
|
|
{ { UINT32_C( 951553878), UINT32_C(2412175842) },
|
||
|
|
{ UINT32_C( 0), UINT32_C(1935848728) },
|
||
|
|
{ UINT32_C(1063663797), UINT32_C( 537512028) },
|
||
|
|
{ UINT32_C(1073734480), UINT32_C(2893705363) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT32_C(3368582768), UINT32_C( 367649533) },
|
||
|
|
{ UINT32_C(3599256472), UINT32_C( 885785303) },
|
||
|
|
{ UINT32_C(1079301578), UINT32_C(3397100342) },
|
||
|
|
{ UINT32_C(1769403667), UINT32_C(4120980869) } },
|
||
|
|
{ UINT32_C(2831051179), UINT32_C( 0), UINT32_C(1063663797), UINT32_C(1073734480) },
|
||
|
|
{ { UINT32_C(3368582768), UINT32_C(2831051179) },
|
||
|
|
{ UINT32_C(3599256472), UINT32_C( 0) },
|
||
|
|
{ UINT32_C(1079301578), UINT32_C(1063663797) },
|
||
|
|
{ UINT32_C(1769403667), UINT32_C(1073734480) } },
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint32x2x4_t r;
|
||
|
|
simde_uint32x2x4_t src = {
|
||
|
|
{simde_vld1_u32(test_vec[i].src[0]), simde_vld1_u32(test_vec[i].src[1]),
|
||
|
|
simde_vld1_u32(test_vec[i].src[2]), simde_vld1_u32(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4_lane_u32, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_uint32x2x4_t expected = {
|
||
|
|
{simde_vld1_u32(test_vec[i].r[0]), simde_vld1_u32(test_vec[i].r[1]),
|
||
|
|
simde_vld1_u32(test_vec[i].r[2]), simde_vld1_u32(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u32x2(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u32x2(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u32x2(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u32x2(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_uint32x2x4_t src = simde_test_arm_neon_random_u32x2x4();
|
||
|
|
simde_test_arm_neon_write_u32x2x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint32_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vu32(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint32x2x4_t r;
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4_lane_u32, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_u32x2x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_u64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint64_t src[4][8];
|
||
|
|
uint64_t buf[4];
|
||
|
|
uint64_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT64_C(15683032258095195276) },
|
||
|
|
{ UINT64_C( 7553468336959036474) },
|
||
|
|
{ UINT64_C(13125156628617814216) },
|
||
|
|
{ UINT64_C( 6195188131824092394) } },
|
||
|
|
{ UINT64_C( 4611654476681296478), UINT64_C( 0), UINT64_C( 4611686022722355200), UINT64_C( 4616194021471028225) },
|
||
|
|
{ { UINT64_C( 4611654476681296478) },
|
||
|
|
{ UINT64_C( 0) },
|
||
|
|
{ UINT64_C( 4611686022722355200) },
|
||
|
|
{ UINT64_C( 4616194021471028225) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT64_C( 2088703405382308364) },
|
||
|
|
{ UINT64_C( 1841591475801215200) },
|
||
|
|
{ UINT64_C(13963102749140759697) },
|
||
|
|
{ UINT64_C( 9663743460424204193) } },
|
||
|
|
{ UINT64_C( 4611654477341791126), UINT64_C( 0), UINT64_C( 4611686022722355200), UINT64_C( 4616194021471028225) },
|
||
|
|
{ { UINT64_C( 4611654477341791126) },
|
||
|
|
{ UINT64_C( 0) },
|
||
|
|
{ UINT64_C( 4611686022722355200) },
|
||
|
|
{ UINT64_C( 4616194021471028225) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint64x1x4_t src = {
|
||
|
|
{simde_vld1_u64(test_vec[i].src[0]), simde_vld1_u64(test_vec[i].src[1]),
|
||
|
|
simde_vld1_u64(test_vec[i].src[2]), simde_vld1_u64(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
simde_uint64x1x4_t r = simde_vld4_lane_u64(test_vec[i].buf, src, 0);
|
||
|
|
|
||
|
|
simde_uint64x1x4_t expected = {
|
||
|
|
{simde_vld1_u64(test_vec[i].r[0]), simde_vld1_u64(test_vec[i].r[1]),
|
||
|
|
simde_vld1_u64(test_vec[i].r[2]), simde_vld1_u64(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u64x1(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u64x1(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u64x1(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u64x1(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_uint64x1x4_t src = simde_test_arm_neon_random_u64x1x4();
|
||
|
|
simde_test_arm_neon_write_u64x1x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint64_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vu64(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint64x1x4_t r = simde_vld4_lane_u64(buf, src, 0);
|
||
|
|
simde_test_arm_neon_write_u64x1x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
simde_float32_t src[4][8];
|
||
|
|
simde_float32_t buf[4];
|
||
|
|
simde_float32_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT32_C( -4.66), SIMDE_FLOAT32_C( -18.00) },
|
||
|
|
{ SIMDE_FLOAT32_C( 54.81), SIMDE_FLOAT32_C( -21.07) },
|
||
|
|
{ SIMDE_FLOAT32_C( 94.81), SIMDE_FLOAT32_C( 81.11) },
|
||
|
|
{ SIMDE_FLOAT32_C( -83.82), SIMDE_FLOAT32_C( 74.22) } },
|
||
|
|
{ SIMDE_FLOAT32_C( 33.78), SIMDE_FLOAT32_C( 14.41), SIMDE_FLOAT32_C( 79.56), SIMDE_FLOAT32_C( -37.96) },
|
||
|
|
{ { SIMDE_FLOAT32_C( 33.78), SIMDE_FLOAT32_C( -18.00) },
|
||
|
|
{ SIMDE_FLOAT32_C( 14.41), SIMDE_FLOAT32_C( -21.07) },
|
||
|
|
{ SIMDE_FLOAT32_C( 79.56), SIMDE_FLOAT32_C( 81.11) },
|
||
|
|
{ SIMDE_FLOAT32_C( -37.96), SIMDE_FLOAT32_C( 74.22) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT32_C( 18.96), SIMDE_FLOAT32_C( -48.04) },
|
||
|
|
{ SIMDE_FLOAT32_C( -15.72), SIMDE_FLOAT32_C( -52.18) },
|
||
|
|
{ SIMDE_FLOAT32_C( 73.37), SIMDE_FLOAT32_C( -29.70) },
|
||
|
|
{ SIMDE_FLOAT32_C( 40.56), SIMDE_FLOAT32_C( -24.15) } },
|
||
|
|
{ SIMDE_FLOAT32_C( -10.02), SIMDE_FLOAT32_C( 72.45), SIMDE_FLOAT32_C( 50.76), SIMDE_FLOAT32_C( -87.18) },
|
||
|
|
{ { SIMDE_FLOAT32_C( 18.96), SIMDE_FLOAT32_C( -10.02) },
|
||
|
|
{ SIMDE_FLOAT32_C( -15.72), SIMDE_FLOAT32_C( 72.45) },
|
||
|
|
{ SIMDE_FLOAT32_C( 73.37), SIMDE_FLOAT32_C( 50.76) },
|
||
|
|
{ SIMDE_FLOAT32_C( 40.56), SIMDE_FLOAT32_C( -87.18) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_float32x2x4_t r;
|
||
|
|
simde_float32x2x4_t src = {
|
||
|
|
{simde_vld1_f32(test_vec[i].src[0]), simde_vld1_f32(test_vec[i].src[1]),
|
||
|
|
simde_vld1_f32(test_vec[i].src[2]), simde_vld1_f32(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4_lane_f32, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_float32x2x4_t expected = {
|
||
|
|
{simde_vld1_f32(test_vec[i].r[0]), simde_vld1_f32(test_vec[i].r[1]),
|
||
|
|
simde_vld1_f32(test_vec[i].r[2]), simde_vld1_f32(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_f32x2(r.val[0], expected.val[0], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f32x2(r.val[1], expected.val[1], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f32x2(r.val[2], expected.val[2], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f32x2(r.val[3], expected.val[3], 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_float32x2x4_t src = simde_test_arm_neon_random_f32x2x4(-100.0f, 100.0f);
|
||
|
|
simde_test_arm_neon_write_f32x2x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_float32_t buf[4];
|
||
|
|
simde_test_codegen_random_vf32(4, buf, -100.0f, 100.0f);
|
||
|
|
simde_test_codegen_write_vf32(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_float32x2x4_t r;
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4_lane_f32, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_f32x2x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4_lane_f64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
simde_float64_t src[4][8];
|
||
|
|
simde_float64_t buf[4];
|
||
|
|
simde_float64_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT64_C( 62.84) },
|
||
|
|
{ SIMDE_FLOAT64_C( -97.22) },
|
||
|
|
{ SIMDE_FLOAT64_C( 17.10) },
|
||
|
|
{ SIMDE_FLOAT64_C( 83.43) } },
|
||
|
|
{ SIMDE_FLOAT64_C( 17.28), SIMDE_FLOAT64_C( -9.03), SIMDE_FLOAT64_C( -57.78), SIMDE_FLOAT64_C( -87.37) },
|
||
|
|
{ { SIMDE_FLOAT64_C( 17.28) },
|
||
|
|
{ SIMDE_FLOAT64_C( -9.03) },
|
||
|
|
{ SIMDE_FLOAT64_C( -57.78) },
|
||
|
|
{ SIMDE_FLOAT64_C( -87.37) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT64_C( 72.97) },
|
||
|
|
{ SIMDE_FLOAT64_C( 97.03) },
|
||
|
|
{ SIMDE_FLOAT64_C( -8.44) },
|
||
|
|
{ SIMDE_FLOAT64_C( 67.78) } },
|
||
|
|
{ SIMDE_FLOAT64_C( 78.14), SIMDE_FLOAT64_C( 7.74), SIMDE_FLOAT64_C( 42.00), SIMDE_FLOAT64_C( 11.92) },
|
||
|
|
{ { SIMDE_FLOAT64_C( 78.14) },
|
||
|
|
{ SIMDE_FLOAT64_C( 7.74) },
|
||
|
|
{ SIMDE_FLOAT64_C( 42.00) },
|
||
|
|
{ SIMDE_FLOAT64_C( 11.92) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_float64x1x4_t src = {
|
||
|
|
{simde_vld1_f64(test_vec[i].src[0]), simde_vld1_f64(test_vec[i].src[1]),
|
||
|
|
simde_vld1_f64(test_vec[i].src[2]), simde_vld1_f64(test_vec[i].src[3])}};
|
||
|
|
simde_float64x1x4_t r = simde_vld4_lane_f64(test_vec[i].buf, src, 0);
|
||
|
|
|
||
|
|
simde_float64x1x4_t expected = {
|
||
|
|
{simde_vld1_f64(test_vec[i].r[0]), simde_vld1_f64(test_vec[i].r[1]),
|
||
|
|
simde_vld1_f64(test_vec[i].r[2]), simde_vld1_f64(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_f64x1(r.val[0], expected.val[0], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f64x1(r.val[1], expected.val[1], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f64x1(r.val[2], expected.val[2], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f64x1(r.val[3], expected.val[3], 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_float64x1x4_t src = simde_test_arm_neon_random_f64x1x4(-100.0, 100.0);
|
||
|
|
simde_test_arm_neon_write_f64x1x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_float64_t buf[4];
|
||
|
|
simde_test_codegen_random_vf64(4, buf, -100.0, 100.0);
|
||
|
|
simde_test_codegen_write_vf64(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_float64x1x4_t r = simde_vld4_lane_f64(buf, src, 0);
|
||
|
|
simde_test_arm_neon_write_f64x1x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_s8 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int8_t src[4][16];
|
||
|
|
int8_t buf[4];
|
||
|
|
int8_t r[4][16];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { INT8_C( 34), INT8_C( 46), -INT8_C( 43), -INT8_C( 75), -INT8_C( 44), -INT8_C( 111), -INT8_C( 121), INT8_C( 12),
|
||
|
|
INT8_C( 83), -INT8_C( 65), -INT8_C( 93), -INT8_C( 97), INT8_C( 53), -INT8_C( 107), -INT8_C( 126), -INT8_C( 2) },
|
||
|
|
{ INT8_C( 95), INT8_C( 81), -INT8_C( 56), INT8_C( 69), INT8_C( 17), INT8_C( 57), INT8_C( 22), -INT8_C( 45),
|
||
|
|
-INT8_C( 104), -INT8_C( 118), INT8_C( 72), -INT8_C( 88), INT8_C( 70), INT8_C( 27), -INT8_C( 108), INT8_C( 104) },
|
||
|
|
{ INT8_C( 73), INT8_C( 105), INT8_C( 29), INT8_C( 29), -INT8_C( 6), -INT8_C( 92), INT8_C( 41), INT8_C( 77),
|
||
|
|
INT8_C( 99), -INT8_C( 52), -INT8_C( 19), -INT8_C( 103), INT8_C( 97), INT8_C( 111), -INT8_C( 105), -INT8_C( 63) },
|
||
|
|
{ -INT8_C( 64), INT8_C( 96), INT8_C( 6), -INT8_C( 47), -INT8_C( 103), INT8_C( 28), -INT8_C( 92), INT8_C( 49),
|
||
|
|
-INT8_C( 89), -INT8_C( 20), -INT8_C( 38), -INT8_C( 19), INT8_C( 7), INT8_C( 110), INT8_C( 86), INT8_C( 80) } },
|
||
|
|
{ -INT8_C( 41), INT8_C( 115), INT8_C( 110), -INT8_C( 47) },
|
||
|
|
{ { -INT8_C( 41), INT8_C( 46), -INT8_C( 43), -INT8_C( 75), -INT8_C( 44), -INT8_C( 111), -INT8_C( 121), INT8_C( 12),
|
||
|
|
INT8_C( 83), -INT8_C( 65), -INT8_C( 93), -INT8_C( 97), INT8_C( 53), -INT8_C( 107), -INT8_C( 126), -INT8_C( 2) },
|
||
|
|
{ INT8_C( 115), INT8_C( 81), -INT8_C( 56), INT8_C( 69), INT8_C( 17), INT8_C( 57), INT8_C( 22), -INT8_C( 45),
|
||
|
|
-INT8_C( 104), -INT8_C( 118), INT8_C( 72), -INT8_C( 88), INT8_C( 70), INT8_C( 27), -INT8_C( 108), INT8_C( 104) },
|
||
|
|
{ INT8_C( 110), INT8_C( 105), INT8_C( 29), INT8_C( 29), -INT8_C( 6), -INT8_C( 92), INT8_C( 41), INT8_C( 77),
|
||
|
|
INT8_C( 99), -INT8_C( 52), -INT8_C( 19), -INT8_C( 103), INT8_C( 97), INT8_C( 111), -INT8_C( 105), -INT8_C( 63) },
|
||
|
|
{ -INT8_C( 47), INT8_C( 96), INT8_C( 6), -INT8_C( 47), -INT8_C( 103), INT8_C( 28), -INT8_C( 92), INT8_C( 49),
|
||
|
|
-INT8_C( 89), -INT8_C( 20), -INT8_C( 38), -INT8_C( 19), INT8_C( 7), INT8_C( 110), INT8_C( 86), INT8_C( 80) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 24), -INT8_C( 105), INT8_C( 31), INT8_C( 123), INT8_C( 100), INT8_C( 12), INT8_C( 20), -INT8_C( 59),
|
||
|
|
INT8_C( 123), -INT8_C( 84), -INT8_C( 122), INT8_C( 59), INT8_C( 12), -INT8_C( 115), INT8_C( 12), -INT8_C( 91) },
|
||
|
|
{ -INT8_C( 87), -INT8_C( 80), -INT8_C( 42), INT8_C( 80), -INT8_C( 99), -INT8_C( 80), INT8_C( 62), -INT8_C( 92),
|
||
|
|
INT8_C( 30), -INT8_C( 108), -INT8_C( 11), -INT8_C( 11), INT8_C( 7), INT8_C( 99), -INT8_C( 57), INT8_C( 31) },
|
||
|
|
{ -INT8_C( 6), -INT8_C( 26), -INT8_C( 101), INT8_C( 94), -INT8_C( 14), -INT8_C( 81), INT8_C( 36), INT8_C( 109),
|
||
|
|
INT8_C( 91), -INT8_C( 86), -INT8_C( 88), INT8_C( 103), INT8_C( 55), -INT8_C( 76), INT8_C( 12), -INT8_C( 31) },
|
||
|
|
{ INT8_C( 100), -INT8_C( 29), INT8_C( 49), INT8_C( 1), -INT8_C( 109), INT8_C( 111), -INT8_C( 90), -INT8_C( 78),
|
||
|
|
INT8_C( 3), -INT8_C( 101), -INT8_C( 89), INT8_C( 11), -INT8_C( 2), INT8_C( 110), INT8_C( 42), -INT8_C( 8) } },
|
||
|
|
{ INT8_C( 84), -INT8_C( 59), INT8_C( 87), INT8_C( 70) },
|
||
|
|
{ { INT8_C( 24), INT8_C( 84), INT8_C( 31), INT8_C( 123), INT8_C( 100), INT8_C( 12), INT8_C( 20), -INT8_C( 59),
|
||
|
|
INT8_C( 123), -INT8_C( 84), -INT8_C( 122), INT8_C( 59), INT8_C( 12), -INT8_C( 115), INT8_C( 12), -INT8_C( 91) },
|
||
|
|
{ -INT8_C( 87), -INT8_C( 59), -INT8_C( 42), INT8_C( 80), -INT8_C( 99), -INT8_C( 80), INT8_C( 62), -INT8_C( 92),
|
||
|
|
INT8_C( 30), -INT8_C( 108), -INT8_C( 11), -INT8_C( 11), INT8_C( 7), INT8_C( 99), -INT8_C( 57), INT8_C( 31) },
|
||
|
|
{ -INT8_C( 6), INT8_C( 87), -INT8_C( 101), INT8_C( 94), -INT8_C( 14), -INT8_C( 81), INT8_C( 36), INT8_C( 109),
|
||
|
|
INT8_C( 91), -INT8_C( 86), -INT8_C( 88), INT8_C( 103), INT8_C( 55), -INT8_C( 76), INT8_C( 12), -INT8_C( 31) },
|
||
|
|
{ INT8_C( 100), INT8_C( 70), INT8_C( 49), INT8_C( 1), -INT8_C( 109), INT8_C( 111), -INT8_C( 90), -INT8_C( 78),
|
||
|
|
INT8_C( 3), -INT8_C( 101), -INT8_C( 89), INT8_C( 11), -INT8_C( 2), INT8_C( 110), INT8_C( 42), -INT8_C( 8) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 117), INT8_C( 123), -INT8_C( 77), -INT8_C( 48), INT8_C( 37), INT8_C( 91), INT8_C( 56), INT8_C( 93),
|
||
|
|
INT8_C( 15), INT8_C( 68), INT8_C( 62), INT8_C( 116), INT8_C( 39), INT8_C( 111), INT8_C( 117), -INT8_C( 69) },
|
||
|
|
{ -INT8_C( 33), INT8_C( 27), INT8_C( 109), -INT8_C( 30), -INT8_C( 74), INT8_C( 20), -INT8_C( 19), -INT8_C( 76),
|
||
|
|
-INT8_C( 125), INT8_C( 24), -INT8_C( 83), -INT8_C( 41), -INT8_C( 35), INT8_C( 4), INT8_C( 30), INT8_C( 82) },
|
||
|
|
{ INT8_MAX, -INT8_C( 47), INT8_C( 35), -INT8_C( 92), INT8_C( 45), INT8_C( 91), INT8_C( 1), INT8_C( 60),
|
||
|
|
-INT8_C( 97), INT8_C( 63), -INT8_C( 80), -INT8_C( 57), -INT8_C( 81), INT8_C( 38), -INT8_C( 126), -INT8_C( 114) },
|
||
|
|
{ INT8_C( 65), -INT8_C( 17), INT8_C( 112), -INT8_C( 8), INT8_C( 3), INT8_C( 94), -INT8_C( 84), -INT8_C( 122),
|
||
|
|
INT8_C( 118), INT8_C( 89), INT8_C( 94), INT8_C( 83), INT8_C( 93), INT8_C( 124), -INT8_C( 90), -INT8_C( 36) } },
|
||
|
|
{ INT8_C( 77), -INT8_C( 55), -INT8_C( 127), INT8_C( 122) },
|
||
|
|
{ { INT8_C( 117), INT8_C( 123), INT8_C( 77), -INT8_C( 48), INT8_C( 37), INT8_C( 91), INT8_C( 56), INT8_C( 93),
|
||
|
|
INT8_C( 15), INT8_C( 68), INT8_C( 62), INT8_C( 116), INT8_C( 39), INT8_C( 111), INT8_C( 117), -INT8_C( 69) },
|
||
|
|
{ -INT8_C( 33), INT8_C( 27), -INT8_C( 55), -INT8_C( 30), -INT8_C( 74), INT8_C( 20), -INT8_C( 19), -INT8_C( 76),
|
||
|
|
-INT8_C( 125), INT8_C( 24), -INT8_C( 83), -INT8_C( 41), -INT8_C( 35), INT8_C( 4), INT8_C( 30), INT8_C( 82) },
|
||
|
|
{ INT8_MAX, -INT8_C( 47), -INT8_C( 127), -INT8_C( 92), INT8_C( 45), INT8_C( 91), INT8_C( 1), INT8_C( 60),
|
||
|
|
-INT8_C( 97), INT8_C( 63), -INT8_C( 80), -INT8_C( 57), -INT8_C( 81), INT8_C( 38), -INT8_C( 126), -INT8_C( 114) },
|
||
|
|
{ INT8_C( 65), -INT8_C( 17), INT8_C( 122), -INT8_C( 8), INT8_C( 3), INT8_C( 94), -INT8_C( 84), -INT8_C( 122),
|
||
|
|
INT8_C( 118), INT8_C( 89), INT8_C( 94), INT8_C( 83), INT8_C( 93), INT8_C( 124), -INT8_C( 90), -INT8_C( 36) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 36), -INT8_C( 126), -INT8_C( 73), -INT8_C( 61), -INT8_C( 62), INT8_C( 103), -INT8_C( 118), INT8_C( 113),
|
||
|
|
-INT8_C( 115), INT8_C( 12), -INT8_C( 1), -INT8_C( 49), -INT8_C( 5), INT8_C( 111), -INT8_C( 57), -INT8_C( 1) },
|
||
|
|
{ -INT8_C( 51), INT8_C( 115), -INT8_C( 123), INT8_C( 67), -INT8_C( 51), -INT8_C( 29), -INT8_C( 105), INT8_C( 42),
|
||
|
|
INT8_C( 95), INT8_C( 61), INT8_C( 7), -INT8_C( 83), INT8_C( 6), -INT8_C( 120), INT8_C( 39), INT8_C( 42) },
|
||
|
|
{ INT8_C( 10), -INT8_C( 34), -INT8_C( 19), -INT8_C( 52), INT8_C( 70), INT8_C( 120), INT8_C( 61), -INT8_C( 45),
|
||
|
|
-INT8_C( 124), INT8_C( 60), -INT8_C( 94), INT8_MIN, -INT8_C( 84), INT8_C( 105), INT8_MAX, INT8_C( 121) },
|
||
|
|
{ -INT8_C( 35), INT8_C( 4), -INT8_C( 67), -INT8_C( 86), -INT8_C( 24), INT8_C( 84), -INT8_C( 44), INT8_C( 71),
|
||
|
|
-INT8_C( 111), -INT8_C( 37), -INT8_C( 12), -INT8_C( 105), INT8_C( 99), INT8_C( 28), -INT8_C( 63), INT8_C( 110) } },
|
||
|
|
{ -INT8_C( 6), -INT8_C( 82), INT8_C( 58), INT8_C( 64) },
|
||
|
|
{ { INT8_C( 36), -INT8_C( 126), -INT8_C( 73), -INT8_C( 6), -INT8_C( 62), INT8_C( 103), -INT8_C( 118), INT8_C( 113),
|
||
|
|
-INT8_C( 115), INT8_C( 12), -INT8_C( 1), -INT8_C( 49), -INT8_C( 5), INT8_C( 111), -INT8_C( 57), -INT8_C( 1) },
|
||
|
|
{ -INT8_C( 51), INT8_C( 115), -INT8_C( 123), -INT8_C( 82), -INT8_C( 51), -INT8_C( 29), -INT8_C( 105), INT8_C( 42),
|
||
|
|
INT8_C( 95), INT8_C( 61), INT8_C( 7), -INT8_C( 83), INT8_C( 6), -INT8_C( 120), INT8_C( 39), INT8_C( 42) },
|
||
|
|
{ INT8_C( 10), -INT8_C( 34), -INT8_C( 19), INT8_C( 58), INT8_C( 70), INT8_C( 120), INT8_C( 61), -INT8_C( 45),
|
||
|
|
-INT8_C( 124), INT8_C( 60), -INT8_C( 94), INT8_MIN, -INT8_C( 84), INT8_C( 105), INT8_MAX, INT8_C( 121) },
|
||
|
|
{ -INT8_C( 35), INT8_C( 4), -INT8_C( 67), INT8_C( 64), -INT8_C( 24), INT8_C( 84), -INT8_C( 44), INT8_C( 71),
|
||
|
|
-INT8_C( 111), -INT8_C( 37), -INT8_C( 12), -INT8_C( 105), INT8_C( 99), INT8_C( 28), -INT8_C( 63), INT8_C( 110) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 38), INT8_C( 120), INT8_C( 20), -INT8_C( 85), -INT8_C( 76), -INT8_C( 74), INT8_C( 43), INT8_C( 96),
|
||
|
|
INT8_C( 32), -INT8_C( 86), -INT8_C( 38), -INT8_C( 3), -INT8_C( 82), -INT8_C( 105), -INT8_C( 89), -INT8_C( 106) },
|
||
|
|
{ -INT8_C( 21), INT8_C( 123), -INT8_C( 34), INT8_C( 124), INT8_C( 87), -INT8_C( 46), INT8_C( 19), -INT8_C( 70),
|
||
|
|
-INT8_C( 18), -INT8_C( 44), INT8_C( 40), -INT8_C( 23), -INT8_C( 126), INT8_C( 99), INT8_C( 41), -INT8_C( 87) },
|
||
|
|
{ -INT8_C( 37), INT8_C( 61), INT8_C( 84), -INT8_C( 113), -INT8_C( 12), INT8_MAX, -INT8_C( 16), INT8_C( 20),
|
||
|
|
INT8_C( 41), -INT8_C( 54), INT8_C( 17), -INT8_C( 41), INT8_C( 97), -INT8_C( 72), INT8_C( 110), INT8_C( 76) },
|
||
|
|
{ INT8_C( 51), INT8_C( 76), -INT8_C( 56), -INT8_C( 118), INT8_C( 30), -INT8_C( 37), INT8_C( 69), INT8_C( 13),
|
||
|
|
-INT8_C( 81), INT8_C( 109), -INT8_C( 10), INT8_C( 49), -INT8_C( 48), INT8_C( 31), -INT8_C( 38), -INT8_C( 85) } },
|
||
|
|
{ INT8_C( 93), INT8_C( 46), INT8_C( 59), INT8_C( 81) },
|
||
|
|
{ { INT8_C( 38), INT8_C( 120), INT8_C( 20), -INT8_C( 85), INT8_C( 93), -INT8_C( 74), INT8_C( 43), INT8_C( 96),
|
||
|
|
INT8_C( 32), -INT8_C( 86), -INT8_C( 38), -INT8_C( 3), -INT8_C( 82), -INT8_C( 105), -INT8_C( 89), -INT8_C( 106) },
|
||
|
|
{ -INT8_C( 21), INT8_C( 123), -INT8_C( 34), INT8_C( 124), INT8_C( 46), -INT8_C( 46), INT8_C( 19), -INT8_C( 70),
|
||
|
|
-INT8_C( 18), -INT8_C( 44), INT8_C( 40), -INT8_C( 23), -INT8_C( 126), INT8_C( 99), INT8_C( 41), -INT8_C( 87) },
|
||
|
|
{ -INT8_C( 37), INT8_C( 61), INT8_C( 84), -INT8_C( 113), INT8_C( 59), INT8_MAX, -INT8_C( 16), INT8_C( 20),
|
||
|
|
INT8_C( 41), -INT8_C( 54), INT8_C( 17), -INT8_C( 41), INT8_C( 97), -INT8_C( 72), INT8_C( 110), INT8_C( 76) },
|
||
|
|
{ INT8_C( 51), INT8_C( 76), -INT8_C( 56), -INT8_C( 118), INT8_C( 81), -INT8_C( 37), INT8_C( 69), INT8_C( 13),
|
||
|
|
-INT8_C( 81), INT8_C( 109), -INT8_C( 10), INT8_C( 49), -INT8_C( 48), INT8_C( 31), -INT8_C( 38), -INT8_C( 85) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT8_C( 83), INT8_C( 43), INT8_C( 101), -INT8_C( 42), -INT8_C( 11), INT8_C( 118), -INT8_C( 82), INT8_C( 86),
|
||
|
|
INT8_C( 46), INT8_C( 28), -INT8_C( 94), INT8_C( 97), INT8_C( 104), INT8_C( 106), -INT8_C( 20), -INT8_C( 122) },
|
||
|
|
{ INT8_C( 69), INT8_C( 49), -INT8_C( 109), -INT8_C( 12), -INT8_C( 98), -INT8_C( 119), INT8_C( 37), INT8_C( 111),
|
||
|
|
-INT8_C( 87), INT8_C( 0), INT8_C( 26), INT8_C( 6), INT8_C( 46), INT8_C( 85), INT8_C( 87), -INT8_C( 36) },
|
||
|
|
{ INT8_MIN, -INT8_C( 68), -INT8_C( 78), INT8_C( 117), INT8_C( 50), INT8_C( 96), -INT8_C( 53), INT8_C( 96),
|
||
|
|
INT8_C( 124), INT8_C( 109), -INT8_C( 63), -INT8_C( 28), -INT8_C( 41), -INT8_C( 83), INT8_C( 107), INT8_C( 28) },
|
||
|
|
{ -INT8_C( 34), -INT8_C( 2), INT8_C( 16), INT8_C( 125), -INT8_C( 120), INT8_C( 54), -INT8_C( 20), INT8_C( 49),
|
||
|
|
INT8_C( 54), INT8_C( 6), INT8_C( 55), INT8_C( 100), INT8_C( 92), -INT8_C( 114), INT8_C( 64), -INT8_C( 36) } },
|
||
|
|
{ INT8_C( 74), -INT8_C( 13), INT8_C( 82), INT8_C( 124) },
|
||
|
|
{ { -INT8_C( 83), INT8_C( 43), INT8_C( 101), -INT8_C( 42), -INT8_C( 11), INT8_C( 74), -INT8_C( 82), INT8_C( 86),
|
||
|
|
INT8_C( 46), INT8_C( 28), -INT8_C( 94), INT8_C( 97), INT8_C( 104), INT8_C( 106), -INT8_C( 20), -INT8_C( 122) },
|
||
|
|
{ INT8_C( 69), INT8_C( 49), -INT8_C( 109), -INT8_C( 12), -INT8_C( 98), -INT8_C( 13), INT8_C( 37), INT8_C( 111),
|
||
|
|
-INT8_C( 87), INT8_C( 0), INT8_C( 26), INT8_C( 6), INT8_C( 46), INT8_C( 85), INT8_C( 87), -INT8_C( 36) },
|
||
|
|
{ INT8_MIN, -INT8_C( 68), -INT8_C( 78), INT8_C( 117), INT8_C( 50), INT8_C( 82), -INT8_C( 53), INT8_C( 96),
|
||
|
|
INT8_C( 124), INT8_C( 109), -INT8_C( 63), -INT8_C( 28), -INT8_C( 41), -INT8_C( 83), INT8_C( 107), INT8_C( 28) },
|
||
|
|
{ -INT8_C( 34), -INT8_C( 2), INT8_C( 16), INT8_C( 125), -INT8_C( 120), INT8_C( 124), -INT8_C( 20), INT8_C( 49),
|
||
|
|
INT8_C( 54), INT8_C( 6), INT8_C( 55), INT8_C( 100), INT8_C( 92), -INT8_C( 114), INT8_C( 64), -INT8_C( 36) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT8_C( 83), INT8_C( 29), -INT8_C( 36), -INT8_C( 48), -INT8_C( 117), -INT8_C( 99), -INT8_C( 76), INT8_C( 98),
|
||
|
|
INT8_C( 75), INT8_C( 31), INT8_MAX, INT8_C( 41), INT8_C( 30), -INT8_C( 113), -INT8_C( 90), -INT8_C( 90) },
|
||
|
|
{ -INT8_C( 59), -INT8_C( 110), -INT8_C( 41), -INT8_C( 5), -INT8_C( 103), INT8_C( 14), INT8_C( 96), -INT8_C( 11),
|
||
|
|
-INT8_C( 100), -INT8_C( 96), -INT8_C( 47), -INT8_C( 26), -INT8_C( 109), INT8_C( 35), INT8_C( 98), -INT8_C( 25) },
|
||
|
|
{ INT8_C( 65), INT8_C( 62), -INT8_C( 73), -INT8_C( 52), -INT8_C( 37), INT8_C( 107), INT8_C( 46), INT8_C( 38),
|
||
|
|
-INT8_C( 117), -INT8_C( 83), INT8_C( 80), -INT8_C( 87), INT8_C( 61), -INT8_C( 10), INT8_C( 79), INT8_C( 2) },
|
||
|
|
{ -INT8_C( 119), INT8_C( 38), -INT8_C( 2), INT8_C( 34), INT8_C( 52), INT8_C( 94), INT8_C( 23), -INT8_C( 48),
|
||
|
|
-INT8_C( 2), -INT8_C( 24), -INT8_C( 74), -INT8_C( 110), INT8_C( 12), INT8_C( 24), INT8_C( 121), INT8_C( 77) } },
|
||
|
|
{ INT8_C( 86), INT8_C( 48), INT8_C( 25), INT8_C( 49) },
|
||
|
|
{ { INT8_C( 83), INT8_C( 29), -INT8_C( 36), -INT8_C( 48), -INT8_C( 117), -INT8_C( 99), INT8_C( 86), INT8_C( 98),
|
||
|
|
INT8_C( 75), INT8_C( 31), INT8_MAX, INT8_C( 41), INT8_C( 30), -INT8_C( 113), -INT8_C( 90), -INT8_C( 90) },
|
||
|
|
{ -INT8_C( 59), -INT8_C( 110), -INT8_C( 41), -INT8_C( 5), -INT8_C( 103), INT8_C( 14), INT8_C( 48), -INT8_C( 11),
|
||
|
|
-INT8_C( 100), -INT8_C( 96), -INT8_C( 47), -INT8_C( 26), -INT8_C( 109), INT8_C( 35), INT8_C( 98), -INT8_C( 25) },
|
||
|
|
{ INT8_C( 65), INT8_C( 62), -INT8_C( 73), -INT8_C( 52), -INT8_C( 37), INT8_C( 107), INT8_C( 25), INT8_C( 38),
|
||
|
|
-INT8_C( 117), -INT8_C( 83), INT8_C( 80), -INT8_C( 87), INT8_C( 61), -INT8_C( 10), INT8_C( 79), INT8_C( 2) },
|
||
|
|
{ -INT8_C( 119), INT8_C( 38), -INT8_C( 2), INT8_C( 34), INT8_C( 52), INT8_C( 94), INT8_C( 49), -INT8_C( 48),
|
||
|
|
-INT8_C( 2), -INT8_C( 24), -INT8_C( 74), -INT8_C( 110), INT8_C( 12), INT8_C( 24), INT8_C( 121), INT8_C( 77) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT8_C( 101), INT8_C( 71), INT8_C( 88), INT8_C( 38), -INT8_C( 11), -INT8_C( 88), -INT8_C( 49), INT8_C( 50),
|
||
|
|
-INT8_C( 98), INT8_C( 30), INT8_C( 52), INT8_C( 39), INT8_C( 68), INT8_C( 50), INT8_C( 73), INT8_C( 120) },
|
||
|
|
{ -INT8_C( 112), INT8_C( 96), INT8_C( 72), -INT8_C( 113), INT8_C( 73), -INT8_C( 2), INT8_C( 33), INT8_C( 85),
|
||
|
|
INT8_C( 22), -INT8_C( 102), -INT8_C( 94), INT8_C( 108), -INT8_C( 54), -INT8_C( 69), -INT8_C( 98), INT8_C( 101) },
|
||
|
|
{ INT8_C( 2), -INT8_C( 10), -INT8_C( 116), -INT8_C( 9), -INT8_C( 98), INT8_C( 91), INT8_C( 41), INT8_C( 60),
|
||
|
|
INT8_C( 122), INT8_C( 94), INT8_C( 100), -INT8_C( 66), -INT8_C( 112), -INT8_C( 83), INT8_C( 55), INT8_C( 33) },
|
||
|
|
{ INT8_C( 14), INT8_MAX, -INT8_C( 80), INT8_C( 87), INT8_C( 126), -INT8_C( 47), -INT8_C( 84), -INT8_C( 108),
|
||
|
|
INT8_C( 107), INT8_C( 78), INT8_C( 1), INT8_C( 53), INT8_C( 9), -INT8_C( 97), -INT8_C( 102), INT8_C( 11) } },
|
||
|
|
{ -INT8_C( 107), INT8_C( 38), INT8_C( 3), INT8_C( 51) },
|
||
|
|
{ { -INT8_C( 101), INT8_C( 71), INT8_C( 88), INT8_C( 38), -INT8_C( 11), -INT8_C( 88), -INT8_C( 49), -INT8_C( 107),
|
||
|
|
-INT8_C( 98), INT8_C( 30), INT8_C( 52), INT8_C( 39), INT8_C( 68), INT8_C( 50), INT8_C( 73), INT8_C( 120) },
|
||
|
|
{ -INT8_C( 112), INT8_C( 96), INT8_C( 72), -INT8_C( 113), INT8_C( 73), -INT8_C( 2), INT8_C( 33), INT8_C( 38),
|
||
|
|
INT8_C( 22), -INT8_C( 102), -INT8_C( 94), INT8_C( 108), -INT8_C( 54), -INT8_C( 69), -INT8_C( 98), INT8_C( 101) },
|
||
|
|
{ INT8_C( 2), -INT8_C( 10), -INT8_C( 116), -INT8_C( 9), -INT8_C( 98), INT8_C( 91), INT8_C( 41), INT8_C( 3),
|
||
|
|
INT8_C( 122), INT8_C( 94), INT8_C( 100), -INT8_C( 66), -INT8_C( 112), -INT8_C( 83), INT8_C( 55), INT8_C( 33) },
|
||
|
|
{ INT8_C( 14), INT8_MAX, -INT8_C( 80), INT8_C( 87), INT8_C( 126), -INT8_C( 47), -INT8_C( 84), INT8_C( 51),
|
||
|
|
INT8_C( 107), INT8_C( 78), INT8_C( 1), INT8_C( 53), INT8_C( 9), -INT8_C( 97), -INT8_C( 102), INT8_C( 11) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int8x16x4_t r;
|
||
|
|
simde_int8x16x4_t src = {
|
||
|
|
{simde_vld1q_s8(test_vec[i].src[0]), simde_vld1q_s8(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_s8(test_vec[i].src[2]), simde_vld1q_s8(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4q_lane_s8, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_int8x16x4_t expected = {
|
||
|
|
{simde_vld1q_s8(test_vec[i].r[0]), simde_vld1q_s8(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_s8(test_vec[i].r[2]), simde_vld1q_s8(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i8x16(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i8x16(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i8x16(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i8x16(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 8 ; i++) {
|
||
|
|
simde_int8x16x4_t src = simde_test_arm_neon_random_i8x16x4();
|
||
|
|
simde_test_arm_neon_write_i8x16x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int8_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi8(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int8x16x4_t r;
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4q_lane_s8, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_i8x16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int16_t src[4][8];
|
||
|
|
int16_t buf[4];
|
||
|
|
int16_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { -INT16_C( 15691), -INT16_C( 12452), INT16_C( 17302), INT16_C( 29639), INT16_C( 22774), -INT16_C( 21390), -INT16_C( 25435), INT16_C( 11620) },
|
||
|
|
{ INT16_C( 4496), -INT16_C( 29400), INT16_C( 26862), INT16_C( 1624), INT16_C( 29133), -INT16_C( 6847), -INT16_C( 32260), -INT16_C( 20170) },
|
||
|
|
{ -INT16_C( 28093), -INT16_C( 9856), INT16_C( 18646), -INT16_C( 13236), -INT16_C( 16736), INT16_C( 17785), -INT16_C( 8870), -INT16_C( 5518) },
|
||
|
|
{ -INT16_C( 25874), -INT16_C( 9097), -INT16_C( 12286), -INT16_C( 12318), INT16_C( 9281), INT16_C( 15797), -INT16_C( 5211), -INT16_C( 5905) } },
|
||
|
|
{ INT16_C( 28542), INT16_C( 21697), -INT16_C( 24823), INT16_C( 2970) },
|
||
|
|
{ { INT16_C( 28542), -INT16_C( 12452), INT16_C( 17302), INT16_C( 29639), INT16_C( 22774), -INT16_C( 21390), -INT16_C( 25435), INT16_C( 11620) },
|
||
|
|
{ INT16_C( 21697), -INT16_C( 29400), INT16_C( 26862), INT16_C( 1624), INT16_C( 29133), -INT16_C( 6847), -INT16_C( 32260), -INT16_C( 20170) },
|
||
|
|
{ -INT16_C( 24823), -INT16_C( 9856), INT16_C( 18646), -INT16_C( 13236), -INT16_C( 16736), INT16_C( 17785), -INT16_C( 8870), -INT16_C( 5518) },
|
||
|
|
{ INT16_C( 2970), -INT16_C( 9097), -INT16_C( 12286), -INT16_C( 12318), INT16_C( 9281), INT16_C( 15797), -INT16_C( 5211), -INT16_C( 5905) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT16_C( 3511), INT16_C( 22304), -INT16_C( 26164), INT16_C( 9885), INT16_C( 3958), INT16_C( 25617), -INT16_C( 30550), -INT16_C( 21440) },
|
||
|
|
{ INT16_C( 9048), -INT16_C( 25988), INT16_C( 12615), -INT16_C( 4905), -INT16_C( 14820), -INT16_C( 25900), -INT16_C( 27338), -INT16_C( 4626) },
|
||
|
|
{ INT16_C( 4002), INT16_C( 28229), -INT16_C( 7512), INT16_C( 8085), -INT16_C( 22799), -INT16_C( 25725), -INT16_C( 15314), -INT16_C( 30904) },
|
||
|
|
{ -INT16_C( 15129), INT16_C( 11809), -INT16_C( 1803), INT16_C( 4378), -INT16_C( 4417), -INT16_C( 2644), -INT16_C( 25981), INT16_C( 9698) } },
|
||
|
|
{ INT16_C( 10153), INT16_C( 21140), -INT16_C( 24823), INT16_C( 2970) },
|
||
|
|
{ { INT16_C( 3511), INT16_C( 10153), -INT16_C( 26164), INT16_C( 9885), INT16_C( 3958), INT16_C( 25617), -INT16_C( 30550), -INT16_C( 21440) },
|
||
|
|
{ INT16_C( 9048), INT16_C( 21140), INT16_C( 12615), -INT16_C( 4905), -INT16_C( 14820), -INT16_C( 25900), -INT16_C( 27338), -INT16_C( 4626) },
|
||
|
|
{ INT16_C( 4002), -INT16_C( 24823), -INT16_C( 7512), INT16_C( 8085), -INT16_C( 22799), -INT16_C( 25725), -INT16_C( 15314), -INT16_C( 30904) },
|
||
|
|
{ -INT16_C( 15129), INT16_C( 2970), -INT16_C( 1803), INT16_C( 4378), -INT16_C( 4417), -INT16_C( 2644), -INT16_C( 25981), INT16_C( 9698) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT16_C( 10505), -INT16_C( 1167), -INT16_C( 2865), -INT16_C( 618), -INT16_C( 8520), -INT16_C( 24700), -INT16_C( 23134), -INT16_C( 26675) },
|
||
|
|
{ -INT16_C( 6242), INT16_C( 23977), INT16_C( 21973), INT16_C( 22610), INT16_C( 13551), -INT16_C( 26242), INT16_C( 4700), INT16_C( 26091) },
|
||
|
|
{ INT16_C( 23611), INT16_C( 2656), -INT16_C( 2224), INT16_C( 2311), -INT16_C( 29483), INT16_C( 30888), INT16_C( 30257), -INT16_C( 12529) },
|
||
|
|
{ -INT16_C( 18339), INT16_C( 13100), INT16_C( 32269), -INT16_C( 629), INT16_C( 2483), INT16_C( 3990), -INT16_C( 32485), INT16_C( 22132) } },
|
||
|
|
{ -INT16_C( 10787), INT16_C( 11616), -INT16_C( 24823), INT16_C( 2970) },
|
||
|
|
{ { INT16_C( 10505), -INT16_C( 1167), -INT16_C( 10787), -INT16_C( 618), -INT16_C( 8520), -INT16_C( 24700), -INT16_C( 23134), -INT16_C( 26675) },
|
||
|
|
{ -INT16_C( 6242), INT16_C( 23977), INT16_C( 11616), INT16_C( 22610), INT16_C( 13551), -INT16_C( 26242), INT16_C( 4700), INT16_C( 26091) },
|
||
|
|
{ INT16_C( 23611), INT16_C( 2656), -INT16_C( 24823), INT16_C( 2311), -INT16_C( 29483), INT16_C( 30888), INT16_C( 30257), -INT16_C( 12529) },
|
||
|
|
{ -INT16_C( 18339), INT16_C( 13100), INT16_C( 2970), -INT16_C( 629), INT16_C( 2483), INT16_C( 3990), -INT16_C( 32485), INT16_C( 22132) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { INT16_C( 26828), -INT16_C( 24266), -INT16_C( 8204), INT16_C( 9497), INT16_C( 10581), -INT16_C( 19723), INT16_C( 8673), -INT16_C( 4123) },
|
||
|
|
{ INT16_C( 29088), INT16_C( 21484), -INT16_C( 32134), -INT16_C( 27038), -INT16_C( 10749), -INT16_C( 7956), INT16_C( 19883), INT16_C( 30477) },
|
||
|
|
{ INT16_C( 17589), -INT16_C( 22247), INT16_C( 12835), INT16_C( 30926), -INT16_C( 15525), INT16_C( 15658), INT16_C( 4325), -INT16_C( 31444) },
|
||
|
|
{ INT16_C( 6273), -INT16_C( 1064), INT16_C( 15002), -INT16_C( 25199), INT16_C( 32272), -INT16_C( 17283), -INT16_C( 30005), -INT16_C( 32717) } },
|
||
|
|
{ INT16_C( 19662), -INT16_C( 3799), -INT16_C( 24823), INT16_C( 2970) },
|
||
|
|
{ { INT16_C( 26828), -INT16_C( 24266), -INT16_C( 8204), INT16_C( 19662), INT16_C( 10581), -INT16_C( 19723), INT16_C( 8673), -INT16_C( 4123) },
|
||
|
|
{ INT16_C( 29088), INT16_C( 21484), -INT16_C( 32134), -INT16_C( 3799), -INT16_C( 10749), -INT16_C( 7956), INT16_C( 19883), INT16_C( 30477) },
|
||
|
|
{ INT16_C( 17589), -INT16_C( 22247), INT16_C( 12835), -INT16_C( 24823), -INT16_C( 15525), INT16_C( 15658), INT16_C( 4325), -INT16_C( 31444) },
|
||
|
|
{ INT16_C( 6273), -INT16_C( 1064), INT16_C( 15002), INT16_C( 2970), INT16_C( 32272), -INT16_C( 17283), -INT16_C( 30005), -INT16_C( 32717) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int16x8x4_t r;
|
||
|
|
simde_int16x8x4_t src = {
|
||
|
|
{simde_vld1q_s16(test_vec[i].src[0]), simde_vld1q_s16(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_s16(test_vec[i].src[2]), simde_vld1q_s16(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4q_lane_s16, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_int16x8x4_t expected = {
|
||
|
|
{simde_vld1q_s16(test_vec[i].r[0]), simde_vld1q_s16(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_s16(test_vec[i].r[2]), simde_vld1q_s16(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i16x8(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i16x8(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i16x8(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i16x8(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 4 ; i++) {
|
||
|
|
simde_int16x8x4_t src = simde_test_arm_neon_random_i16x8x4();
|
||
|
|
simde_test_arm_neon_write_i16x8x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int16_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi16(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int16x8x4_t r;
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4q_lane_s16, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_i16x8x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int32_t src[4][8];
|
||
|
|
int32_t buf[4];
|
||
|
|
int32_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { -INT32_C( 1996279874), INT32_C( 1240898987), -INT32_C( 590337144), INT32_C( 1989965766) },
|
||
|
|
{ INT32_C( 1598264903), INT32_C( 475947013), -INT32_C( 1533578857), INT32_C( 116830792) },
|
||
|
|
{ -INT32_C( 1919878430), INT32_C( 534152855), INT32_C( 2012980913), INT32_C( 1710135325) },
|
||
|
|
{ INT32_C( 868495662), INT32_C( 693052049), -INT32_C( 590485868), INT32_C( 2061681560) } },
|
||
|
|
{ INT32_C( 1426551485), INT32_C( 194656922), -INT32_C( 1132626416), -INT32_C( 2144105781) },
|
||
|
|
{ { INT32_C( 1426551485), INT32_C( 1240898987), -INT32_C( 590337144), INT32_C( 1989965766) },
|
||
|
|
{ INT32_C( 194656922), INT32_C( 475947013), -INT32_C( 1533578857), INT32_C( 116830792) },
|
||
|
|
{ -INT32_C( 1132626416), INT32_C( 534152855), INT32_C( 2012980913), INT32_C( 1710135325) },
|
||
|
|
{ -INT32_C( 2144105781), INT32_C( 693052049), -INT32_C( 590485868), INT32_C( 2061681560) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT32_C( 1451958536), -INT32_C( 1574866812), INT32_C( 906432264), -INT32_C( 781595840) },
|
||
|
|
{ -INT32_C( 2114275091), INT32_C( 912115614), INT32_C( 1219575947), -INT32_C( 1415726926) },
|
||
|
|
{ INT32_C( 458494614), -INT32_C( 1967295102), -INT32_C( 993999740), INT32_C( 2090215823) },
|
||
|
|
{ INT32_C( 2147389665), -INT32_C( 474653864), INT32_C( 1311467163), -INT32_C( 1241921249) } },
|
||
|
|
{ INT32_C( 1573932507), INT32_C( 194656922), -INT32_C( 1132626416), -INT32_C( 2144105781) },
|
||
|
|
{ { -INT32_C( 1451958536), INT32_C( 1573932507), INT32_C( 906432264), -INT32_C( 781595840) },
|
||
|
|
{ -INT32_C( 2114275091), INT32_C( 194656922), INT32_C( 1219575947), -INT32_C( 1415726926) },
|
||
|
|
{ INT32_C( 458494614), -INT32_C( 1132626416), -INT32_C( 993999740), INT32_C( 2090215823) },
|
||
|
|
{ INT32_C( 2147389665), -INT32_C( 2144105781), INT32_C( 1311467163), -INT32_C( 1241921249) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int32x4x4_t r;
|
||
|
|
simde_int32x4x4_t src = {
|
||
|
|
{simde_vld1q_s32(test_vec[i].src[0]), simde_vld1q_s32(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_s32(test_vec[i].src[2]), simde_vld1q_s32(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4q_lane_s32, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_int32x4x4_t expected = {
|
||
|
|
{simde_vld1q_s32(test_vec[i].r[0]), simde_vld1q_s32(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_s32(test_vec[i].r[2]), simde_vld1q_s32(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i32x4(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i32x4(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i32x4(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i32x4(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_int32x4x4_t src = simde_test_arm_neon_random_i32x4x4();
|
||
|
|
simde_test_arm_neon_write_i32x4x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int32_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi32(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int32x4x4_t r;
|
||
|
|
SIMDE_CONSTIFY_2_(simde_vld4q_lane_s32, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_i32x4x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_s64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int64_t src[4][8];
|
||
|
|
int64_t buf[4];
|
||
|
|
int64_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { INT64_C( 1201193502836202517), -INT64_C( 7076678200476845845) },
|
||
|
|
{ -INT64_C( 449206202697917849), -INT64_C( 2746241653780591351) },
|
||
|
|
{ INT64_C( 6750877642029069183), -INT64_C( 9155309959305198680) },
|
||
|
|
{ INT64_C( 6771432880358963880), -INT64_C( 2278715439448260925) } },
|
||
|
|
{ -INT64_C( 4864593411992148909), INT64_C( 8977408604667692164), -INT64_C( 9208864206412148511), -INT64_C( 5334011147351005541) },
|
||
|
|
{ { -INT64_C( 4864593411992148909), -INT64_C( 7076678200476845845) },
|
||
|
|
{ INT64_C( 8977408604667692164), -INT64_C( 2746241653780591351) },
|
||
|
|
{ -INT64_C( 9208864206412148511), -INT64_C( 9155309959305198680) },
|
||
|
|
{ -INT64_C( 5334011147351005541), -INT64_C( 2278715439448260925) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { -INT64_C( 3778757915873955948), INT64_C( 1052574282184163573) },
|
||
|
|
{ -INT64_C( 882731287248661644), INT64_C( 6368183076506574664) },
|
||
|
|
{ -INT64_C( 6989265932735183997), INT64_C( 4570547564838669732) },
|
||
|
|
{ INT64_C( 716414022537697643), -INT64_C( 7173948225573567147) } },
|
||
|
|
{ -INT64_C( 4864593414453066360), INT64_C( 8977408604667692164), -INT64_C( 9208864206412148511), -INT64_C( 5334011147351005541) },
|
||
|
|
{ { -INT64_C( 4864593414453066360), INT64_C( 1052574282184163573) },
|
||
|
|
{ INT64_C( 8977408604667692164), INT64_C( 6368183076506574664) },
|
||
|
|
{ -INT64_C( 9208864206412148511), INT64_C( 4570547564838669732) },
|
||
|
|
{ -INT64_C( 5334011147351005541), -INT64_C( 7173948225573567147) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_int64x2x4_t src = {
|
||
|
|
{simde_vld1q_s64(test_vec[i].src[0]), simde_vld1q_s64(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_s64(test_vec[i].src[2]), simde_vld1q_s64(test_vec[i].src[3])}};
|
||
|
|
simde_int64x2x4_t r = simde_vld4q_lane_s64(test_vec[i].buf, src, 0);
|
||
|
|
|
||
|
|
simde_int64x2x4_t expected = {
|
||
|
|
{simde_vld1q_s64(test_vec[i].r[0]), simde_vld1q_s64(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_s64(test_vec[i].r[2]), simde_vld1q_s64(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i64x2(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_i64x2(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_i64x2(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_i64x2(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_int64x2x4_t src = simde_test_arm_neon_random_i64x2x4();
|
||
|
|
simde_test_arm_neon_write_i64x2x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
int64_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vi64(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_int64x2x4_t r = simde_vld4q_lane_s64(buf, src, 0);
|
||
|
|
simde_test_arm_neon_write_i64x2x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_u8 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint8_t src[4][16];
|
||
|
|
uint8_t buf[4];
|
||
|
|
uint8_t r[4][16];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT8_C(159), UINT8_C(159), UINT8_C( 51), UINT8_C(154), UINT8_C( 93), UINT8_C(239), UINT8_C(101), UINT8_C( 91),
|
||
|
|
UINT8_C(160), UINT8_C(136), UINT8_C( 62), UINT8_C(197), UINT8_C( 36), UINT8_C( 72), UINT8_C( 13), UINT8_C(190) },
|
||
|
|
{ UINT8_C(123), UINT8_C( 44), UINT8_C( 67), UINT8_C(130), UINT8_C(173), UINT8_C( 2), UINT8_C(187), UINT8_C( 5),
|
||
|
|
UINT8_C(248), UINT8_C( 87), UINT8_C(155), UINT8_C(221), UINT8_C( 89), UINT8_C(145), UINT8_C( 0), UINT8_C(248) },
|
||
|
|
{ UINT8_C( 48), UINT8_C( 51), UINT8_C(146), UINT8_C(141), UINT8_C( 35), UINT8_C(248), UINT8_C(233), UINT8_C(195),
|
||
|
|
UINT8_C(128), UINT8_C( 39), UINT8_C(137), UINT8_C(164), UINT8_C(112), UINT8_C(150), UINT8_C( 99), UINT8_C(235) },
|
||
|
|
{ UINT8_C(194), UINT8_C(166), UINT8_C(109), UINT8_C(111), UINT8_C(168), UINT8_C( 40), UINT8_C(116), UINT8_C(161),
|
||
|
|
UINT8_C(128), UINT8_C( 16), UINT8_C(126), UINT8_C(217), UINT8_C(161), UINT8_C(127), UINT8_C(209), UINT8_C(209) } },
|
||
|
|
{ UINT8_C(178), UINT8_C(100), UINT8_C( 94), UINT8_C(213) },
|
||
|
|
{ { UINT8_C(178), UINT8_C(159), UINT8_C( 51), UINT8_C(154), UINT8_C( 93), UINT8_C(239), UINT8_C(101), UINT8_C( 91),
|
||
|
|
UINT8_C(160), UINT8_C(136), UINT8_C( 62), UINT8_C(197), UINT8_C( 36), UINT8_C( 72), UINT8_C( 13), UINT8_C(190) },
|
||
|
|
{ UINT8_C(100), UINT8_C( 44), UINT8_C( 67), UINT8_C(130), UINT8_C(173), UINT8_C( 2), UINT8_C(187), UINT8_C( 5),
|
||
|
|
UINT8_C(248), UINT8_C( 87), UINT8_C(155), UINT8_C(221), UINT8_C( 89), UINT8_C(145), UINT8_C( 0), UINT8_C(248) },
|
||
|
|
{ UINT8_C( 94), UINT8_C( 51), UINT8_C(146), UINT8_C(141), UINT8_C( 35), UINT8_C(248), UINT8_C(233), UINT8_C(195),
|
||
|
|
UINT8_C(128), UINT8_C( 39), UINT8_C(137), UINT8_C(164), UINT8_C(112), UINT8_C(150), UINT8_C( 99), UINT8_C(235) },
|
||
|
|
{ UINT8_C(213), UINT8_C(166), UINT8_C(109), UINT8_C(111), UINT8_C(168), UINT8_C( 40), UINT8_C(116), UINT8_C(161),
|
||
|
|
UINT8_C(128), UINT8_C( 16), UINT8_C(126), UINT8_C(217), UINT8_C(161), UINT8_C(127), UINT8_C(209), UINT8_C(209) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C( 92), UINT8_C( 71), UINT8_C(153), UINT8_C(220), UINT8_C(111), UINT8_C( 34), UINT8_C(128), UINT8_C(223),
|
||
|
|
UINT8_C(184), UINT8_C(227), UINT8_C(202), UINT8_C(122), UINT8_C(138), UINT8_C( 56), UINT8_C(233), UINT8_C( 50) },
|
||
|
|
{ UINT8_C( 96), UINT8_C( 94), UINT8_C(211), UINT8_C(224), UINT8_C(110), UINT8_C( 82), UINT8_C(185), UINT8_C( 15),
|
||
|
|
UINT8_C(209), UINT8_C(139), UINT8_C(224), UINT8_C(131), UINT8_C(239), UINT8_C( 62), UINT8_C( 89), UINT8_C( 75) },
|
||
|
|
{ UINT8_C(134), UINT8_C(242), UINT8_C( 39), UINT8_C(245), UINT8_C( 20), UINT8_C(167), UINT8_C(212), UINT8_C(204),
|
||
|
|
UINT8_C(139), UINT8_C(158), UINT8_C( 70), UINT8_C( 21), UINT8_C(214), UINT8_C( 47), UINT8_C( 71), UINT8_C( 55) },
|
||
|
|
{ UINT8_C(141), UINT8_C( 27), UINT8_C( 23), UINT8_C(251), UINT8_C(109), UINT8_C(209), UINT8_C( 10), UINT8_C( 62),
|
||
|
|
UINT8_C( 92), UINT8_C(234), UINT8_C(193), UINT8_C( 75), UINT8_C( 41), UINT8_C( 26), UINT8_C(150), UINT8_C(175) } },
|
||
|
|
{ UINT8_C( 12), UINT8_C(189), UINT8_C(164), UINT8_C( 32) },
|
||
|
|
{ { UINT8_C( 92), UINT8_C( 12), UINT8_C(153), UINT8_C(220), UINT8_C(111), UINT8_C( 34), UINT8_C(128), UINT8_C(223),
|
||
|
|
UINT8_C(184), UINT8_C(227), UINT8_C(202), UINT8_C(122), UINT8_C(138), UINT8_C( 56), UINT8_C(233), UINT8_C( 50) },
|
||
|
|
{ UINT8_C( 96), UINT8_C(189), UINT8_C(211), UINT8_C(224), UINT8_C(110), UINT8_C( 82), UINT8_C(185), UINT8_C( 15),
|
||
|
|
UINT8_C(209), UINT8_C(139), UINT8_C(224), UINT8_C(131), UINT8_C(239), UINT8_C( 62), UINT8_C( 89), UINT8_C( 75) },
|
||
|
|
{ UINT8_C(134), UINT8_C(164), UINT8_C( 39), UINT8_C(245), UINT8_C( 20), UINT8_C(167), UINT8_C(212), UINT8_C(204),
|
||
|
|
UINT8_C(139), UINT8_C(158), UINT8_C( 70), UINT8_C( 21), UINT8_C(214), UINT8_C( 47), UINT8_C( 71), UINT8_C( 55) },
|
||
|
|
{ UINT8_C(141), UINT8_C( 32), UINT8_C( 23), UINT8_C(251), UINT8_C(109), UINT8_C(209), UINT8_C( 10), UINT8_C( 62),
|
||
|
|
UINT8_C( 92), UINT8_C(234), UINT8_C(193), UINT8_C( 75), UINT8_C( 41), UINT8_C( 26), UINT8_C(150), UINT8_C(175) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(100), UINT8_C(120), UINT8_C(236), UINT8_C(239), UINT8_C( 22), UINT8_C( 50), UINT8_C( 4), UINT8_C(237),
|
||
|
|
UINT8_C( 98), UINT8_C( 76), UINT8_C( 36), UINT8_C(239), UINT8_C(103), UINT8_C( 59), UINT8_C(235), UINT8_C(212) },
|
||
|
|
{ UINT8_C( 12), UINT8_C(245), UINT8_C( 18), UINT8_C(104), UINT8_C(224), UINT8_C(211), UINT8_C(179), UINT8_C( 9),
|
||
|
|
UINT8_C(238), UINT8_C( 73), UINT8_C(184), UINT8_C(250), UINT8_C( 6), UINT8_C( 92), UINT8_C( 27), UINT8_C(107) },
|
||
|
|
{ UINT8_C(212), UINT8_C( 7), UINT8_C( 90), UINT8_C(234), UINT8_C( 58), UINT8_C( 95), UINT8_C(215), UINT8_C(156),
|
||
|
|
UINT8_C(171), UINT8_C(251), UINT8_C(139), UINT8_C( 18), UINT8_C( 55), UINT8_C(118), UINT8_C(230), UINT8_C( 67) },
|
||
|
|
{ UINT8_C(108), UINT8_C(248), UINT8_C(172), UINT8_C( 76), UINT8_C(203), UINT8_C( 95), UINT8_C( 85), UINT8_C(185),
|
||
|
|
UINT8_C(169), UINT8_C( 13), UINT8_C(180), UINT8_C(175), UINT8_C(105), UINT8_C(207), UINT8_C( 26), UINT8_C( 61) } },
|
||
|
|
{ UINT8_C(214), UINT8_C(117), UINT8_C( 39), UINT8_C( 16) },
|
||
|
|
{ { UINT8_C(100), UINT8_C(120), UINT8_C(214), UINT8_C(239), UINT8_C( 22), UINT8_C( 50), UINT8_C( 4), UINT8_C(237),
|
||
|
|
UINT8_C( 98), UINT8_C( 76), UINT8_C( 36), UINT8_C(239), UINT8_C(103), UINT8_C( 59), UINT8_C(235), UINT8_C(212) },
|
||
|
|
{ UINT8_C( 12), UINT8_C(245), UINT8_C(117), UINT8_C(104), UINT8_C(224), UINT8_C(211), UINT8_C(179), UINT8_C( 9),
|
||
|
|
UINT8_C(238), UINT8_C( 73), UINT8_C(184), UINT8_C(250), UINT8_C( 6), UINT8_C( 92), UINT8_C( 27), UINT8_C(107) },
|
||
|
|
{ UINT8_C(212), UINT8_C( 7), UINT8_C( 39), UINT8_C(234), UINT8_C( 58), UINT8_C( 95), UINT8_C(215), UINT8_C(156),
|
||
|
|
UINT8_C(171), UINT8_C(251), UINT8_C(139), UINT8_C( 18), UINT8_C( 55), UINT8_C(118), UINT8_C(230), UINT8_C( 67) },
|
||
|
|
{ UINT8_C(108), UINT8_C(248), UINT8_C( 16), UINT8_C( 76), UINT8_C(203), UINT8_C( 95), UINT8_C( 85), UINT8_C(185),
|
||
|
|
UINT8_C(169), UINT8_C( 13), UINT8_C(180), UINT8_C(175), UINT8_C(105), UINT8_C(207), UINT8_C( 26), UINT8_C( 61) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(212), UINT8_MAX, UINT8_C(172), UINT8_C(127), UINT8_C(250), UINT8_C( 56), UINT8_C(145), UINT8_C( 49),
|
||
|
|
UINT8_C(174), UINT8_C(119), UINT8_C(117), UINT8_C( 26), UINT8_C(111), UINT8_C( 33), UINT8_C(102), UINT8_C( 58) },
|
||
|
|
{ UINT8_C(128), UINT8_C(187), UINT8_C(244), UINT8_C( 41), UINT8_C(200), UINT8_C(168), UINT8_C(217), UINT8_C( 49),
|
||
|
|
UINT8_C(119), UINT8_C(243), UINT8_C(110), UINT8_C( 77), UINT8_C(104), UINT8_C(150), UINT8_C( 94), UINT8_C( 60) },
|
||
|
|
{ UINT8_C(149), UINT8_C( 10), UINT8_C(187), UINT8_C(143), UINT8_C( 66), UINT8_C( 76), UINT8_C(193), UINT8_C(241),
|
||
|
|
UINT8_C(195), UINT8_C( 54), UINT8_C( 11), UINT8_C( 50), UINT8_C( 87), UINT8_C(114), UINT8_C(109), UINT8_C(215) },
|
||
|
|
{ UINT8_C( 45), UINT8_C( 97), UINT8_C( 1), UINT8_C(246), UINT8_C( 9), UINT8_C(218), UINT8_C( 39), UINT8_C(128),
|
||
|
|
UINT8_C(205), UINT8_C(150), UINT8_C(205), UINT8_C( 54), UINT8_C( 44), UINT8_C( 43), UINT8_C(114), UINT8_C(193) } },
|
||
|
|
{ UINT8_C( 54), UINT8_C( 46), UINT8_C( 80), UINT8_C(120) },
|
||
|
|
{ { UINT8_C(212), UINT8_MAX, UINT8_C(172), UINT8_C( 54), UINT8_C(250), UINT8_C( 56), UINT8_C(145), UINT8_C( 49),
|
||
|
|
UINT8_C(174), UINT8_C(119), UINT8_C(117), UINT8_C( 26), UINT8_C(111), UINT8_C( 33), UINT8_C(102), UINT8_C( 58) },
|
||
|
|
{ UINT8_C(128), UINT8_C(187), UINT8_C(244), UINT8_C( 46), UINT8_C(200), UINT8_C(168), UINT8_C(217), UINT8_C( 49),
|
||
|
|
UINT8_C(119), UINT8_C(243), UINT8_C(110), UINT8_C( 77), UINT8_C(104), UINT8_C(150), UINT8_C( 94), UINT8_C( 60) },
|
||
|
|
{ UINT8_C(149), UINT8_C( 10), UINT8_C(187), UINT8_C( 80), UINT8_C( 66), UINT8_C( 76), UINT8_C(193), UINT8_C(241),
|
||
|
|
UINT8_C(195), UINT8_C( 54), UINT8_C( 11), UINT8_C( 50), UINT8_C( 87), UINT8_C(114), UINT8_C(109), UINT8_C(215) },
|
||
|
|
{ UINT8_C( 45), UINT8_C( 97), UINT8_C( 1), UINT8_C(120), UINT8_C( 9), UINT8_C(218), UINT8_C( 39), UINT8_C(128),
|
||
|
|
UINT8_C(205), UINT8_C(150), UINT8_C(205), UINT8_C( 54), UINT8_C( 44), UINT8_C( 43), UINT8_C(114), UINT8_C(193) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(122), UINT8_C( 17), UINT8_C(105), UINT8_C( 62), UINT8_C( 71), UINT8_C(117), UINT8_C(112), UINT8_C(158),
|
||
|
|
UINT8_C(231), UINT8_C(221), UINT8_C(118), UINT8_C( 20), UINT8_C( 62), UINT8_C(119), UINT8_C( 10), UINT8_C( 71) },
|
||
|
|
{ UINT8_C( 81), UINT8_C( 50), UINT8_C(199), UINT8_C( 30), UINT8_C(200), UINT8_C(149), UINT8_C( 84), UINT8_C(244),
|
||
|
|
UINT8_C(192), UINT8_C(199), UINT8_C(181), UINT8_C(246), UINT8_C(245), UINT8_C( 5), UINT8_C(111), UINT8_C(111) },
|
||
|
|
{ UINT8_C( 23), UINT8_C(216), UINT8_C(173), UINT8_C( 94), UINT8_C( 77), UINT8_C( 30), UINT8_C(253), UINT8_C( 52),
|
||
|
|
UINT8_C(251), UINT8_C(115), UINT8_C( 73), UINT8_C( 58), UINT8_C(234), UINT8_C( 83), UINT8_C(129), UINT8_C( 59) },
|
||
|
|
{ UINT8_C(133), UINT8_C( 73), UINT8_C( 89), UINT8_C( 77), UINT8_C(222), UINT8_C(174), UINT8_C( 65), UINT8_C(158),
|
||
|
|
UINT8_C(117), UINT8_C(246), UINT8_C(149), UINT8_C(106), UINT8_C(252), UINT8_C( 4), UINT8_C(217), UINT8_C( 19) } },
|
||
|
|
{ UINT8_C(220), UINT8_C(135), UINT8_C(113), UINT8_C( 42) },
|
||
|
|
{ { UINT8_C(122), UINT8_C( 17), UINT8_C(105), UINT8_C( 62), UINT8_C(220), UINT8_C(117), UINT8_C(112), UINT8_C(158),
|
||
|
|
UINT8_C(231), UINT8_C(221), UINT8_C(118), UINT8_C( 20), UINT8_C( 62), UINT8_C(119), UINT8_C( 10), UINT8_C( 71) },
|
||
|
|
{ UINT8_C( 81), UINT8_C( 50), UINT8_C(199), UINT8_C( 30), UINT8_C(135), UINT8_C(149), UINT8_C( 84), UINT8_C(244),
|
||
|
|
UINT8_C(192), UINT8_C(199), UINT8_C(181), UINT8_C(246), UINT8_C(245), UINT8_C( 5), UINT8_C(111), UINT8_C(111) },
|
||
|
|
{ UINT8_C( 23), UINT8_C(216), UINT8_C(173), UINT8_C( 94), UINT8_C(113), UINT8_C( 30), UINT8_C(253), UINT8_C( 52),
|
||
|
|
UINT8_C(251), UINT8_C(115), UINT8_C( 73), UINT8_C( 58), UINT8_C(234), UINT8_C( 83), UINT8_C(129), UINT8_C( 59) },
|
||
|
|
{ UINT8_C(133), UINT8_C( 73), UINT8_C( 89), UINT8_C( 77), UINT8_C( 42), UINT8_C(174), UINT8_C( 65), UINT8_C(158),
|
||
|
|
UINT8_C(117), UINT8_C(246), UINT8_C(149), UINT8_C(106), UINT8_C(252), UINT8_C( 4), UINT8_C(217), UINT8_C( 19) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(165), UINT8_C(110), UINT8_C( 94), UINT8_C(160), UINT8_C(225), UINT8_C(167), UINT8_C(218), UINT8_C(203),
|
||
|
|
UINT8_C(251), UINT8_C( 92), UINT8_C( 6), UINT8_C(128), UINT8_C(165), UINT8_C( 96), UINT8_C(206), UINT8_C(131) },
|
||
|
|
{ UINT8_C( 14), UINT8_C( 15), UINT8_C( 33), UINT8_C(131), UINT8_C( 6), UINT8_C(182), UINT8_C(237), UINT8_C( 2),
|
||
|
|
UINT8_C(186), UINT8_C(198), UINT8_C( 21), UINT8_C(151), UINT8_C( 77), UINT8_C(134), UINT8_C(193), UINT8_C(242) },
|
||
|
|
{ UINT8_C(245), UINT8_C( 31), UINT8_C(147), UINT8_C(214), UINT8_C(199), UINT8_C(109), UINT8_C(162), UINT8_C(194),
|
||
|
|
UINT8_C(201), UINT8_C(168), UINT8_C( 66), UINT8_C(110), UINT8_C( 8), UINT8_C( 16), UINT8_C(241), UINT8_C( 22) },
|
||
|
|
{ UINT8_C( 32), UINT8_C( 19), UINT8_C(153), UINT8_C( 38), UINT8_C(201), UINT8_C(134), UINT8_C( 40), UINT8_C(132),
|
||
|
|
UINT8_C( 77), UINT8_C( 61), UINT8_C( 27), UINT8_C(154), UINT8_C(195), UINT8_C(220), UINT8_C(141), UINT8_C(184) } },
|
||
|
|
{ UINT8_C(251), UINT8_C( 32), UINT8_C(143), UINT8_C(194) },
|
||
|
|
{ { UINT8_C(165), UINT8_C(110), UINT8_C( 94), UINT8_C(160), UINT8_C(225), UINT8_C(251), UINT8_C(218), UINT8_C(203),
|
||
|
|
UINT8_C(251), UINT8_C( 92), UINT8_C( 6), UINT8_C(128), UINT8_C(165), UINT8_C( 96), UINT8_C(206), UINT8_C(131) },
|
||
|
|
{ UINT8_C( 14), UINT8_C( 15), UINT8_C( 33), UINT8_C(131), UINT8_C( 6), UINT8_C( 32), UINT8_C(237), UINT8_C( 2),
|
||
|
|
UINT8_C(186), UINT8_C(198), UINT8_C( 21), UINT8_C(151), UINT8_C( 77), UINT8_C(134), UINT8_C(193), UINT8_C(242) },
|
||
|
|
{ UINT8_C(245), UINT8_C( 31), UINT8_C(147), UINT8_C(214), UINT8_C(199), UINT8_C(143), UINT8_C(162), UINT8_C(194),
|
||
|
|
UINT8_C(201), UINT8_C(168), UINT8_C( 66), UINT8_C(110), UINT8_C( 8), UINT8_C( 16), UINT8_C(241), UINT8_C( 22) },
|
||
|
|
{ UINT8_C( 32), UINT8_C( 19), UINT8_C(153), UINT8_C( 38), UINT8_C(201), UINT8_C(194), UINT8_C( 40), UINT8_C(132),
|
||
|
|
UINT8_C( 77), UINT8_C( 61), UINT8_C( 27), UINT8_C(154), UINT8_C(195), UINT8_C(220), UINT8_C(141), UINT8_C(184) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(141), UINT8_C( 49), UINT8_C(132), UINT8_C( 87), UINT8_C(217), UINT8_C(199), UINT8_C(197), UINT8_C(226),
|
||
|
|
UINT8_C(215), UINT8_C(183), UINT8_C(248), UINT8_C(247), UINT8_C(202), UINT8_C(146), UINT8_C( 29), UINT8_C(147) },
|
||
|
|
{ UINT8_C( 24), UINT8_C( 69), UINT8_C( 23), UINT8_C(101), UINT8_C(130), UINT8_C( 50), UINT8_C( 0), UINT8_C( 70),
|
||
|
|
UINT8_C( 14), UINT8_C(141), UINT8_C(254), UINT8_C( 10), UINT8_C(173), UINT8_C(141), UINT8_C(204), UINT8_C( 58) },
|
||
|
|
{ UINT8_C(190), UINT8_C( 81), UINT8_C(145), UINT8_C(152), UINT8_C( 24), UINT8_C( 87), UINT8_C(122), UINT8_C(239),
|
||
|
|
UINT8_C( 14), UINT8_C(114), UINT8_C(231), UINT8_C(216), UINT8_C( 4), UINT8_C( 4), UINT8_C(107), UINT8_C( 29) },
|
||
|
|
{ UINT8_C( 74), UINT8_C(131), UINT8_C(130), UINT8_C(204), UINT8_C(181), UINT8_C(130), UINT8_C( 18), UINT8_C(196),
|
||
|
|
UINT8_C( 15), UINT8_C( 17), UINT8_C(206), UINT8_C(188), UINT8_C(158), UINT8_C(154), UINT8_C(247), UINT8_C( 93) } },
|
||
|
|
{ UINT8_C(235), UINT8_C(136), UINT8_C(245), UINT8_C( 3) },
|
||
|
|
{ { UINT8_C(141), UINT8_C( 49), UINT8_C(132), UINT8_C( 87), UINT8_C(217), UINT8_C(199), UINT8_C(235), UINT8_C(226),
|
||
|
|
UINT8_C(215), UINT8_C(183), UINT8_C(248), UINT8_C(247), UINT8_C(202), UINT8_C(146), UINT8_C( 29), UINT8_C(147) },
|
||
|
|
{ UINT8_C( 24), UINT8_C( 69), UINT8_C( 23), UINT8_C(101), UINT8_C(130), UINT8_C( 50), UINT8_C(136), UINT8_C( 70),
|
||
|
|
UINT8_C( 14), UINT8_C(141), UINT8_C(254), UINT8_C( 10), UINT8_C(173), UINT8_C(141), UINT8_C(204), UINT8_C( 58) },
|
||
|
|
{ UINT8_C(190), UINT8_C( 81), UINT8_C(145), UINT8_C(152), UINT8_C( 24), UINT8_C( 87), UINT8_C(245), UINT8_C(239),
|
||
|
|
UINT8_C( 14), UINT8_C(114), UINT8_C(231), UINT8_C(216), UINT8_C( 4), UINT8_C( 4), UINT8_C(107), UINT8_C( 29) },
|
||
|
|
{ UINT8_C( 74), UINT8_C(131), UINT8_C(130), UINT8_C(204), UINT8_C(181), UINT8_C(130), UINT8_C( 3), UINT8_C(196),
|
||
|
|
UINT8_C( 15), UINT8_C( 17), UINT8_C(206), UINT8_C(188), UINT8_C(158), UINT8_C(154), UINT8_C(247), UINT8_C( 93) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT8_C(223), UINT8_C(111), UINT8_C(243), UINT8_C(237), UINT8_C(225), UINT8_C(218), UINT8_C(197), UINT8_C(230),
|
||
|
|
UINT8_C(222), UINT8_C( 49), UINT8_C( 3), UINT8_C( 40), UINT8_C(180), UINT8_C(133), UINT8_C(245), UINT8_C(105) },
|
||
|
|
{ UINT8_C( 8), UINT8_C( 7), UINT8_C( 45), UINT8_C( 23), UINT8_C( 24), UINT8_C(251), UINT8_C(212), UINT8_C(183),
|
||
|
|
UINT8_C(150), UINT8_C(203), UINT8_C( 20), UINT8_C(129), UINT8_C( 83), UINT8_C( 9), UINT8_C(133), UINT8_C( 51) },
|
||
|
|
{ UINT8_C(120), UINT8_C(120), UINT8_C( 32), UINT8_C( 89), UINT8_C( 82), UINT8_C(230), UINT8_C( 63), UINT8_C( 48),
|
||
|
|
UINT8_C( 23), UINT8_C( 66), UINT8_C( 89), UINT8_C(203), UINT8_C(200), UINT8_C( 78), UINT8_C( 52), UINT8_C(208) },
|
||
|
|
{ UINT8_C( 85), UINT8_C( 98), UINT8_C(231), UINT8_C(110), UINT8_C( 93), UINT8_C(187), UINT8_C( 37), UINT8_C(243),
|
||
|
|
UINT8_C(134), UINT8_C( 57), UINT8_C(117), UINT8_C(218), UINT8_C( 66), UINT8_C(250), UINT8_C( 13), UINT8_C(186) } },
|
||
|
|
{ UINT8_C(114), UINT8_C( 45), UINT8_C( 19), UINT8_C(196) },
|
||
|
|
{ { UINT8_C(223), UINT8_C(111), UINT8_C(243), UINT8_C(237), UINT8_C(225), UINT8_C(218), UINT8_C(197), UINT8_C(114),
|
||
|
|
UINT8_C(222), UINT8_C( 49), UINT8_C( 3), UINT8_C( 40), UINT8_C(180), UINT8_C(133), UINT8_C(245), UINT8_C(105) },
|
||
|
|
{ UINT8_C( 8), UINT8_C( 7), UINT8_C( 45), UINT8_C( 23), UINT8_C( 24), UINT8_C(251), UINT8_C(212), UINT8_C( 45),
|
||
|
|
UINT8_C(150), UINT8_C(203), UINT8_C( 20), UINT8_C(129), UINT8_C( 83), UINT8_C( 9), UINT8_C(133), UINT8_C( 51) },
|
||
|
|
{ UINT8_C(120), UINT8_C(120), UINT8_C( 32), UINT8_C( 89), UINT8_C( 82), UINT8_C(230), UINT8_C( 63), UINT8_C( 19),
|
||
|
|
UINT8_C( 23), UINT8_C( 66), UINT8_C( 89), UINT8_C(203), UINT8_C(200), UINT8_C( 78), UINT8_C( 52), UINT8_C(208) },
|
||
|
|
{ UINT8_C( 85), UINT8_C( 98), UINT8_C(231), UINT8_C(110), UINT8_C( 93), UINT8_C(187), UINT8_C( 37), UINT8_C(196),
|
||
|
|
UINT8_C(134), UINT8_C( 57), UINT8_C(117), UINT8_C(218), UINT8_C( 66), UINT8_C(250), UINT8_C( 13), UINT8_C(186) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint8x16x4_t r;
|
||
|
|
simde_uint8x16x4_t src = {
|
||
|
|
{simde_vld1q_u8(test_vec[i].src[0]), simde_vld1q_u8(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_u8(test_vec[i].src[2]), simde_vld1q_u8(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_16_(simde_vld4q_lane_u8, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_uint8x16x4_t expected = {
|
||
|
|
{simde_vld1q_u8(test_vec[i].r[0]), simde_vld1q_u8(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_u8(test_vec[i].r[2]), simde_vld1q_u8(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u8x16(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u8x16(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u8x16(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u8x16(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 8 ; i++) {
|
||
|
|
simde_uint8x16x4_t src = simde_test_arm_neon_random_u8x16x4();
|
||
|
|
simde_test_arm_neon_write_u8x16x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint8_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, buf);
|
||
|
|
simde_test_codegen_write_vu8(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint8x16x4_t r;
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4q_lane_u8, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_u8x16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_u16 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint16_t src[4][8];
|
||
|
|
uint16_t buf[4];
|
||
|
|
uint16_t r[4][8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT16_C(36561), UINT16_C(27412), UINT16_C(49068), UINT16_C(10101), UINT16_C(56899), UINT16_C(25642), UINT16_C(61901), UINT16_C(17642) },
|
||
|
|
{ UINT16_C(29177), UINT16_C(52241), UINT16_C(33043), UINT16_C(57000), UINT16_C(34377), UINT16_C(24689), UINT16_C(48063), UINT16_C(37050) },
|
||
|
|
{ UINT16_C(53065), UINT16_C(62971), UINT16_C(28814), UINT16_C(53532), UINT16_C(17998), UINT16_C( 6966), UINT16_C( 8247), UINT16_C(12383) },
|
||
|
|
{ UINT16_C(28817), UINT16_C(42237), UINT16_C(42481), UINT16_C(15234), UINT16_C(62507), UINT16_C(60059), UINT16_C(21935), UINT16_C(63610) } },
|
||
|
|
{ UINT16_C(29988), UINT16_C(46061), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C(29988), UINT16_C(27412), UINT16_C(49068), UINT16_C(10101), UINT16_C(56899), UINT16_C(25642), UINT16_C(61901), UINT16_C(17642) },
|
||
|
|
{ UINT16_C(46061), UINT16_C(52241), UINT16_C(33043), UINT16_C(57000), UINT16_C(34377), UINT16_C(24689), UINT16_C(48063), UINT16_C(37050) },
|
||
|
|
{ UINT16_C(62106), UINT16_C(62971), UINT16_C(28814), UINT16_C(53532), UINT16_C(17998), UINT16_C( 6966), UINT16_C( 8247), UINT16_C(12383) },
|
||
|
|
{ UINT16_C(50158), UINT16_C(42237), UINT16_C(42481), UINT16_C(15234), UINT16_C(62507), UINT16_C(60059), UINT16_C(21935), UINT16_C(63610) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C( 2533), UINT16_C(13188), UINT16_C(47696), UINT16_C(34638), UINT16_C(44506), UINT16_C(27576), UINT16_C(46365), UINT16_C( 3856) },
|
||
|
|
{ UINT16_C(37466), UINT16_C(34122), UINT16_C(58758), UINT16_C(13679), UINT16_C(59706), UINT16_C(24365), UINT16_C( 6750), UINT16_C(17170) },
|
||
|
|
{ UINT16_C(38436), UINT16_C(29814), UINT16_C(50257), UINT16_C(11259), UINT16_C(45937), UINT16_C(36503), UINT16_C(42856), UINT16_C(49821) },
|
||
|
|
{ UINT16_C(59193), UINT16_C(49223), UINT16_C(46796), UINT16_C( 2037), UINT16_C( 9119), UINT16_C(64870), UINT16_C(30781), UINT16_C(24896) } },
|
||
|
|
{ UINT16_C(46606), UINT16_C(24533), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C( 2533), UINT16_C(46606), UINT16_C(47696), UINT16_C(34638), UINT16_C(44506), UINT16_C(27576), UINT16_C(46365), UINT16_C( 3856) },
|
||
|
|
{ UINT16_C(37466), UINT16_C(24533), UINT16_C(58758), UINT16_C(13679), UINT16_C(59706), UINT16_C(24365), UINT16_C( 6750), UINT16_C(17170) },
|
||
|
|
{ UINT16_C(38436), UINT16_C(62106), UINT16_C(50257), UINT16_C(11259), UINT16_C(45937), UINT16_C(36503), UINT16_C(42856), UINT16_C(49821) },
|
||
|
|
{ UINT16_C(59193), UINT16_C(50158), UINT16_C(46796), UINT16_C( 2037), UINT16_C( 9119), UINT16_C(64870), UINT16_C(30781), UINT16_C(24896) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C(53626), UINT16_C(60299), UINT16_C( 8836), UINT16_C(60794), UINT16_C( 6089), UINT16_C( 687), UINT16_C(63487), UINT16_C(52162) },
|
||
|
|
{ UINT16_C(47277), UINT16_C(19922), UINT16_C(14555), UINT16_C( 6218), UINT16_C(35760), UINT16_C(49018), UINT16_C(20289), UINT16_C(48158) },
|
||
|
|
{ UINT16_C(43296), UINT16_C(42407), UINT16_C( 8651), UINT16_C(38034), UINT16_C(16697), UINT16_C(14487), UINT16_C(22840), UINT16_C(58883) },
|
||
|
|
{ UINT16_C(54801), UINT16_C(60467), UINT16_C(32014), UINT16_C(48901), UINT16_C(32520), UINT16_C(19070), UINT16_C(40142), UINT16_C(61190) } },
|
||
|
|
{ UINT16_C(44358), UINT16_C( 4500), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C(53626), UINT16_C(60299), UINT16_C(44358), UINT16_C(60794), UINT16_C( 6089), UINT16_C( 687), UINT16_C(63487), UINT16_C(52162) },
|
||
|
|
{ UINT16_C(47277), UINT16_C(19922), UINT16_C( 4500), UINT16_C( 6218), UINT16_C(35760), UINT16_C(49018), UINT16_C(20289), UINT16_C(48158) },
|
||
|
|
{ UINT16_C(43296), UINT16_C(42407), UINT16_C(62106), UINT16_C(38034), UINT16_C(16697), UINT16_C(14487), UINT16_C(22840), UINT16_C(58883) },
|
||
|
|
{ UINT16_C(54801), UINT16_C(60467), UINT16_C(50158), UINT16_C(48901), UINT16_C(32520), UINT16_C(19070), UINT16_C(40142), UINT16_C(61190) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C( 9935), UINT16_C( 2214), UINT16_C(15719), UINT16_C(41024), UINT16_C(17302), UINT16_C(43142), UINT16_C(47385), UINT16_C(10388) },
|
||
|
|
{ UINT16_C(39222), UINT16_C(16359), UINT16_C(25880), UINT16_C(59273), UINT16_C(36609), UINT16_C(18390), UINT16_C(27196), UINT16_C( 2905) },
|
||
|
|
{ UINT16_C(65424), UINT16_C(63251), UINT16_C(21308), UINT16_C(53911), UINT16_C( 7575), UINT16_C(45178), UINT16_C( 4054), UINT16_C( 3544) },
|
||
|
|
{ UINT16_C(49064), UINT16_C(49484), UINT16_C(54564), UINT16_C( 9896), UINT16_C(32356), UINT16_C(41069), UINT16_C(50920), UINT16_C(30892) } },
|
||
|
|
{ UINT16_C(49093), UINT16_C( 367), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C( 9935), UINT16_C( 2214), UINT16_C(15719), UINT16_C(49093), UINT16_C(17302), UINT16_C(43142), UINT16_C(47385), UINT16_C(10388) },
|
||
|
|
{ UINT16_C(39222), UINT16_C(16359), UINT16_C(25880), UINT16_C( 367), UINT16_C(36609), UINT16_C(18390), UINT16_C(27196), UINT16_C( 2905) },
|
||
|
|
{ UINT16_C(65424), UINT16_C(63251), UINT16_C(21308), UINT16_C(62106), UINT16_C( 7575), UINT16_C(45178), UINT16_C( 4054), UINT16_C( 3544) },
|
||
|
|
{ UINT16_C(49064), UINT16_C(49484), UINT16_C(54564), UINT16_C(50158), UINT16_C(32356), UINT16_C(41069), UINT16_C(50920), UINT16_C(30892) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C( 1811), UINT16_C(43732), UINT16_C(20004), UINT16_C(64346), UINT16_C(13149), UINT16_C( 1544), UINT16_C(21746), UINT16_C( 6087) },
|
||
|
|
{ UINT16_C(28457), UINT16_C(36157), UINT16_C(43757), UINT16_C(54573), UINT16_C(55665), UINT16_C(13901), UINT16_C(48281), UINT16_C(44088) },
|
||
|
|
{ UINT16_C( 3267), UINT16_C(59478), UINT16_C(45146), UINT16_C(47331), UINT16_C(60387), UINT16_C(54974), UINT16_C(34111), UINT16_C(26861) },
|
||
|
|
{ UINT16_C(10996), UINT16_C(57845), UINT16_C( 8916), UINT16_C(17846), UINT16_C( 1020), UINT16_C(38268), UINT16_C(46271), UINT16_C(33601) } },
|
||
|
|
{ UINT16_C(38848), UINT16_C( 6763), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C( 1811), UINT16_C(43732), UINT16_C(20004), UINT16_C(64346), UINT16_C(38848), UINT16_C( 1544), UINT16_C(21746), UINT16_C( 6087) },
|
||
|
|
{ UINT16_C(28457), UINT16_C(36157), UINT16_C(43757), UINT16_C(54573), UINT16_C( 6763), UINT16_C(13901), UINT16_C(48281), UINT16_C(44088) },
|
||
|
|
{ UINT16_C( 3267), UINT16_C(59478), UINT16_C(45146), UINT16_C(47331), UINT16_C(62106), UINT16_C(54974), UINT16_C(34111), UINT16_C(26861) },
|
||
|
|
{ UINT16_C(10996), UINT16_C(57845), UINT16_C( 8916), UINT16_C(17846), UINT16_C(50158), UINT16_C(38268), UINT16_C(46271), UINT16_C(33601) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C(20039), UINT16_C(11218), UINT16_C(36921), UINT16_C(30721), UINT16_C(60949), UINT16_C( 2528), UINT16_C(54552), UINT16_C(60650) },
|
||
|
|
{ UINT16_C(41207), UINT16_C(62258), UINT16_C(44707), UINT16_C(25480), UINT16_C(51554), UINT16_C( 8934), UINT16_C(20832), UINT16_C(43068) },
|
||
|
|
{ UINT16_C( 3999), UINT16_C(55507), UINT16_C(54431), UINT16_C(46416), UINT16_C(12482), UINT16_C(55998), UINT16_C(43269), UINT16_C(64710) },
|
||
|
|
{ UINT16_C(63561), UINT16_C(60912), UINT16_C(30886), UINT16_C( 2128), UINT16_C(13890), UINT16_C(41514), UINT16_C(26503), UINT16_C( 9802) } },
|
||
|
|
{ UINT16_C( 7542), UINT16_C( 5630), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C(20039), UINT16_C(11218), UINT16_C(36921), UINT16_C(30721), UINT16_C(60949), UINT16_C( 7542), UINT16_C(54552), UINT16_C(60650) },
|
||
|
|
{ UINT16_C(41207), UINT16_C(62258), UINT16_C(44707), UINT16_C(25480), UINT16_C(51554), UINT16_C( 5630), UINT16_C(20832), UINT16_C(43068) },
|
||
|
|
{ UINT16_C( 3999), UINT16_C(55507), UINT16_C(54431), UINT16_C(46416), UINT16_C(12482), UINT16_C(62106), UINT16_C(43269), UINT16_C(64710) },
|
||
|
|
{ UINT16_C(63561), UINT16_C(60912), UINT16_C(30886), UINT16_C( 2128), UINT16_C(13890), UINT16_C(50158), UINT16_C(26503), UINT16_C( 9802) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C(20209), UINT16_C(46026), UINT16_C(35198), UINT16_C(33677), UINT16_C(21554), UINT16_C(31615), UINT16_C(28492), UINT16_C(62312) },
|
||
|
|
{ UINT16_C(47336), UINT16_C(11003), UINT16_C( 9966), UINT16_C(30156), UINT16_C( 6029), UINT16_C( 923), UINT16_C(39220), UINT16_C( 9752) },
|
||
|
|
{ UINT16_C(58343), UINT16_C(26073), UINT16_C(26476), UINT16_C(40680), UINT16_C(26811), UINT16_C( 1817), UINT16_C(33495), UINT16_C(49146) },
|
||
|
|
{ UINT16_C(63034), UINT16_C(10729), UINT16_C(46620), UINT16_C(43422), UINT16_C(15053), UINT16_C( 428), UINT16_C(50387), UINT16_C(47911) } },
|
||
|
|
{ UINT16_C( 423), UINT16_C( 4896), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C(20209), UINT16_C(46026), UINT16_C(35198), UINT16_C(33677), UINT16_C(21554), UINT16_C(31615), UINT16_C( 423), UINT16_C(62312) },
|
||
|
|
{ UINT16_C(47336), UINT16_C(11003), UINT16_C( 9966), UINT16_C(30156), UINT16_C( 6029), UINT16_C( 923), UINT16_C( 4896), UINT16_C( 9752) },
|
||
|
|
{ UINT16_C(58343), UINT16_C(26073), UINT16_C(26476), UINT16_C(40680), UINT16_C(26811), UINT16_C( 1817), UINT16_C(62106), UINT16_C(49146) },
|
||
|
|
{ UINT16_C(63034), UINT16_C(10729), UINT16_C(46620), UINT16_C(43422), UINT16_C(15053), UINT16_C( 428), UINT16_C(50158), UINT16_C(47911) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT16_C( 2408), UINT16_C( 9137), UINT16_C(52081), UINT16_C(18474), UINT16_C( 9549), UINT16_C(34568), UINT16_C(61723), UINT16_C(14256) },
|
||
|
|
{ UINT16_C(20391), UINT16_C(29920), UINT16_C(35977), UINT16_C(23670), UINT16_C(40272), UINT16_C(63511), UINT16_C(14494), UINT16_C( 1547) },
|
||
|
|
{ UINT16_C(48449), UINT16_C(45609), UINT16_C(21640), UINT16_C(54778), UINT16_C( 633), UINT16_C(37980), UINT16_C( 3572), UINT16_C(39883) },
|
||
|
|
{ UINT16_C(43868), UINT16_C(58640), UINT16_C(34359), UINT16_C(34625), UINT16_C(22819), UINT16_C(49791), UINT16_C(35729), UINT16_C(53960) } },
|
||
|
|
{ UINT16_C(62024), UINT16_C(53380), UINT16_C(62106), UINT16_C(50158) },
|
||
|
|
{ { UINT16_C( 2408), UINT16_C( 9137), UINT16_C(52081), UINT16_C(18474), UINT16_C( 9549), UINT16_C(34568), UINT16_C(61723), UINT16_C(62024) },
|
||
|
|
{ UINT16_C(20391), UINT16_C(29920), UINT16_C(35977), UINT16_C(23670), UINT16_C(40272), UINT16_C(63511), UINT16_C(14494), UINT16_C(53380) },
|
||
|
|
{ UINT16_C(48449), UINT16_C(45609), UINT16_C(21640), UINT16_C(54778), UINT16_C( 633), UINT16_C(37980), UINT16_C( 3572), UINT16_C(62106) },
|
||
|
|
{ UINT16_C(43868), UINT16_C(58640), UINT16_C(34359), UINT16_C(34625), UINT16_C(22819), UINT16_C(49791), UINT16_C(35729), UINT16_C(50158) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint16x8x4_t r;
|
||
|
|
simde_uint16x8x4_t src = {
|
||
|
|
{simde_vld1q_u16(test_vec[i].src[0]), simde_vld1q_u16(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_u16(test_vec[i].src[2]), simde_vld1q_u16(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4q_lane_u16, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_uint16x8x4_t expected = {
|
||
|
|
{simde_vld1q_u16(test_vec[i].r[0]), simde_vld1q_u16(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_u16(test_vec[i].r[2]), simde_vld1q_u16(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u16x8(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u16x8(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u16x8(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u16x8(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 8 ; i++) {
|
||
|
|
simde_uint16x8x4_t src = simde_test_arm_neon_random_u16x8x4();
|
||
|
|
simde_test_arm_neon_write_u16x8x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint16_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vu16(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint16x8x4_t r;
|
||
|
|
SIMDE_CONSTIFY_8_(simde_vld4q_lane_u16, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_u16x8x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint32_t src[4][4];
|
||
|
|
uint32_t buf[4];
|
||
|
|
uint32_t r[4][4];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT32_C(1205893189), UINT32_C( 891332804), UINT32_C(2249248723), UINT32_C( 928282505) },
|
||
|
|
{ UINT32_C( 85412513), UINT32_C(2207258482), UINT32_C(3967496535), UINT32_C(1957615663) },
|
||
|
|
{ UINT32_C( 364678737), UINT32_C( 155900982), UINT32_C( 881875883), UINT32_C(1936516306) },
|
||
|
|
{ UINT32_C(2709095214), UINT32_C(4045670810), UINT32_C(1776197434), UINT32_C(3370028151) } },
|
||
|
|
{ UINT32_C(1373542938), UINT32_C(2269218359), UINT32_C(3263125795), UINT32_C(3287190417) },
|
||
|
|
{ { UINT32_C(1373542938), UINT32_C( 891332804), UINT32_C(2249248723), UINT32_C( 928282505) },
|
||
|
|
{ UINT32_C(2269218359), UINT32_C(2207258482), UINT32_C(3967496535), UINT32_C(1957615663) },
|
||
|
|
{ UINT32_C(3263125795), UINT32_C( 155900982), UINT32_C( 881875883), UINT32_C(1936516306) },
|
||
|
|
{ UINT32_C(3287190417), UINT32_C(4045670810), UINT32_C(1776197434), UINT32_C(3370028151) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT32_C( 576333942), UINT32_C(1448536707), UINT32_C(4257858255), UINT32_C(3768468038) },
|
||
|
|
{ UINT32_C(2261959244), UINT32_C(3656429665), UINT32_C(1453444668), UINT32_C(3735519080) },
|
||
|
|
{ UINT32_C( 721420968), UINT32_C(3145816044), UINT32_C(1605978905), UINT32_C(3644872589) },
|
||
|
|
{ UINT32_C(2069893658), UINT32_C(4266938562), UINT32_C(2253714974), UINT32_C( 493157493) } },
|
||
|
|
{ UINT32_C(3930678782), UINT32_C(2269218359), UINT32_C(3263125795), UINT32_C(3287190417) },
|
||
|
|
{ { UINT32_C( 576333942), UINT32_C(3930678782), UINT32_C(4257858255), UINT32_C(3768468038) },
|
||
|
|
{ UINT32_C(2261959244), UINT32_C(2269218359), UINT32_C(1453444668), UINT32_C(3735519080) },
|
||
|
|
{ UINT32_C( 721420968), UINT32_C(3263125795), UINT32_C(1605978905), UINT32_C(3644872589) },
|
||
|
|
{ UINT32_C(2069893658), UINT32_C(3287190417), UINT32_C(2253714974), UINT32_C( 493157493) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT32_C(3584477884), UINT32_C(2738183957), UINT32_C(3497817526), UINT32_C(1229773959) },
|
||
|
|
{ UINT32_C(1246208044), UINT32_C( 214997910), UINT32_C(2502505879), UINT32_C(1451258522) },
|
||
|
|
{ UINT32_C(1378559549), UINT32_C(1005936773), UINT32_C(1544319701), UINT32_C(2074433614) },
|
||
|
|
{ UINT32_C(2412113144), UINT32_C( 530290312), UINT32_C(1706411211), UINT32_C(1958425911) } },
|
||
|
|
{ UINT32_C(3771131483), UINT32_C(2269218359), UINT32_C(3263125795), UINT32_C(3287190417) },
|
||
|
|
{ { UINT32_C(3584477884), UINT32_C(2738183957), UINT32_C(3771131483), UINT32_C(1229773959) },
|
||
|
|
{ UINT32_C(1246208044), UINT32_C( 214997910), UINT32_C(2269218359), UINT32_C(1451258522) },
|
||
|
|
{ UINT32_C(1378559549), UINT32_C(1005936773), UINT32_C(3263125795), UINT32_C(2074433614) },
|
||
|
|
{ UINT32_C(2412113144), UINT32_C( 530290312), UINT32_C(3287190417), UINT32_C(1958425911) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT32_C( 471579719), UINT32_C(2088314670), UINT32_C(2029461119), UINT32_C(2466757899) },
|
||
|
|
{ UINT32_C( 515023443), UINT32_C(2642634598), UINT32_C(4145102492), UINT32_C(1809307684) },
|
||
|
|
{ UINT32_C(3263755156), UINT32_C(2587754778), UINT32_C( 705836575), UINT32_C(1186798067) },
|
||
|
|
{ UINT32_C( 560230587), UINT32_C(1958733783), UINT32_C(1231802405), UINT32_C(1018512296) } },
|
||
|
|
{ UINT32_C(1358839094), UINT32_C(2269218359), UINT32_C(3263125795), UINT32_C(3287190417) },
|
||
|
|
{ { UINT32_C( 471579719), UINT32_C(2088314670), UINT32_C(2029461119), UINT32_C(1358839094) },
|
||
|
|
{ UINT32_C( 515023443), UINT32_C(2642634598), UINT32_C(4145102492), UINT32_C(2269218359) },
|
||
|
|
{ UINT32_C(3263755156), UINT32_C(2587754778), UINT32_C( 705836575), UINT32_C(3263125795) },
|
||
|
|
{ UINT32_C( 560230587), UINT32_C(1958733783), UINT32_C(1231802405), UINT32_C(3287190417) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint32x4x4_t r;
|
||
|
|
simde_uint32x4x4_t src = {
|
||
|
|
{simde_vld1q_u32(test_vec[i].src[0]), simde_vld1q_u32(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_u32(test_vec[i].src[2]), simde_vld1q_u32(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4q_lane_u32, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_uint32x4x4_t expected = {
|
||
|
|
{simde_vld1q_u32(test_vec[i].r[0]), simde_vld1q_u32(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_u32(test_vec[i].r[2]), simde_vld1q_u32(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u32x4(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u32x4(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u32x4(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u32x4(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 4 ; i++) {
|
||
|
|
simde_uint32x4x4_t src = simde_test_arm_neon_random_u32x4x4();
|
||
|
|
simde_test_arm_neon_write_u32x4x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint32_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vu32(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint32x4x4_t r;
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4q_lane_u32, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_u32x4x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_u64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
uint64_t src[4][2];
|
||
|
|
uint64_t buf[4];
|
||
|
|
uint64_t r[4][2];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { UINT64_C( 3250796473744199931), UINT64_C(10767859826275018628) },
|
||
|
|
{ UINT64_C(15112678336494193727), UINT64_C( 6754449887704585981) },
|
||
|
|
{ UINT64_C( 255255469939710257), UINT64_C( 4272671385087892544) },
|
||
|
|
{ UINT64_C(14380382604302403039), UINT64_C( 3546131711415312503) } },
|
||
|
|
{ UINT64_C(11114322142593741501), UINT64_C(14015018572964836895), UINT64_C( 8412697540115591355), UINT64_C(14118375337971404837) },
|
||
|
|
{ { UINT64_C(11114322142593741501), UINT64_C(10767859826275018628) },
|
||
|
|
{ UINT64_C(14015018572964836895), UINT64_C( 6754449887704585981) },
|
||
|
|
{ UINT64_C( 8412697540115591355), UINT64_C( 4272671385087892544) },
|
||
|
|
{ UINT64_C(14118375337971404837), UINT64_C( 3546131711415312503) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { UINT64_C(17348538614396426443), UINT64_C(11282874773726301686) },
|
||
|
|
{ UINT64_C( 9693166441718818100), UINT64_C( 8676261292211157871) },
|
||
|
|
{ UINT64_C( 90711956943841373), UINT64_C( 8485742950953152083) },
|
||
|
|
{ UINT64_C(11645082896017925776), UINT64_C(17764227281897542497) } },
|
||
|
|
{ UINT64_C(11114322145491553246), UINT64_C(14015018572964836895), UINT64_C( 8412697540115591355), UINT64_C(14118375337971404837) },
|
||
|
|
{ { UINT64_C(11114322145491553246), UINT64_C(11282874773726301686) },
|
||
|
|
{ UINT64_C(14015018572964836895), UINT64_C( 8676261292211157871) },
|
||
|
|
{ UINT64_C( 8412697540115591355), UINT64_C( 8485742950953152083) },
|
||
|
|
{ UINT64_C(14118375337971404837), UINT64_C(17764227281897542497) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_uint64x2x4_t src = {
|
||
|
|
{simde_vld1q_u64(test_vec[i].src[0]), simde_vld1q_u64(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_u64(test_vec[i].src[2]), simde_vld1q_u64(test_vec[i].src[3])}};
|
||
|
|
simde_uint64x2x4_t r = simde_vld4q_lane_u64(test_vec[i].buf, src, 0);
|
||
|
|
|
||
|
|
simde_uint64x2x4_t expected = {
|
||
|
|
{simde_vld1q_u64(test_vec[i].r[0]), simde_vld1q_u64(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_u64(test_vec[i].r[2]), simde_vld1q_u64(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_u64x2(r.val[0], expected.val[0]);
|
||
|
|
simde_test_arm_neon_assert_equal_u64x2(r.val[1], expected.val[1]);
|
||
|
|
simde_test_arm_neon_assert_equal_u64x2(r.val[2], expected.val[2]);
|
||
|
|
simde_test_arm_neon_assert_equal_u64x2(r.val[3], expected.val[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_uint64x2x4_t src = simde_test_arm_neon_random_u64x2x4();
|
||
|
|
simde_test_arm_neon_write_u64x2x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
uint64_t buf[4];
|
||
|
|
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, buf));
|
||
|
|
simde_test_codegen_write_vu64(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_uint64x2x4_t r = simde_vld4q_lane_u64(buf, src, 0);
|
||
|
|
simde_test_arm_neon_write_u64x2x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
simde_float32_t src[4][4];
|
||
|
|
simde_float32_t buf[4];
|
||
|
|
simde_float32_t r[4][4];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT32_C( 19.27), SIMDE_FLOAT32_C( 11.72), SIMDE_FLOAT32_C( -12.20), SIMDE_FLOAT32_C( -36.38) },
|
||
|
|
{ SIMDE_FLOAT32_C( -37.63), SIMDE_FLOAT32_C( -45.48), SIMDE_FLOAT32_C( -45.93), SIMDE_FLOAT32_C( 47.64) },
|
||
|
|
{ SIMDE_FLOAT32_C( -32.47), SIMDE_FLOAT32_C( 33.82), SIMDE_FLOAT32_C( 49.51), SIMDE_FLOAT32_C( -22.89) },
|
||
|
|
{ SIMDE_FLOAT32_C( -39.76), SIMDE_FLOAT32_C( 33.96), SIMDE_FLOAT32_C( 29.59), SIMDE_FLOAT32_C( -38.64) } },
|
||
|
|
{ SIMDE_FLOAT32_C( -24.64), SIMDE_FLOAT32_C( -43.67), SIMDE_FLOAT32_C( 96.38), SIMDE_FLOAT32_C( 53.18) },
|
||
|
|
{ { SIMDE_FLOAT32_C( -24.64), SIMDE_FLOAT32_C( 11.72), SIMDE_FLOAT32_C( -12.20), SIMDE_FLOAT32_C( -36.38) },
|
||
|
|
{ SIMDE_FLOAT32_C( -43.67), SIMDE_FLOAT32_C( -45.48), SIMDE_FLOAT32_C( -45.93), SIMDE_FLOAT32_C( 47.64) },
|
||
|
|
{ SIMDE_FLOAT32_C( 96.38), SIMDE_FLOAT32_C( 33.82), SIMDE_FLOAT32_C( 49.51), SIMDE_FLOAT32_C( -22.89) },
|
||
|
|
{ SIMDE_FLOAT32_C( 53.18), SIMDE_FLOAT32_C( 33.96), SIMDE_FLOAT32_C( 29.59), SIMDE_FLOAT32_C( -38.64) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT32_C( 27.35), SIMDE_FLOAT32_C( -28.81), SIMDE_FLOAT32_C( 36.44), SIMDE_FLOAT32_C( -23.07) },
|
||
|
|
{ SIMDE_FLOAT32_C( 41.76), SIMDE_FLOAT32_C( -5.78), SIMDE_FLOAT32_C( 33.86), SIMDE_FLOAT32_C( -14.17) },
|
||
|
|
{ SIMDE_FLOAT32_C( -18.89), SIMDE_FLOAT32_C( 13.92), SIMDE_FLOAT32_C( 18.17), SIMDE_FLOAT32_C( -49.62) },
|
||
|
|
{ SIMDE_FLOAT32_C( -24.36), SIMDE_FLOAT32_C( -44.03), SIMDE_FLOAT32_C( -35.99), SIMDE_FLOAT32_C( -11.98) } },
|
||
|
|
{ SIMDE_FLOAT32_C( -79.03), SIMDE_FLOAT32_C( -63.84), SIMDE_FLOAT32_C( -28.69), SIMDE_FLOAT32_C( -43.97) },
|
||
|
|
{ { SIMDE_FLOAT32_C( 27.35), SIMDE_FLOAT32_C( -79.03), SIMDE_FLOAT32_C( 36.44), SIMDE_FLOAT32_C( -23.07) },
|
||
|
|
{ SIMDE_FLOAT32_C( 41.76), SIMDE_FLOAT32_C( -63.84), SIMDE_FLOAT32_C( 33.86), SIMDE_FLOAT32_C( -14.17) },
|
||
|
|
{ SIMDE_FLOAT32_C( -18.89), SIMDE_FLOAT32_C( -28.69), SIMDE_FLOAT32_C( 18.17), SIMDE_FLOAT32_C( -49.62) },
|
||
|
|
{ SIMDE_FLOAT32_C( -24.36), SIMDE_FLOAT32_C( -43.97), SIMDE_FLOAT32_C( -35.99), SIMDE_FLOAT32_C( -11.98) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT32_C( -48.10), SIMDE_FLOAT32_C( -14.83), SIMDE_FLOAT32_C( 5.13), SIMDE_FLOAT32_C( -37.86) },
|
||
|
|
{ SIMDE_FLOAT32_C( -30.87), SIMDE_FLOAT32_C( -15.28), SIMDE_FLOAT32_C( -26.50), SIMDE_FLOAT32_C( 6.81) },
|
||
|
|
{ SIMDE_FLOAT32_C( 12.88), SIMDE_FLOAT32_C( -28.31), SIMDE_FLOAT32_C( -16.60), SIMDE_FLOAT32_C( -9.77) },
|
||
|
|
{ SIMDE_FLOAT32_C( -7.12), SIMDE_FLOAT32_C( -30.16), SIMDE_FLOAT32_C( 17.17), SIMDE_FLOAT32_C( -15.36) } },
|
||
|
|
{ SIMDE_FLOAT32_C( 28.12), SIMDE_FLOAT32_C( 2.05), SIMDE_FLOAT32_C( 40.94), SIMDE_FLOAT32_C( 90.35) },
|
||
|
|
{ { SIMDE_FLOAT32_C( -48.10), SIMDE_FLOAT32_C( -14.83), SIMDE_FLOAT32_C( 28.12), SIMDE_FLOAT32_C( -37.86) },
|
||
|
|
{ SIMDE_FLOAT32_C( -30.87), SIMDE_FLOAT32_C( -15.28), SIMDE_FLOAT32_C( 2.05), SIMDE_FLOAT32_C( 6.81) },
|
||
|
|
{ SIMDE_FLOAT32_C( 12.88), SIMDE_FLOAT32_C( -28.31), SIMDE_FLOAT32_C( 40.94), SIMDE_FLOAT32_C( -9.77) },
|
||
|
|
{ SIMDE_FLOAT32_C( -7.12), SIMDE_FLOAT32_C( -30.16), SIMDE_FLOAT32_C( 90.35), SIMDE_FLOAT32_C( -15.36) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT32_C( -35.05), SIMDE_FLOAT32_C( -11.36), SIMDE_FLOAT32_C( 45.56), SIMDE_FLOAT32_C( -9.41) },
|
||
|
|
{ SIMDE_FLOAT32_C( -5.39), SIMDE_FLOAT32_C( -40.44), SIMDE_FLOAT32_C( 28.61), SIMDE_FLOAT32_C( 5.10) },
|
||
|
|
{ SIMDE_FLOAT32_C( -22.36), SIMDE_FLOAT32_C( -35.74), SIMDE_FLOAT32_C( 33.11), SIMDE_FLOAT32_C( -20.46) },
|
||
|
|
{ SIMDE_FLOAT32_C( -0.57), SIMDE_FLOAT32_C( -11.76), SIMDE_FLOAT32_C( -8.32), SIMDE_FLOAT32_C( 18.56) } },
|
||
|
|
{ SIMDE_FLOAT32_C( 45.92), SIMDE_FLOAT32_C( 30.37), SIMDE_FLOAT32_C( -49.27), SIMDE_FLOAT32_C( -28.32) },
|
||
|
|
{ { SIMDE_FLOAT32_C( -35.05), SIMDE_FLOAT32_C( -11.36), SIMDE_FLOAT32_C( 45.56), SIMDE_FLOAT32_C( 45.92) },
|
||
|
|
{ SIMDE_FLOAT32_C( -5.39), SIMDE_FLOAT32_C( -40.44), SIMDE_FLOAT32_C( 28.61), SIMDE_FLOAT32_C( 30.37) },
|
||
|
|
{ SIMDE_FLOAT32_C( -22.36), SIMDE_FLOAT32_C( -35.74), SIMDE_FLOAT32_C( 33.11), SIMDE_FLOAT32_C( -49.27) },
|
||
|
|
{ SIMDE_FLOAT32_C( -0.57), SIMDE_FLOAT32_C( -11.76), SIMDE_FLOAT32_C( -8.32), SIMDE_FLOAT32_C( -28.32) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_float32x4x4_t r;
|
||
|
|
simde_float32x4x4_t src = {
|
||
|
|
{simde_vld1q_f32(test_vec[i].src[0]), simde_vld1q_f32(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_f32(test_vec[i].src[2]), simde_vld1q_f32(test_vec[i].src[3])}};
|
||
|
|
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4q_lane_f32, r, (HEDLEY_UNREACHABLE(), r), i, test_vec[i].buf, src);
|
||
|
|
|
||
|
|
simde_float32x4x4_t expected = {
|
||
|
|
{simde_vld1q_f32(test_vec[i].r[0]), simde_vld1q_f32(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_f32(test_vec[i].r[2]), simde_vld1q_f32(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_f32x4(r.val[0], expected.val[0], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f32x4(r.val[1], expected.val[1], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f32x4(r.val[2], expected.val[2], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f32x4(r.val[3], expected.val[3], 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 4 ; i++) {
|
||
|
|
simde_float32x4x4_t src = simde_test_arm_neon_random_f32x4x4(-50.0f, 50.0f);
|
||
|
|
simde_test_arm_neon_write_f32x4x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_float32_t buf[4];
|
||
|
|
simde_test_codegen_random_vf32(4, buf, -100.0f, 100.0f);
|
||
|
|
simde_test_codegen_write_vf32(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_float32x4x4_t r;
|
||
|
|
SIMDE_CONSTIFY_4_(simde_vld4q_lane_f32, r, (HEDLEY_UNREACHABLE(), r), i, buf, src);
|
||
|
|
simde_test_arm_neon_write_f32x4x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vld4q_lane_f64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
simde_float64_t src[4][2];
|
||
|
|
simde_float64_t buf[4];
|
||
|
|
simde_float64_t r[4][2];
|
||
|
|
} test_vec[] = {
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT64_C( -10.58), SIMDE_FLOAT64_C( -17.83) },
|
||
|
|
{ SIMDE_FLOAT64_C( 59.36), SIMDE_FLOAT64_C( 53.26) },
|
||
|
|
{ SIMDE_FLOAT64_C( -32.00), SIMDE_FLOAT64_C( -72.88) },
|
||
|
|
{ SIMDE_FLOAT64_C( -8.63), SIMDE_FLOAT64_C( -98.94) } },
|
||
|
|
{ SIMDE_FLOAT64_C( -55.98), SIMDE_FLOAT64_C( -22.55), SIMDE_FLOAT64_C( 21.40), SIMDE_FLOAT64_C( 2.22) },
|
||
|
|
{ { SIMDE_FLOAT64_C( -55.98), SIMDE_FLOAT64_C( -17.83) },
|
||
|
|
{ SIMDE_FLOAT64_C( -22.55), SIMDE_FLOAT64_C( 53.26) },
|
||
|
|
{ SIMDE_FLOAT64_C( 21.40), SIMDE_FLOAT64_C( -72.88) },
|
||
|
|
{ SIMDE_FLOAT64_C( 2.22), SIMDE_FLOAT64_C( -98.94) } },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
{ { SIMDE_FLOAT64_C( 60.29), SIMDE_FLOAT64_C( 60.20) },
|
||
|
|
{ SIMDE_FLOAT64_C( -69.98), SIMDE_FLOAT64_C( 34.61) },
|
||
|
|
{ SIMDE_FLOAT64_C( 66.90), SIMDE_FLOAT64_C( -35.54) },
|
||
|
|
{ SIMDE_FLOAT64_C( 19.63), SIMDE_FLOAT64_C( 63.63) } },
|
||
|
|
{ SIMDE_FLOAT64_C( -21.98), SIMDE_FLOAT64_C( 98.64), SIMDE_FLOAT64_C( -95.62), SIMDE_FLOAT64_C( 54.86) },
|
||
|
|
{ { SIMDE_FLOAT64_C( -21.98), SIMDE_FLOAT64_C( 60.20) },
|
||
|
|
{ SIMDE_FLOAT64_C( 98.64), SIMDE_FLOAT64_C( 34.61) },
|
||
|
|
{ SIMDE_FLOAT64_C( -95.62), SIMDE_FLOAT64_C( -35.54) },
|
||
|
|
{ SIMDE_FLOAT64_C( 54.86), SIMDE_FLOAT64_C( 63.63) } },
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
||
|
|
simde_float64x2x4_t src = {
|
||
|
|
{simde_vld1q_f64(test_vec[i].src[0]), simde_vld1q_f64(test_vec[i].src[1]),
|
||
|
|
simde_vld1q_f64(test_vec[i].src[2]), simde_vld1q_f64(test_vec[i].src[3])}};
|
||
|
|
simde_float64x2x4_t r = simde_vld4q_lane_f64(test_vec[i].buf, src, 0);
|
||
|
|
|
||
|
|
simde_float64x2x4_t expected = {
|
||
|
|
{simde_vld1q_f64(test_vec[i].r[0]), simde_vld1q_f64(test_vec[i].r[1]),
|
||
|
|
simde_vld1q_f64(test_vec[i].r[2]), simde_vld1q_f64(test_vec[i].r[3])}};
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_f64x2(r.val[0], expected.val[0], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f64x2(r.val[1], expected.val[1], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f64x2(r.val[2], expected.val[2], 1);
|
||
|
|
simde_test_arm_neon_assert_equal_f64x2(r.val[3], expected.val[3], 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
#else
|
||
|
|
for (int i = 0 ; i < 2 ; i++) {
|
||
|
|
simde_float64x2x4_t src = simde_test_arm_neon_random_f64x2x4(-100.0, 100.0);
|
||
|
|
simde_test_arm_neon_write_f64x2x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_float64_t buf[4];
|
||
|
|
simde_test_codegen_random_vf64(4, buf, -100.0, 100.0);
|
||
|
|
simde_test_codegen_write_vf64(2, 4, buf, SIMDE_TEST_VEC_POS_MIDDLE);
|
||
|
|
simde_float64x2x4_t r = simde_vld4q_lane_f64(buf, src, 0);
|
||
|
|
simde_test_arm_neon_write_f64x2x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif /* !defined(SIMDE_BUG_INTEL_857088) */
|
||
|
|
|
||
|
|
|
||
|
|
SIMDE_TEST_FUNC_LIST_BEGIN
|
||
|
|
#if !defined(SIMDE_BUG_INTEL_857088)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_s8)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_s16)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_s32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_s64)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_u8)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_u16)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_u32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_u64)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_f32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4_lane_f64)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_s8)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_s16)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_s32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_s64)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_u8)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_u16)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_u32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_u64)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_f32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vld4q_lane_f64)
|
||
|
|
#endif /* !defined(SIMDE_BUG_INTEL_857088) */
|
||
|
|
SIMDE_TEST_FUNC_LIST_END
|
||
|
|
|
||
|
|
#include "test-neon-footer.h"
|