(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
mips/
mips-3d-1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-mips3d forbid_cpu=octeon.* (REQUIRES_STDLIB)" } */
       3  
       4  /* Test MIPS-3D builtin functions */
       5  #include <stdlib.h>
       6  #include <stdio.h>
       7  
       8  typedef float v2sf __attribute__ ((vector_size(8)));
       9  
      10  NOMIPS16 int main ()
      11  {
      12    int little_endian;
      13    v2sf a, b, c, d;
      14    float f1, f2, f3, f4, f5, f6;
      15    double d1, d2, d3, d4, d5, d6, d7, d8, d9;
      16    v2sf ps1, ps2, ps3, ps4, ps5, ps6;
      17  
      18    union { long long ll; int i[2]; } endianness_test;
      19    endianness_test.ll = 1;
      20    little_endian = endianness_test.i[0];
      21  
      22    /* addr.ps */
      23    a = (v2sf) {12, 34};
      24    b = (v2sf) {45, 67};
      25    c = __builtin_mips_addr_ps (a, b);
      26    if (little_endian)
      27      d = (v2sf) {112, 46};
      28    else
      29      d = (v2sf) {46, 112};
      30  
      31    if (!__builtin_mips_all_c_eq_ps(c, d))
      32       abort ();
      33  
      34    /* mulr.ps */
      35    a = (v2sf) {12, 34};
      36    b = (v2sf) {45, 67};
      37    c = __builtin_mips_mulr_ps (a, b);
      38    if (little_endian)
      39      d = (v2sf) {3015, 408};
      40    else
      41      d = (v2sf) {408, 3015};
      42  
      43    if (!__builtin_mips_all_c_eq_ps(c, d))
      44       abort ();
      45  
      46    /* cvt.pw.ps */
      47    a = (v2sf) {12345.34, 67890.45};
      48    b = __builtin_mips_cvt_pw_ps (a);
      49  
      50    /* cvt.ps.pw */
      51    c = __builtin_mips_cvt_ps_pw (b);
      52    d = (v2sf) {12345.0, 67890.0};
      53  
      54    if (!__builtin_mips_all_c_eq_ps(c, d))
      55       abort ();
      56  
      57    /* recip1.s recip2.s */
      58    f1 = 40;
      59    f2 = __builtin_mips_recip1_s (f1);
      60    f3 = __builtin_mips_recip2_s (f2, f1);
      61    f4 = f2 + f2 * f3;
      62    f5 = 0.025;
      63  
      64    if (f4 != f5)
      65      abort ();
      66  
      67    /* recip1.d recip2.d */
      68    d1 = 80;
      69    d2 = __builtin_mips_recip1_d (d1);
      70    d3 = __builtin_mips_recip2_d (d2, d1);
      71    d4 = d2 + d2 * d3;
      72    d5 = __builtin_mips_recip2_d (d4, d1);
      73    d6 = d4 + d4 * d5;
      74    d7 = 0.0125;
      75  
      76    if (d6 != d7)
      77      abort ();
      78  
      79    /* recip1.ps recip2.ps */
      80    ps1 = (v2sf) {100, 200};
      81    ps2 = __builtin_mips_recip1_ps (ps1);
      82    ps3 = __builtin_mips_recip2_ps (ps2, ps1);
      83    ps4 = ps2 + ps2 * ps3;
      84    ps5 = (v2sf) {0.01, 0.005};
      85  
      86    if (!__builtin_mips_all_c_eq_ps(ps4, ps5))
      87      abort ();
      88  
      89    /* rsqrt1.s rsqrt2.s */
      90    f1 = 400;
      91    f2 = __builtin_mips_rsqrt1_s (f1);
      92    f3 = f2 * f1;
      93    f4 = __builtin_mips_rsqrt2_s (f3, f2);
      94    f5 = f2 + f2 * f4;
      95    f6 = 0.05;
      96  
      97    if (f5 != f6)
      98      abort ();
      99  
     100    /* rsqrt1.d rsqrt2.d */
     101    d1 = 1600;
     102    d2 = __builtin_mips_rsqrt1_d (d1);
     103    d3 = d2 * d1;
     104    d4 = __builtin_mips_rsqrt2_d (d3, d2);
     105    d5 = d2 + d2 * d4;
     106    d6 = d1 * d5;
     107    d7 = __builtin_mips_rsqrt2_d (d6, d5);
     108    d8 = d5 + d5 * d7;
     109    d9 = 0.025;
     110  
     111    if (d8 != d9)
     112      abort ();
     113  
     114    /* rsqrt1.ps rsqrt2.ps */
     115    ps1 = (v2sf) {400, 100};
     116    ps2 = __builtin_mips_rsqrt1_ps (ps1);
     117    ps3 = ps2 * ps1;
     118    ps4 = __builtin_mips_rsqrt2_ps (ps3, ps2);
     119    ps5 = ps2 + ps2 * ps4;
     120    ps6 = (v2sf) {0.05, 0.1};
     121  
     122    if (!__builtin_mips_all_c_eq_ps(ps5, ps6))
     123       abort ();
     124  
     125    printf ("Test Passes\n");
     126    exit (0);
     127  }