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