(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
nios2/
custom-fp-float.c
       1  /* Test generation of all single-float custom instructions.  */
       2  
       3  /* { dg-do compile } */
       4  /* { dg-options "-O1 -ffinite-math-only -funsafe-math-optimizations" } */
       5  
       6  /* -O1 in the options is significant.  Without it FP operations may not be
       7     optimized to custom instructions.  */
       8  
       9  #include <stdio.h> 
      10  #include <math.h>
      11  
      12  #pragma GCC target ("custom-fabss=100")
      13  #pragma GCC target ("custom-fadds=101")
      14  #pragma GCC target ("custom-fatans=102")
      15  #pragma GCC target ("custom-fcoss=103")
      16  #pragma GCC target ("custom-fdivs=104")
      17  #pragma GCC target ("custom-fexps=105")
      18  #pragma GCC target ("custom-flogs=106")
      19  #pragma GCC target ("custom-fmaxs=107")
      20  #pragma GCC target ("custom-fmins=108")
      21  #pragma GCC target ("custom-fmuls=109")
      22  #pragma GCC target ("custom-fnegs=110")
      23  #pragma GCC target ("custom-fsins=111")
      24  #pragma GCC target ("custom-fsqrts=112")
      25  #pragma GCC target ("custom-fsubs=113")
      26  #pragma GCC target ("custom-ftans=114")
      27  #pragma GCC target ("custom-fcmpeqs=200")
      28  #pragma GCC target ("custom-fcmpges=201")
      29  #pragma GCC target ("custom-fcmpgts=202")
      30  #pragma GCC target ("custom-fcmples=203")
      31  #pragma GCC target ("custom-fcmplts=204")
      32  #pragma GCC target ("custom-fcmpnes=205")
      33  
      34  void
      35  custom_fp (float a, float b, float *fp, int *ip)
      36  {
      37    fp[0] = fabsf (a);
      38    fp[1] = a + b;
      39    fp[2] = atanf (a);
      40    fp[3] = cosf (a);
      41    fp[4] = a / b;
      42    fp[5] = expf (a);
      43    fp[6] = logf (a);
      44    fp[7] = fmaxf (a, b);
      45    fp[8] = fminf (a, b);
      46    fp[9] = a * b;
      47    fp[10] = -b;
      48    fp[11] = sinf (b);
      49    fp[12] = sqrtf (a);
      50    fp[13] = a - b;
      51    fp[14] = tanf (a);
      52    ip[0] = (a == fp[0]);
      53    ip[1] = (a >= fp[1]);
      54    ip[2] = (a > fp[2]);
      55    ip[3] = (a <= fp[3]);
      56    ip[4] = (a < fp[4]);
      57    ip[5] = (a != fp[5]);
      58  }
      59  
      60  /* { dg-final { scan-assembler "custom\\t100, .* # fabss .*" } } */
      61  /* { dg-final { scan-assembler "custom\\t101, .* # fadds .*" } } */
      62  /* { dg-final { scan-assembler "custom\\t102, .* # fatans .*" } } */
      63  /* { dg-final { scan-assembler "custom\\t103, .* # fcoss .*" } } */
      64  /* { dg-final { scan-assembler "custom\\t104, .* # fdivs .*" } } */
      65  /* { dg-final { scan-assembler "custom\\t105, .* # fexps .*" } } */
      66  /* { dg-final { scan-assembler "custom\\t106, .* # flogs .*" } } */
      67  /* { dg-final { scan-assembler "custom\\t107, .* # fmaxs .*" } } */
      68  /* { dg-final { scan-assembler "custom\\t108, .* # fmins .*" } } */
      69  /* { dg-final { scan-assembler "custom\\t109, .* # fmuls .*" } } */
      70  /* { dg-final { scan-assembler "custom\\t110, .* # fnegs .*" } } */
      71  /* { dg-final { scan-assembler "custom\\t111, .* # fsins .*" } } */
      72  /* { dg-final { scan-assembler "custom\\t112, .* # fsqrts .*" } } */
      73  /* { dg-final { scan-assembler "custom\\t113, .* # fsubs .*" } } */
      74  /* { dg-final { scan-assembler "custom\\t114, .* # ftans .*" } } */
      75  /* { dg-final { scan-assembler "custom\\t200, .* # fcmpeqs .*" } } */
      76  /* { dg-final { scan-assembler "custom\\t201, .* # fcmpges .*" } } */
      77  /* { dg-final { scan-assembler "custom\\t202, .* # fcmpgts .*" } } */
      78  /* { dg-final { scan-assembler "custom\\t203, .* # fcmples .*" } } */
      79  /* { dg-final { scan-assembler "custom\\t204, .* # fcmplts .*" } } */
      80  /* { dg-final { scan-assembler "custom\\t205, .* # fcmpnes .*" } } */