blob: a862894746d76f88d69d7b6dc94f425a175eb29f [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-mavxneconvert -mf16c -O2" } */
/* { dg-require-effective-target avxneconvert } */
#define AVXNECONVERT
#include <stdint.h>
#ifndef CHECK
#define CHECK "avx-check.h"
#endif
#ifndef TEST
#define TEST avx_test
#endif
#include CHECK
typedef union
{
uint32_t int32;
float flt;
} float_int_t;
typedef union
{
__m128h x;
uint32_t a[4];
} union128h;
typedef union
{
__m256h x;
uint32_t a[8];
} union256h;
void TEST (void)
{
union128 dst_128;
union256 dst_256;
float res_ref_128[4], res_ref_256[8], fp32;
uint16_t fp16;
union128h src_128h;
union256h src_256h;
for (int i = 0; i < 4; i++)
{
fp32 = (float) 3 * i + 5 + i * 0.5;
fp16 = _cvtss_sh (fp32, 0);
src_128h.a[i] = fp16;
res_ref_128[i] = fp32;
dst_128.a[i] = 117;
}
for (int i = 0; i < 8; i++)
{
fp32 = (float) 3 * i + 5 + i * 0.5;
fp16 = _cvtss_sh (fp32, 0);
src_256h.a[i] = fp16;
res_ref_256[i] = fp32;
dst_256.a[i] = 117;
}
dst_128.x = _mm_cvtneeph_ps (&src_128h.x);
dst_256.x = _mm256_cvtneeph_ps (&src_256h.x);
if (check_union128 (dst_128, res_ref_128))
abort();
if (check_union256 (dst_256, res_ref_256))
abort();
}