(root)/
gcc-13.2.0/
gcc/
testsuite/
gdc.dg/
torture/
simd16488b.d
// https://issues.dlang.org/show_bug.cgi?id=16488
// { dg-additional-options "-mavx2" { target avx2_runtime } }
// { dg-do run { target { avx2_runtime || vect_sizes_32B_16B } } }
// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
import core.simd;

void foo_byte32(byte t, byte s)
{
    byte32 f = s;
    auto p = cast(byte*)&f;
    foreach (i; 0 .. 32)
        assert(p[i] == s);
}

void foo_ubyte32(ubyte t, ubyte s)
{
    ubyte32 f = s;
    auto p = cast(ubyte*)&f;
    foreach (i; 0 .. 32)
        assert(p[i] == s);
}

void foo_short16(short t, short s)
{
    short16 f = s;
    auto p = cast(short*)&f;
    foreach (i; 0 .. 16)
        assert(p[i] == s);
}

void foo_ushort16(ushort t, ushort s)
{
    ushort16 f = s;
    auto p = cast(ushort*)&f;
    foreach (i; 0 .. 16)
        assert(p[i] == s);
}

void foo_int8(int t, int s)
{
    int8 f = s;
    auto p = cast(int*)&f;
    foreach (i; 0 .. 8)
        assert(p[i] == s);
}

void foo_uint8(uint t, uint s, uint u)
{
    uint8 f = s;
    auto p = cast(uint*)&f;
    foreach (i; 0 .. 8)
        assert(p[i] == s);
}

void foo_long4(long t, long s, long u)
{
    long4 f = s;
    auto p = cast(long*)&f;
    foreach (i; 0 .. 4)
        assert(p[i] == s);
}

void foo_ulong4(ulong t, ulong s)
{
    ulong4 f = s;
    auto p = cast(ulong*)&f;
    foreach (i; 0 .. 4)
        assert(p[i] == s);
}

void foo_float8(float t, float s)
{
    float8 f = s;
    auto p = cast(float*)&f;
    foreach (i; 0 .. 8)
        assert(p[i] == s);
}

void foo_double4(double t, double s, double u)
{
    double4 f = s;
    auto p = cast(double*)&f;
    foreach (i; 0 .. 4)
        assert(p[i] == s);
}

void main()
{
    foo_byte32(5, -10);
    foo_ubyte32(5, 11);

    foo_short16(5, -6);
    foo_short16(5, 7);

    foo_int8(5, -6);
    foo_uint8(5, 0x12345678, 22);

    foo_long4(5, -6, 1);
    foo_ulong4(5, 0x12345678_87654321L);

    foo_float8(5, -6);
    foo_double4(5, -6, 2);
}