(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
fmul_fcvt_1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-save-temps -O2 -fno-inline" } */
       3  
       4  #define FUNC_DEFS(__a)	\
       5  int			\
       6  sffoo##__a (float x)	\
       7  {			\
       8    return x * __a##.0f;	\
       9  }			\
      10  			\
      11  unsigned int		\
      12  usffoo##__a (float x)	\
      13  {			\
      14    return x * __a##.0f;	\
      15  }			\
      16  			\
      17  long			\
      18  lsffoo##__a (float x)	\
      19  {			\
      20    return x * __a##.0f;	\
      21  }			\
      22  			\
      23  unsigned long		\
      24  ulsffoo##__a (float x)	\
      25  {			\
      26    return x * __a##.0f;	\
      27  }
      28  
      29  #define FUNC_DEFD(__a)	\
      30  long long			\
      31  dffoo##__a (double x)	\
      32  {			\
      33    return x * __a##.0;	\
      34  }			\
      35  			\
      36  unsigned long long	\
      37  udffoo##__a (double x)	\
      38  {			\
      39    return x * __a##.0;	\
      40  }			\
      41  int			\
      42  sdffoo##__a (double x)	\
      43  {			\
      44    return x * __a##.0;	\
      45  }			\
      46  			\
      47  unsigned int		\
      48  usdffoo##__a (double x)	\
      49  {			\
      50    return x * __a##.0;	\
      51  }
      52  
      53  FUNC_DEFS (4)
      54  FUNC_DEFD (4)
      55  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#2" 1 } } */
      56  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#2" 1 } } */
      57  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#2" 1 } } */
      58  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#2" 1 } } */
      59  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#2" 1 } } */
      60  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#2" 1 } } */
      61  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#2" 1 } } */
      62  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#2" 1 } } */
      63  
      64  FUNC_DEFS (8)
      65  FUNC_DEFD (8)
      66  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#3" 1 } } */
      67  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#3" 1 } } */
      68  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#3" 1 } } */
      69  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#3" 1 } } */
      70  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#3" 1 } } */
      71  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#3" 1 } } */
      72  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#3" 1 } } */
      73  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#3" 1 } } */
      74  
      75  FUNC_DEFS (16)
      76  FUNC_DEFD (16)
      77  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#4" 1 } } */
      78  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#4" 1 } } */
      79  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#4" 1 } } */
      80  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#4" 1 } } */
      81  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#4" 1 } } */
      82  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#4" 1 } } */
      83  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#4" 1 } } */
      84  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#4" 1 } } */
      85  
      86  FUNC_DEFS (32)
      87  FUNC_DEFD (32)
      88  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#5" 1 } } */
      89  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#5" 1 } } */
      90  /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#5" 1 } } */
      91  /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#5" 1 } } */
      92  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#5" 1 } } */
      93  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#5" 1 } } */
      94  /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#5" 1 } } */
      95  /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#5" 1 } } */
      96  
      97  #define FUNC_TESTS(__a, __b)					\
      98  do								\
      99    {								\
     100      if (sffoo##__a (__b) != (int)(__b * __a))			\
     101        __builtin_abort ();					\
     102      if (usffoo##__a (__b) != (unsigned int)(__b * __a))	\
     103        __builtin_abort ();					\
     104      if (lsffoo##__a (__b) != (long long)(__b * __a))		\
     105        __builtin_abort ();					\
     106      if (ulsffoo##__a (__b) != (unsigned long long)(__b * __a))	\
     107        __builtin_abort ();					\
     108    } while (0)
     109  
     110  #define FUNC_TESTD(__a, __b)					\
     111  do								\
     112    {								\
     113      if (dffoo##__a (__b) != (long long)(__b * __a))		\
     114        __builtin_abort ();					\
     115      if (udffoo##__a (__b) != (unsigned long long)(__b * __a))	\
     116        __builtin_abort ();					\
     117      if (sdffoo##__a (__b) != (int)(__b * __a))			\
     118        __builtin_abort ();					\
     119      if (usdffoo##__a (__b) != (unsigned int)(__b * __a))	\
     120        __builtin_abort ();					\
     121    } while (0)
     122  
     123  int
     124  main (void)
     125  {
     126    float i;
     127  
     128    for (i = -0.001; i < 32.0; i += 1.0f)
     129      {
     130        FUNC_TESTS (4, i);
     131        FUNC_TESTS (8, i);
     132        FUNC_TESTS (16, i);
     133        FUNC_TESTS (32, i);
     134  
     135        FUNC_TESTD (4, i);
     136        FUNC_TESTD (8, i);
     137        FUNC_TESTD (16, i);
     138        FUNC_TESTD (32, i);
     139      }
     140    return 0;
     141  }