(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
nios2/
custom-fp-double.c
       1  /* Test generation of all double-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-frdxhi=40")
      13  #pragma GCC target ("custom-frdxlo=41")
      14  #pragma GCC target ("custom-frdy=42")
      15  #pragma GCC target ("custom-fwrx=43")
      16  #pragma GCC target ("custom-fwry=44")
      17  
      18  #pragma GCC target ("custom-fabsd=100")
      19  #pragma GCC target ("custom-faddd=101")
      20  #pragma GCC target ("custom-fatand=102")
      21  #pragma GCC target ("custom-fcosd=103")
      22  #pragma GCC target ("custom-fdivd=104")
      23  #pragma GCC target ("custom-fexpd=105")
      24  #pragma GCC target ("custom-flogd=106")
      25  #pragma GCC target ("custom-fmaxd=107")
      26  #pragma GCC target ("custom-fmind=108")
      27  #pragma GCC target ("custom-fmuld=109")
      28  #pragma GCC target ("custom-fnegd=110")
      29  #pragma GCC target ("custom-fsind=111")
      30  #pragma GCC target ("custom-fsqrtd=112")
      31  #pragma GCC target ("custom-fsubd=113")
      32  #pragma GCC target ("custom-ftand=114")
      33  #pragma GCC target ("custom-fcmpeqd=200")
      34  #pragma GCC target ("custom-fcmpged=201")
      35  #pragma GCC target ("custom-fcmpgtd=202")
      36  #pragma GCC target ("custom-fcmpled=203")
      37  #pragma GCC target ("custom-fcmpltd=204")
      38  #pragma GCC target ("custom-fcmpned=205")
      39  
      40  void
      41  custom_fp (double a, double b, double *fp, int *ip)
      42  {
      43    fp[0] = fabs (a);
      44    fp[1] = a + b;
      45    fp[2] = atan (a);
      46    fp[3] = cos (a);
      47    fp[4] = a / b;
      48    fp[5] = exp (a);
      49    fp[6] = log (a);
      50    fp[7] = fmax (a, b);
      51    fp[8] = fmin (a, b);
      52    fp[9] = a * b;
      53    fp[10] = -b;
      54    fp[11] = sin (b);
      55    fp[12] = sqrt (a);
      56    fp[13] = a - b;
      57    fp[14] = tan (a);
      58    ip[0] = (a == fp[0]);
      59    ip[1] = (a >= fp[1]);
      60    ip[2] = (a > fp[2]);
      61    ip[3] = (a <= fp[3]);
      62    ip[4] = (a < fp[4]);
      63    ip[5] = (a != fp[5]);
      64  }
      65  
      66  /* { dg-final { scan-assembler "custom\\t100, .* # fabsd .*" } } */
      67  /* { dg-final { scan-assembler "custom\\t101, .* # faddd .*" } } */
      68  /* { dg-final { scan-assembler "custom\\t102, .* # fatand .*" } } */
      69  /* { dg-final { scan-assembler "custom\\t103, .* # fcosd .*" } } */
      70  /* { dg-final { scan-assembler "custom\\t104, .* # fdivd .*" } } */
      71  /* { dg-final { scan-assembler "custom\\t105, .* # fexpd .*" } } */
      72  /* { dg-final { scan-assembler "custom\\t106, .* # flogd .*" } } */
      73  /* { dg-final { scan-assembler "custom\\t107, .* # fmaxd .*" } } */
      74  /* { dg-final { scan-assembler "custom\\t108, .* # fmind .*" } } */
      75  /* { dg-final { scan-assembler "custom\\t109, .* # fmuld .*" } } */
      76  /* { dg-final { scan-assembler "custom\\t110, .* # fnegd .*" } } */
      77  /* { dg-final { scan-assembler "custom\\t111, .* # fsind .*" } } */
      78  /* { dg-final { scan-assembler "custom\\t112, .* # fsqrtd .*" } } */
      79  /* { dg-final { scan-assembler "custom\\t113, .* # fsubd .*" } } */
      80  /* { dg-final { scan-assembler "custom\\t114, .* # ftand .*" } } */
      81  /* { dg-final { scan-assembler "custom\\t200, .* # fcmpeqd .*" } } */
      82  /* { dg-final { scan-assembler "custom\\t201, .* # fcmpged .*" } } */
      83  /* { dg-final { scan-assembler "custom\\t202, .* # fcmpgtd .*" } } */
      84  /* { dg-final { scan-assembler "custom\\t203, .* # fcmpled .*" } } */
      85  /* { dg-final { scan-assembler "custom\\t204, .* # fcmpltd .*" } } */
      86  /* { dg-final { scan-assembler "custom\\t205, .* # fcmpned .*" } } */