(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
armv8_2-fp16-conv-1.c
       1  /* { dg-do compile }  */
       2  /* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok }  */
       3  /* { dg-options "-O2" }  */
       4  /* { dg-add-options arm_v8_2a_fp16_scalar }  */
       5  
       6  /* Test ARMv8.2 FP16 conversions.  */
       7  #include <arm_fp16.h>
       8  
       9  float
      10  f16_to_f32 (__fp16 a)
      11  {
      12    return (float)a;
      13  }
      14  
      15  float
      16  f16_to_pf32 (__fp16* a)
      17  {
      18    return (float)*a;
      19  }
      20  
      21  short
      22  f16_to_s16 (__fp16 a)
      23  {
      24    return (short)a;
      25  }
      26  
      27  short
      28  pf16_to_s16 (__fp16* a)
      29  {
      30    return (short)*a;
      31  }
      32  
      33  /* { dg-final { scan-assembler-times {vcvtb\.f32\.f16\ts[0-9]+, s[0-9]+} 4 } }  */
      34  
      35  __fp16
      36  f32_to_f16 (float a)
      37  {
      38    return (__fp16)a;
      39  }
      40  
      41  void
      42  f32_to_pf16 (__fp16* x, float a)
      43  {
      44    *x = (__fp16)a;
      45  }
      46  
      47  __fp16
      48  s16_to_f16 (short a)
      49  {
      50    return (__fp16)a;
      51  }
      52  
      53  void
      54  s16_to_pf16 (__fp16* x, short a)
      55  {
      56    *x = (__fp16)a;
      57  }
      58  
      59  /* { dg-final { scan-assembler-times {vcvtb\.f16\.f32\ts[0-9]+, s[0-9]+} 4 } }  */
      60  
      61  float
      62  s16_to_f32 (short a)
      63  {
      64    return (float)a;
      65  }
      66  
      67  /* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 3 } }  */
      68  
      69  short
      70  f32_to_s16 (float a)
      71  {
      72    return (short)a;
      73  }
      74  
      75  /* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 3 } }  */
      76  
      77  unsigned short
      78  f32_to_u16 (float a)
      79  {
      80    return (unsigned short)a;
      81  }
      82  
      83  /* { dg-final { scan-assembler-times {vcvt\.u32\.f32\ts[0-9]+, s[0-9]+} 1 } }  */
      84  
      85  short
      86  f64_to_s16 (double a)
      87  {
      88    return (short)a;
      89  }
      90  
      91  /* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } }  */
      92  
      93  unsigned short
      94  f64_to_u16 (double a)
      95  {
      96    return (unsigned short)a;
      97  }
      98  
      99  /* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } }  */
     100  
     101