Viewing file: armv8_2-fp16-conv-1.c (1.51 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */ /* { dg-options "-O2" } */ /* { dg-add-options arm_v8_2a_fp16_scalar } */
/* Test ARMv8.2 FP16 conversions. */ #include <arm_fp16.h>
float f16_to_f32 (__fp16 a) { return (float)a; }
float f16_to_pf32 (__fp16* a) { return (float)*a; }
short f16_to_s16 (__fp16 a) { return (short)a; }
short pf16_to_s16 (__fp16* a) { return (short)*a; }
/* { dg-final { scan-assembler-times {vcvtb\.f32\.f16\ts[0-9]+, s[0-9]+} 4 } } */
__fp16 f32_to_f16 (float a) { return (__fp16)a; }
void f32_to_pf16 (__fp16* x, float a) { *x = (__fp16)a; }
__fp16 s16_to_f16 (short a) { return (__fp16)a; }
void s16_to_pf16 (__fp16* x, short a) { *x = (__fp16)a; }
/* { dg-final { scan-assembler-times {vcvtb\.f16\.f32\ts[0-9]+, s[0-9]+} 4 } } */
float s16_to_f32 (short a) { return (float)a; }
/* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 3 } } */
short f32_to_s16 (float a) { return (short)a; }
/* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 3 } } */
unsigned short f32_to_u16 (float a) { return (unsigned short)a; }
/* { dg-final { scan-assembler-times {vcvt\.u32\.f32\ts[0-9]+, s[0-9]+} 1 } } */
short f64_to_s16 (double a) { return (short)a; }
/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */
unsigned short f64_to_u16 (double a) { return (unsigned short)a; }
/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */
|