(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
vsx-vector-6.h
       1  /* This test code is included into vsx-vector-6.p7.c, vsx-vector-6.p8.c
       2     and vsx-vector-6.p9.c.  The .c files have the tests for the number
       3     of instructions generated for each cpu type.  */
       4  
       5  #include <altivec.h>
       6  
       7  typedef struct {
       8    vector double d;
       9    vector float f;
      10    vector long sl;
      11    vector int si;
      12    vector short ss;
      13    vector char sc;
      14    vector unsigned int ui;
      15    vector unsigned short int us;
      16    vector unsigned char uc;
      17    vector bool long long bll;
      18    vector bool long bl;
      19    vector bool int bi;
      20    vector bool short bs;
      21    vector bool char bc;
      22  } opnd_t;
      23  
      24  void
      25  func_1op (opnd_t *dst, opnd_t *src)
      26  {
      27    dst[0].d = vec_abs (src[0].d);
      28    dst[1].d = vec_ceil (src[1].d);
      29    dst[2].d = vec_floor (src[2].d);
      30    dst[3].d = vec_nearbyint (src[3].d);
      31    dst[4].d = vec_rint (src[4].d);
      32    dst[5].d = vec_sqrt (src[5].d);
      33    dst[6].d = vec_trunc (src[6].d);
      34    dst[7].f = vec_trunc (src[7].f);
      35  }
      36  
      37  void
      38  func_2op (opnd_t *dst, opnd_t *src0, opnd_t *src1)
      39  {
      40    dst[0].d = vec_add (src0[0].d, src1[0].d);
      41    dst[1].d = vec_div (src0[1].d, src1[1].d);
      42    dst[2].d = vec_max (src0[2].d, src1[2].d);
      43    dst[3].uc = vec_max (src0[3].uc, src1[3].uc);
      44    dst[4].d = vec_min (src0[4].d, src1[4].d);
      45    dst[5].d = vec_mul (src0[5].d, src1[5].d);
      46    dst[6].d = vec_sub (src0[6].d, src1[6].d);
      47  }
      48  
      49  void
      50  func_2lop (opnd_t *dst, opnd_t *src0, opnd_t *src1)
      51  {
      52    dst[0].d = vec_and (src0[0].d, src1[0].d);
      53    dst[1].d = vec_and (src0[1].d, src1[1].bl);
      54    dst[2].d = vec_and (src0[2].bl, src1[2].d);
      55  
      56    dst[3].d = vec_andc (src0[3].d, src1[3].d);
      57    dst[4].d = vec_andc (src0[4].d, src1[4].bl);
      58    dst[5].d = vec_andc (src0[5].bl, src1[5].d);
      59    dst[6].d = vec_andc (src0[6].bll, src1[6].d);
      60    dst[7].d = vec_andc (src0[7].d, src1[7].bll);
      61    dst[8].bi = vec_andc (src0[8].bi, src1[8].bi);
      62    dst[9].bs = vec_andc (src0[9].bs, src1[9].bs);
      63    dst[10].bc = vec_andc (src0[10].bc, src1[10].bc);
      64    dst[11].f = vec_andc (src0[11].f, src1[11].f);
      65    dst[12].f = vec_andc (src0[12].bi, src1[12].f);
      66    dst[13].f = vec_andc (src0[13].f, src1[13].bi);
      67    dst[14].d = vec_andc (src0[14].bll, src1[14].d);
      68    dst[15].d = vec_andc (src0[15].d, src1[15].bll);
      69  
      70    dst[16].d = vec_nor (src0[16].d, src1[16].d);
      71    dst[17].f = vec_nor (src0[17].f, src1[17].f);
      72    dst[18].bi = vec_nor (src0[18].bi, src1[18].bi);
      73    dst[19].bs = vec_nor (src0[19].bs, src1[19].bs);
      74    dst[20].bc = vec_nor (src0[20].bc, src1[20].bc);
      75  
      76    dst[21].d = vec_or (src0[21].d, src1[21].d);
      77    dst[22].d = vec_or (src0[22].d, src1[22].bl);
      78    dst[23].d = vec_or (src0[23].bl, src1[23].d);
      79    dst[24].d = vec_or (src0[24].bll, src1[24].d);
      80    dst[25].d = vec_or (src0[25].d, src1[25].bll);
      81    dst[26].f = vec_or (src0[26].f, src1[26].f);
      82    dst[27].bi = vec_or (src0[27].bi, src1[27].bi);
      83    dst[28].bs = vec_or (src0[28].bs, src1[28].bs);
      84    dst[29].bc = vec_or (src0[29].bc, src1[29].bc);
      85  
      86    dst[30].d = vec_xor (src0[30].d, src1[30].d);
      87    dst[31].d = vec_xor (src0[31].d, src1[31].bl);
      88    dst[32].d = vec_xor (src0[32].bl, src1[32].d);
      89  }
      90  
      91  void
      92  func_cmp (opnd_t *dst, opnd_t *src0, opnd_t *src1)
      93  {
      94    dst[0].bl = vec_cmpeq (src0[0].d, src1[0].d);
      95    dst[1].bl = vec_cmpgt (src0[1].d, src1[1].d);
      96    dst[2].bl = vec_cmpge (src0[2].d, src1[2].d);
      97    dst[3].bl = vec_cmplt (src0[3].d, src1[3].d);
      98    dst[4].bl = vec_cmple (src0[4].d, src1[4].d);
      99  }
     100  
     101  void
     102  func_all_cmp (int *dst, opnd_t *src0, opnd_t *src1)
     103  {
     104    dst[0] = vec_all_eq (src0[0].d, src1[0].d);
     105    dst[1] = vec_all_ge (src0[1].d, src1[1].d);
     106    dst[2] = vec_all_gt (src0[2].d, src1[2].d);
     107    dst[3] = vec_all_le (src0[3].d, src1[3].d);
     108    dst[4] = vec_all_lt (src0[4].d, src1[4].d);
     109    dst[5] = vec_all_nan (src0[5].d);
     110    dst[6] = vec_all_ne (src0[6].d, src1[6].d);
     111    dst[7] = vec_all_nge (src0[7].d, src1[7].d);
     112    dst[8] = vec_all_ngt (src0[8].d, src1[8].d);
     113    dst[9] = vec_all_nle (src0[9].d, src1[9].d);
     114    dst[10] = vec_all_nlt (src0[10].d, src1[10].d);
     115    dst[11] = vec_all_numeric (src0[11].d);
     116    dst[12] = vec_any_eq (src0[12].d, src1[12].d);
     117    dst[13] = vec_any_ge (src0[13].d, src1[13].d);
     118    dst[14] = vec_any_gt (src0[14].d, src1[14].d);
     119    dst[15] = vec_any_le (src0[15].d, src1[15].d);
     120    dst[16] = vec_any_lt (src0[16].d, src1[16].d);
     121    dst[17] = vec_any_nan (src0[17].d);
     122    dst[18] = vec_any_ne (src0[18].d, src1[18].d);
     123    dst[19] = vec_any_nge (src0[19].d, src1[19].d);
     124    dst[20] = vec_any_ngt (src0[20].d, src1[20].d);
     125    dst[21] = vec_any_nle (src0[21].d, src1[21].d);
     126    dst[22] = vec_any_nlt (src0[22].d, src1[22].d);
     127    dst[23] = vec_any_numeric (src0[23].d);
     128  }
     129  
     130  void
     131  func_3op (opnd_t *dst, opnd_t *src0, opnd_t *src1, opnd_t *src2)
     132  {
     133    dst[0].d = vec_madd (src0[0].d, src1[0].d, src2[0].d);
     134    dst[1].d = vec_msub (src0[1].d, src1[1].d, src2[1].d);
     135    dst[2].d = vec_nmadd (src0[2].d, src1[2].d, src2[2].d);
     136    dst[3].d = vec_nmsub (src0[3].d, src1[3].d, src2[3].d);
     137  
     138    dst[4].f = vec_madd (src0[4].f, src1[4].f, src2[4].f);
     139    dst[5].f = vec_msub (src0[5].f, src1[5].f, src2[5].f);
     140    dst[6].f = vec_nmsub (src0[6].f, src1[6].f, src2[6].f);
     141    dst[7].f = vec_nmadd (src0[7].f, src1[7].f, src2[7].f);
     142  
     143  #if defined (__BIG_ENDIAN__) || defined (_ARCH_PWR9)
     144    dst[8].d = vec_perm (src0[8].d, src1[8].d, src2[8].uc);
     145  #else
     146    dst[8].d = vec_perm (src0[8].d, src1[8].d, ~src2[8].uc);
     147  #endif
     148  
     149    dst[9].d = vec_sel (src0[9].d, src1[9].d, src2[9].d);
     150    dst[10].d = vec_sel (src0[10].d, src1[10].d, src2[10].bl);
     151  
     152    dst[11].si = vec_msums(src0[11].ss, src1[11].ss, src2[11].si);
     153    dst[12].ui = vec_msums(src0[12].us, src1[12].us, src2[12].ui);
     154  }