/* { dg-do compile } */ /* { dg-options "-O2 -mavx512fp16" } */ /* { dg-final { scan-assembler-times "vcvttsh2si\[ \\t\]+\[^\{\n\]*(?:%xmm\[0-9\]|\\(%e\[bs\]p\\))+, %eax(?:\n|\[ \\t\]+#)" 3 } } */ /* { dg-final { scan-assembler-times "vcvttsh2usi\[ \\t\]+\[^\{\n\]*(?:%xmm\[0-9\]|\\(%e\[bs\]p\\))+, %eax(?:\n|\[ \\t\]+#)" 2 } } */ /* { dg-final { scan-assembler-times "vcvttsh2si\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+, %rax(?:\n|\[ \\t\]+#)" 1 { target { ! ia32 } } } } */ /* { dg-final { scan-assembler-times "vcvttsh2usi\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+, %rax(?:\n|\[ \\t\]+#)" 1 { target { ! ia32 } } } } */ /* { dg-final { scan-assembler "xorl\[ \\t\]+%edx, %edx" { target ia32 } } } */ #include short __attribute__ ((noinline, noclone)) trunc_f16_to_si16 (_Float16 f) { return f; } unsigned short __attribute__ ((noinline, noclone)) trunc_f16_to_su16 (_Float16 f) { return f; } int __attribute__ ((noinline, noclone)) trunc_f16_to_si32 (_Float16 f) { return f; } unsigned int __attribute__ ((noinline, noclone)) trunc_f16_to_su32 (_Float16 f) { return f; } long long __attribute__ ((noinline, noclone)) trunc_f16_to_si64 (_Float16 f) { return f; } unsigned long long __attribute__ ((noinline, noclone)) trunc_f16_to_su64 (_Float16 f) { return f; } unsigned long long __attribute__ ((noinline, noclone)) trunc_f16_to_su64_zext (_Float16 f) { return (unsigned int) f; }