(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
vec-insert-word-runnable.c
       1  /* { dg-do run { target { power10_hw } } } */
       2  /* { dg-do link { target { ! power10_hw } } } */
       3  /* { dg-require-effective-target power10_ok } */
       4  /* { dg-options "-mdejagnu-cpu=power10 -save-temps" } */
       5  #include <altivec.h>
       6  
       7  #define DEBUG 0
       8  
       9  #if DEBUG
      10  #include <stdio.h>
      11  #endif
      12  
      13  extern void abort (void);
      14  
      15  int
      16  main (int argc, char *argv [])
      17  {
      18    int i;
      19    unsigned int index;
      20    vector unsigned char vresult_ch;
      21    vector unsigned char expected_vresult_ch;
      22    vector unsigned char src_va_ch;
      23    vector unsigned char src_vb_ch;
      24    unsigned char src_a_ch;
      25  
      26    vector unsigned short vresult_sh;
      27    vector unsigned short expected_vresult_sh;
      28    vector unsigned short src_va_sh;
      29    vector unsigned short src_vb_sh;
      30    unsigned short int src_a_sh;
      31  
      32    vector unsigned int vresult_int;
      33    vector unsigned int expected_vresult_int;
      34    vector unsigned int src_va_int;
      35    vector unsigned int src_vb_int;
      36    unsigned int src_a_int;
      37    
      38    vector unsigned long long vresult_ll;
      39    vector unsigned long long expected_vresult_ll;
      40    vector unsigned long long src_va_ll;
      41    unsigned long long int src_a_ll;
      42  
      43    /* Vector insert, low index, from GPR */
      44    src_a_ch = 79;
      45    index = 2;
      46    src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
      47  				       8, 9, 10, 11, 12, 13, 14, 15 };
      48    vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
      49  					0, 0, 0, 0, 0, 0, 0, 0 };
      50    expected_vresult_ch = (vector unsigned char) { 0, 1, 79, 3, 4, 5, 6, 7,
      51  				       8, 9, 10, 11, 12, 13, 14, 15 };
      52  						 
      53      vresult_ch = vec_insertl (src_a_ch, src_va_ch, index);
      54  
      55    if (!vec_all_eq (vresult_ch,  expected_vresult_ch)) {
      56  #if DEBUG
      57      printf("ERROR, vec_insertl (src_a_ch, src_va_ch, index)\n");
      58      for(i = 0; i < 16; i++)
      59        printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n",
      60  	     i, vresult_ch[i], i, expected_vresult_ch[i]);
      61  #else
      62      abort();
      63  #endif
      64    }
      65  
      66    src_a_sh = 79;
      67    index = 10;
      68    src_va_sh = (vector unsigned short int) { 0, 1, 2, 3, 4, 5, 6, 7 };
      69    vresult_sh = (vector unsigned short int) { 0, 0, 0, 0, 0, 0, 0, 0 };
      70    expected_vresult_sh = (vector unsigned short int) { 0, 1, 2, 3,
      71  						      4, 79, 6, 7 };
      72  
      73    vresult_sh = vec_insertl (src_a_sh, src_va_sh, index);
      74  
      75    if (!vec_all_eq (vresult_sh,  expected_vresult_sh)) {
      76  #if DEBUG
      77      printf("ERROR, vec_insertl (src_a_sh, src_va_sh, index)\n");
      78      for(i = 0; i < 8; i++)
      79        printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n",
      80  	     i, vresult_sh[i], i, expected_vresult_sh[i]);
      81  #else
      82      abort();
      83  #endif
      84    }
      85  
      86    src_a_int = 79;
      87    index = 8;
      88    src_va_int = (vector unsigned int) { 0, 1, 2, 3 };
      89    vresult_int = (vector unsigned int) { 0, 0, 0, 0 };
      90    expected_vresult_int = (vector unsigned int) { 0, 1, 79, 3 };
      91  
      92    vresult_int = vec_insertl (src_a_int, src_va_int, index);
      93  
      94    if (!vec_all_eq (vresult_int,  expected_vresult_int)) {
      95  #if DEBUG
      96      printf("ERROR, vec_insertl (src_a_int, src_va_int, index)\n");
      97      for(i = 0; i < 4; i++)
      98        printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n",
      99  	     i, vresult_int[i], i, expected_vresult_int[i]);
     100  #else
     101      abort();
     102  #endif
     103    }
     104  
     105    src_a_ll = 79;
     106    index = 8;
     107    src_va_ll = (vector unsigned long long) { 0, 1 };
     108    vresult_ll = (vector unsigned long long) { 0, 0 };
     109    expected_vresult_ll = (vector unsigned long long) { 0, 79 };
     110  
     111    vresult_ll = vec_insertl (src_a_ll, src_va_ll, index);
     112  
     113    if (!vec_all_eq (vresult_ll,  expected_vresult_ll)) {
     114  #if DEBUG
     115      printf("ERROR, vec_insertl (src_a_ll, src_va_ll, index)\n");
     116      for(i = 0; i < 2; i++)
     117        printf(" vresult_ll[%d] = %d, expected_vresult_ll[%d] = %d\n",
     118  	     i, vresult_ll[i], i, expected_vresult_ll[i]);
     119  #else
     120      abort();
     121  #endif
     122    }
     123  
     124    /* Vector insert, low index, from vector */
     125    index = 2;
     126    src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
     127  				       8, 9, 10, 11, 12, 13, 14, 15 };
     128    src_vb_ch = (vector unsigned char) { 10, 11, 12, 13, 14, 15, 16, 17,
     129  				       18, 19, 20, 21, 22, 23, 24, 25 };
     130    vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
     131  					0, 0, 0, 0, 0, 0, 0, 0 };
     132    expected_vresult_ch = (vector unsigned char) { 0, 1, 18, 3, 4, 5, 6, 7,
     133  				       8, 9, 10, 11, 12, 13, 14, 15 };
     134  						 
     135    vresult_ch = vec_insertl (src_vb_ch, src_va_ch, index);
     136  
     137    if (!vec_all_eq (vresult_ch,  expected_vresult_ch)) {
     138  #if DEBUG
     139      printf("ERROR, vec_insertl (src_vb_ch, src_va_ch, index)\n");
     140      for(i = 0; i < 16; i++)
     141        printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n",
     142  	     i, vresult_ch[i], i, expected_vresult_ch[i]);
     143  #else
     144      abort();
     145  #endif
     146    }
     147  
     148    index = 4;
     149    src_va_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 5, 6, 7 };
     150    src_vb_sh = (vector unsigned short) { 10, 11, 12, 13, 14, 15, 16, 17 };
     151    vresult_sh = (vector unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 };
     152    expected_vresult_sh = (vector unsigned short) { 0, 1, 14, 3, 4, 5, 6, 7 };
     153  						 
     154    vresult_sh = vec_insertl (src_vb_sh, src_va_sh, index);
     155  
     156    if (!vec_all_eq (vresult_sh,  expected_vresult_sh)) {
     157  #if DEBUG
     158      printf("ERROR, vec_insertl (src_vb_sh, src_va_sh, index)\n");
     159      for(i = 0; i < 8; i++)
     160        printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n",
     161  	     i, vresult_sh[i], i, expected_vresult_sh[i]);
     162  #else
     163      abort();
     164  #endif
     165    }
     166  
     167    index = 8;
     168    src_va_int = (vector unsigned int) { 0, 1, 2, 3 };
     169    src_vb_int = (vector unsigned int) { 10, 11, 12, 13 };
     170    vresult_int = (vector unsigned int) { 0, 0, 0, 0 };
     171    expected_vresult_int = (vector unsigned int) { 0, 1, 12, 3 };
     172  						 
     173    vresult_int = vec_insertl (src_vb_int, src_va_int, index);
     174  
     175    if (!vec_all_eq (vresult_int,  expected_vresult_int)) {
     176  #if DEBUG
     177      printf("ERROR, vec_insertl (src_vb_int, src_va_int, index)\n");
     178      for(i = 0; i < 4; i++)
     179        printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n",
     180  	     i, vresult_int[i], i, expected_vresult_int[i]);
     181  #else
     182      abort();
     183  #endif
     184    }
     185  
     186    /* Vector insert, high index, from GPR */
     187    src_a_ch = 79;
     188    index = 2;
     189    src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
     190  				       8, 9, 10, 11, 12, 13, 14, 15 };
     191    vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
     192  					0, 0, 0, 0, 0, 0, 0, 0 };
     193    expected_vresult_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
     194  				       8, 9, 10, 11, 12, 79, 14, 15 };
     195  						 
     196      vresult_ch = vec_inserth (src_a_ch, src_va_ch, index);
     197  
     198    if (!vec_all_eq (vresult_ch,  expected_vresult_ch)) {
     199  #if DEBUG
     200     printf("ERROR, vec_inserth (src_a_ch, src_va_ch, index)\n");
     201      for(i = 0; i < 16; i++)
     202        printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n",
     203  	     i, vresult_ch[i], i, expected_vresult_ch[i]);
     204  #else
     205      abort();
     206  #endif
     207    }
     208  
     209    src_a_sh = 79;
     210    index = 10;
     211    src_va_sh = (vector unsigned short int) { 0, 1, 2, 3, 4, 5, 6, 7 };
     212    vresult_sh = (vector unsigned short int) { 0, 0, 0, 0, 0, 0, 0, 0 };
     213    expected_vresult_sh = (vector unsigned short int) { 0, 1, 79, 3,
     214  						      4, 5, 6, 7 };
     215  
     216    vresult_sh = vec_inserth (src_a_sh, src_va_sh, index);
     217  
     218    if (!vec_all_eq (vresult_sh,  expected_vresult_sh)) {
     219  #if DEBUG
     220      printf("ERROR, vec_inserth (src_a_sh, src_va_sh, index)\n");
     221      for(i = 0; i < 8; i++)
     222        printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n",
     223  	     i, vresult_sh[i], i, expected_vresult_sh[i]);
     224  #else
     225      abort();
     226  #endif
     227    }
     228  
     229    src_a_int = 79;
     230    index = 8;
     231    src_va_int = (vector unsigned int) { 0, 1, 2, 3 };
     232    vresult_int = (vector unsigned int) { 0, 0, 0, 0 };
     233    expected_vresult_int = (vector unsigned int) { 0, 79, 2, 3 };
     234  
     235    vresult_int = vec_inserth (src_a_int, src_va_int, index);
     236  
     237    if (!vec_all_eq (vresult_int,  expected_vresult_int)) {
     238  #if DEBUG
     239      printf("ERROR, vec_inserth (src_a_int, src_va_int, index)\n");
     240      for(i = 0; i < 4; i++)
     241        printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n",
     242  	     i, vresult_int[i], i, expected_vresult_int[i]);
     243  #else
     244      abort();
     245  #endif
     246    }
     247  
     248    src_a_ll = 79;
     249    index = 8;
     250    src_va_ll = (vector unsigned long long) { 0, 1 };
     251    vresult_ll = (vector unsigned long long) { 0, 0 };
     252    expected_vresult_ll = (vector unsigned long long) { 79, 1 };
     253  
     254    vresult_ll = vec_inserth (src_a_ll, src_va_ll, index);
     255  
     256    if (!vec_all_eq (vresult_ll,  expected_vresult_ll)) {
     257  #if DEBUG
     258      printf("ERROR, vec_inserth (src_a_ll, src_va_ll, index)\n");
     259      for(i = 0; i < 2; i++)
     260        printf(" vresult_ll[%d] = %d, expected_vresult_ll[%d] = %d\n",
     261  	     i, vresult_ll[i], i, expected_vresult_ll[i]);
     262  #else
     263      abort();
     264  #endif
     265    }
     266  
     267    /* Vector insert, left index, from vector */
     268    index = 2;
     269    src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
     270  				       8, 9, 10, 11, 12, 13, 14, 15 };
     271    src_vb_ch = (vector unsigned char) { 10, 11, 12, 13, 14, 15, 16, 17,
     272  				       18, 19, 20, 21, 22, 23, 24, 25 };
     273    vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
     274  					0, 0, 0, 0, 0, 0, 0, 0 };
     275    expected_vresult_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
     276  				       8, 9, 10, 11, 12, 18, 14, 15 };
     277  						 
     278    vresult_ch = vec_inserth (src_vb_ch, src_va_ch, index);
     279  
     280    if (!vec_all_eq (vresult_ch,  expected_vresult_ch)) {
     281  #if DEBUG
     282      printf("ERROR, vec_inserth (src_vb_ch, src_va_ch, index)\n");
     283      for(i = 0; i < 16; i++)
     284        printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n",
     285  	     i, vresult_ch[i], i, expected_vresult_ch[i]);
     286  #else
     287      abort();
     288  #endif
     289    }
     290  
     291    index = 4;
     292    src_va_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 5, 6, 7 };
     293    src_vb_sh = (vector unsigned short) { 10, 11, 12, 13, 14, 15, 16, 17 };
     294    vresult_sh = (vector unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 };
     295    expected_vresult_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 14, 6, 7 };
     296  						 
     297    vresult_sh = vec_inserth (src_vb_sh, src_va_sh, index);
     298  
     299    if (!vec_all_eq (vresult_sh,  expected_vresult_sh)) {
     300  #if DEBUG
     301      printf("ERROR, vec_inserth (src_vb_sh, src_va_sh, index)\n");
     302      for(i = 0; i < 8; i++)
     303        printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n",
     304  	     i, vresult_sh[i], i, expected_vresult_sh[i]);
     305  #else
     306      abort();
     307  #endif
     308    }
     309  
     310    index = 8;
     311    src_va_int = (vector unsigned int) { 0, 1, 2, 3 };
     312    src_vb_int = (vector unsigned int) { 10, 11, 12, 13 };
     313    vresult_int = (vector unsigned int) { 0, 0, 0, 0 };
     314    expected_vresult_int = (vector unsigned int) { 0, 12, 2, 3 };
     315  						 
     316    vresult_int = vec_inserth (src_vb_int, src_va_int, index);
     317  
     318    if (!vec_all_eq (vresult_int,  expected_vresult_int)) {
     319  #if DEBUG
     320      printf("ERROR, vec_inserth (src_vb_int, src_va_int, index)\n");
     321      for(i = 0; i < 4; i++)
     322        printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n",
     323  	     i, vresult_int[i], i, expected_vresult_int[i]);
     324  #else
     325      abort();
     326  #endif
     327    }
     328    return 0;
     329  }
     330  
     331  /* { dg-final { scan-assembler {\mvinsblx\M} } } */
     332  /* { dg-final { scan-assembler {\mvinshlx\M} } } */
     333  /* { dg-final { scan-assembler {\mvinswlx\M} } } */
     334  /* { dg-final { scan-assembler {\mvinsdlx\M} } } */
     335  /* { dg-final { scan-assembler {\mvinsbvlx\M} } } */
     336  /* { dg-final { scan-assembler {\mvinshvlx\M} } } */
     337  /* { dg-final { scan-assembler {\mvinswvlx\M} } } */
     338  
     339  /* { dg-final { scan-assembler {\mvinsbrx\M} } } */
     340  /* { dg-final { scan-assembler {\mvinshrx\M} } } */
     341  /* { dg-final { scan-assembler {\mvinswrx\M} } } */
     342  /* { dg-final { scan-assembler {\mvinsdrx\M} } } */
     343  /* { dg-final { scan-assembler {\mvinsbvrx\M} } } */
     344  /* { dg-final { scan-assembler {\mvinshvrx\M} } } */
     345  /* { dg-final { scan-assembler {\mvinswvrx\M} } } */
     346