(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
sse4_1-roundsd.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target vsx_hw } */
       3  /* { dg-options "-O2 -mvsx" } */
       4  
       5  #include <stdio.h>
       6  #define NO_WARN_X86_INTRINSICS 1
       7  #include <smmintrin.h>
       8  
       9  #define VEC_T __m128d
      10  #define FP_T double
      11  
      12  #define ROUND_INTRIN(x, y, mode) _mm_round_sd (x, y, mode)
      13  
      14  #include "sse4_1-round-data.h"
      15  
      16  static struct data2 data[] = {
      17    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      18      .value2 = { .f = {  0.00, IGNORED } } },
      19    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      20      .value2 = { .f = {  0.25, IGNORED } } },
      21    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      22      .value2 = { .f = {  0.50, IGNORED } } },
      23    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      24      .value2 = { .f = {  0.75, IGNORED } } },
      25  
      26    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      27      .value2 = { .f = {  0x1.ffffffffffffcp+50, IGNORED } } },
      28    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      29      .value2 = { .f = {  0x1.ffffffffffffdp+50, IGNORED } } },
      30    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      31      .value2 = { .f = {  0x1.ffffffffffffep+50, IGNORED } } },
      32    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      33      .value2 = { .f = {  0x1.fffffffffffffp+50, IGNORED } } },
      34    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      35      .value2 = { .f = {  0x1.0000000000000p+51, IGNORED } } },
      36    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      37      .value2 = { .f = {  0x1.0000000000001p+51, IGNORED } } },
      38    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      39      .value2 = { .f = {  0x1.0000000000002p+51, IGNORED } } },
      40    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      41      .value2 = { .f = {  0x1.0000000000003p+51, IGNORED } } },
      42  
      43    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      44      .value2 = { .f = {  0x1.ffffffffffffep+51, IGNORED } } },
      45    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      46      .value2 = { .f = {  0x1.fffffffffffffp+51, IGNORED } } },
      47    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      48      .value2 = { .f = {  0x1.0000000000000p+52, IGNORED } } },
      49    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      50      .value2 = { .f = {  0x1.0000000000001p+52, IGNORED } } },
      51  
      52    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      53      .value2 = { .f = { -0x1.0000000000001p+52, IGNORED } } },
      54    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      55      .value2 = { .f = { -0x1.0000000000000p+52, IGNORED } } },
      56    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      57      .value2 = { .f = { -0x1.fffffffffffffp+51, IGNORED } } },
      58    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      59      .value2 = { .f = { -0x1.ffffffffffffep+51, IGNORED } } },
      60  
      61    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      62      .value2 = { .f = { -0x1.0000000000004p+51, IGNORED } } },
      63    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      64      .value2 = { .f = { -0x1.0000000000002p+51, IGNORED } } },
      65    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      66      .value2 = { .f = { -0x1.0000000000001p+51, IGNORED } } },
      67    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      68      .value2 = { .f = { -0x1.0000000000000p+51, IGNORED } } },
      69    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      70      .value2 = { .f = { -0x1.ffffffffffffcp+50, IGNORED } } },
      71    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      72      .value2 = { .f = { -0x1.ffffffffffffep+50, IGNORED } } },
      73    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      74      .value2 = { .f = { -0x1.ffffffffffffdp+50, IGNORED } } },
      75    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      76      .value2 = { .f = { -0x1.ffffffffffffcp+50, IGNORED } } },
      77  
      78    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      79      .value2 = { .f = { -1.00, IGNORED } } },
      80    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      81      .value2 = { .f = { -0.75, IGNORED } } },
      82    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      83      .value2 = { .f = { -0.50, IGNORED } } },
      84    { .value1 = { .f = { IGNORED, PASSTHROUGH } },
      85      .value2 = { .f = { -0.25, IGNORED } } }
      86  };
      87  
      88  static union value answers_NEAREST_INT[] = {
      89    { .f = {  0.00, PASSTHROUGH } },
      90    { .f = {  0.00, PASSTHROUGH } },
      91    { .f = {  0.00, PASSTHROUGH } },
      92    { .f = {  1.00, PASSTHROUGH } },
      93  
      94    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
      95    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
      96    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
      97    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
      98    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
      99    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     100    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     101    { .f = {  0x1.0000000000004p+51, PASSTHROUGH } },
     102  
     103    { .f = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
     104    { .f = {  0x1.0000000000000p+52, PASSTHROUGH } },
     105    { .f = {  0x1.0000000000000p+52, PASSTHROUGH } },
     106    { .f = {  0x1.0000000000001p+52, PASSTHROUGH } },
     107  
     108    { .f = { -0x1.0000000000001p+52, PASSTHROUGH } },
     109    { .f = { -0x1.0000000000000p+52, PASSTHROUGH } },
     110    { .f = { -0x1.0000000000000p+52, PASSTHROUGH } },
     111    { .f = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
     112  
     113    { .f = { -0x1.0000000000004p+51, PASSTHROUGH } },
     114    { .f = { -0x1.0000000000002p+51, PASSTHROUGH } },
     115    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     116    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     117    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     118    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     119    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     120    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     121  
     122    { .f = { -1.00, PASSTHROUGH } },
     123    { .f = { -1.00, PASSTHROUGH } },
     124    { .f = { -0.00, PASSTHROUGH } },
     125    { .f = { -0.00, PASSTHROUGH } }
     126  };
     127  
     128  static union value answers_NEG_INF[] = {
     129    { .f = {  0.00, PASSTHROUGH } },
     130    { .f = {  0.00, PASSTHROUGH } },
     131    { .f = {  0.00, PASSTHROUGH } },
     132    { .f = {  0.00, PASSTHROUGH } },
     133  
     134    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     135    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     136    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     137    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     138    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     139    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     140    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     141    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     142  
     143    { .f = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
     144    { .f = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
     145    { .f = {  0x1.0000000000000p+52, PASSTHROUGH } },
     146    { .f = {  0x1.0000000000001p+52, PASSTHROUGH } },
     147  
     148    { .f = { -0x1.0000000000001p+52, PASSTHROUGH } },
     149    { .f = { -0x1.0000000000000p+52, PASSTHROUGH } },
     150    { .f = { -0x1.0000000000000p+52, PASSTHROUGH } },
     151    { .f = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
     152  
     153    { .f = { -0x1.0000000000004p+51, PASSTHROUGH } },
     154    { .f = { -0x1.0000000000002p+51, PASSTHROUGH } },
     155    { .f = { -0x1.0000000000002p+51, PASSTHROUGH } },
     156    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     157    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     158    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     159    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     160    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     161  
     162    { .f = { -1.00, PASSTHROUGH } },
     163    { .f = { -1.00, PASSTHROUGH } },
     164    { .f = { -1.00, PASSTHROUGH } },
     165    { .f = { -1.00, PASSTHROUGH } }
     166  };
     167  
     168  static union value answers_POS_INF[] = {
     169    { .f = {  0.00, PASSTHROUGH } },
     170    { .f = {  1.00, PASSTHROUGH } },
     171    { .f = {  1.00, PASSTHROUGH } },
     172    { .f = {  1.00, PASSTHROUGH } },
     173  
     174    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     175    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     176    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     177    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     178    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     179    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     180    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     181    { .f = {  0x1.0000000000004p+51, PASSTHROUGH } },
     182  
     183    { .f = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
     184    { .f = {  0x1.0000000000000p+52, PASSTHROUGH } },
     185    { .f = {  0x1.0000000000000p+52, PASSTHROUGH } },
     186    { .f = {  0x1.0000000000001p+52, PASSTHROUGH } },
     187  
     188    { .f = { -0x1.0000000000001p+52, PASSTHROUGH } },
     189    { .f = { -0x1.0000000000000p+52, PASSTHROUGH } },
     190    { .f = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
     191    { .f = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
     192  
     193    { .f = { -0x1.0000000000004p+51, PASSTHROUGH } },
     194    { .f = { -0x1.0000000000002p+51, PASSTHROUGH } },
     195    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     196    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     197    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     198    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     199    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     200    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     201  
     202    { .f = { -1.00, PASSTHROUGH } },
     203    { .f = {  0.00, PASSTHROUGH } },
     204    { .f = {  0.00, PASSTHROUGH } },
     205    { .f = {  0.00, PASSTHROUGH } }
     206  };
     207  
     208  static union value answers_ZERO[] = {
     209    { .f = {  0.00, PASSTHROUGH } },
     210    { .f = {  0.00, PASSTHROUGH } },
     211    { .f = {  0.00, PASSTHROUGH } },
     212    { .f = {  0.00, PASSTHROUGH } },
     213  
     214    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     215    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     216    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     217    { .f = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
     218    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     219    { .f = {  0x1.0000000000000p+51, PASSTHROUGH } },
     220    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     221    { .f = {  0x1.0000000000002p+51, PASSTHROUGH } },
     222  
     223    { .f = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
     224    { .f = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
     225    { .f = {  0x1.0000000000000p+52, PASSTHROUGH } },
     226    { .f = {  0x1.0000000000001p+52, PASSTHROUGH } },
     227  
     228    { .f = { -0x1.0000000000001p+52, PASSTHROUGH } },
     229    { .f = { -0x1.0000000000000p+52, PASSTHROUGH } },
     230    { .f = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
     231    { .f = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
     232  
     233    { .f = { -0x1.0000000000004p+51, PASSTHROUGH } },
     234    { .f = { -0x1.0000000000002p+51, PASSTHROUGH } },
     235    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     236    { .f = { -0x1.0000000000000p+51, PASSTHROUGH } },
     237    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     238    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     239    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     240    { .f = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
     241  
     242    { .f = { -1.00, PASSTHROUGH } },
     243    { .f = {  0.00, PASSTHROUGH } },
     244    { .f = {  0.00, PASSTHROUGH } },
     245    { .f = {  0.00, PASSTHROUGH } }
     246  };
     247  
     248  union value *answers[] = {
     249    answers_NEAREST_INT,
     250    answers_NEG_INF,
     251    answers_POS_INF,
     252    answers_ZERO,
     253    0 /* CUR_DIRECTION answers depend on current rounding mode.  */
     254  };
     255  
     256  #include "sse4_1-round3.h"