(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
p8vector-ldst.c
       1  /* { dg-do compile { target { powerpc*-*-* } } } */
       2  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
       3  /* { dg-require-effective-target powerpc_p8vector_ok } */
       4  /* { dg-options "-mdejagnu-cpu=power8 -O2" } */
       5  
       6  float
       7  load_store_sf (unsigned long num,
       8  	       const float *from_ptr,
       9  	       float *to_ptr,
      10  	       const unsigned long *in_mask_ptr,
      11  	       const unsigned long *out_mask_ptr)
      12  {
      13    float value00	= 0.0f;
      14    float value01	= 0.0f;
      15    float value02	= 0.0f;
      16    float value03	= 0.0f;
      17    float value04	= 0.0f;
      18    float value05	= 0.0f;
      19    float value06	= 0.0f;
      20    float value07	= 0.0f;
      21    float value08	= 0.0f;
      22    float value09	= 0.0f;
      23    float value10	= 0.0f;
      24    float value11	= 0.0f;
      25    float value12	= 0.0f;
      26    float value13	= 0.0f;
      27    float value14	= 0.0f;
      28    float value15	= 0.0f;
      29    float value16	= 0.0f;
      30    float value17	= 0.0f;
      31    float value18	= 0.0f;
      32    float value19	= 0.0f;
      33    float value20	= 0.0f;
      34    float value21	= 0.0f;
      35    float value22	= 0.0f;
      36    float value23	= 0.0f;
      37    float value24	= 0.0f;
      38    float value25	= 0.0f;
      39    float value26	= 0.0f;
      40    float value27	= 0.0f;
      41    float value28	= 0.0f;
      42    float value29	= 0.0f;
      43    float value30	= 0.0f;
      44    float value31	= 0.0f;
      45    float value32	= 0.0f;
      46    float value33	= 0.0f;
      47    float value34	= 0.0f;
      48    float value35	= 0.0f;
      49    float value36	= 0.0f;
      50    float value37	= 0.0f;
      51    float value38	= 0.0f;
      52    float value39	= 0.0f;
      53    unsigned long in_mask, in_mask2;
      54    unsigned long out_mask, out_mask2;
      55    unsigned long i;
      56  
      57    for (i = 0; i < num; i++)
      58      {
      59        in_mask = *in_mask_ptr++;
      60        in_mask2 = *in_mask_ptr++;
      61        if ((in_mask & (1L <<  0)) != 0L)
      62  	value00 = *from_ptr++;
      63  
      64        if ((in_mask & (1L <<  1)) != 0L)
      65  	value01 = *from_ptr++;
      66  
      67        if ((in_mask & (1L <<  2)) != 0L)
      68  	value02 = *from_ptr++;
      69  
      70        if ((in_mask & (1L <<  3)) != 0L)
      71  	value03 = *from_ptr++;
      72  
      73        if ((in_mask & (1L <<  4)) != 0L)
      74  	value04 = *from_ptr++;
      75  
      76        if ((in_mask & (1L <<  5)) != 0L)
      77  	value05 = *from_ptr++;
      78  
      79        if ((in_mask & (1L <<  6)) != 0L)
      80  	value06 = *from_ptr++;
      81  
      82        if ((in_mask & (1L <<  7)) != 0L)
      83  	value07 = *from_ptr++;
      84  
      85        if ((in_mask & (1L <<  8)) != 0L)
      86  	value08 = *from_ptr++;
      87  
      88        if ((in_mask & (1L <<  9)) != 0L)
      89  	value09 = *from_ptr++;
      90  
      91        if ((in_mask & (1L << 10)) != 0L)
      92  	value10 = *from_ptr++;
      93  
      94        if ((in_mask & (1L << 11)) != 0L)
      95  	value11 = *from_ptr++;
      96  
      97        if ((in_mask & (1L << 12)) != 0L)
      98  	value12 = *from_ptr++;
      99  
     100        if ((in_mask & (1L << 13)) != 0L)
     101  	value13 = *from_ptr++;
     102  
     103        if ((in_mask & (1L << 14)) != 0L)
     104  	value14 = *from_ptr++;
     105  
     106        if ((in_mask & (1L << 15)) != 0L)
     107  	value15 = *from_ptr++;
     108  
     109        if ((in_mask & (1L << 16)) != 0L)
     110  	value16 = *from_ptr++;
     111  
     112        if ((in_mask & (1L << 17)) != 0L)
     113  	value17 = *from_ptr++;
     114  
     115        if ((in_mask & (1L << 18)) != 0L)
     116  	value18 = *from_ptr++;
     117  
     118        if ((in_mask & (1L << 19)) != 0L)
     119  	value19 = *from_ptr++;
     120  
     121        if ((in_mask2 & (1L << 0)) != 0L)
     122  	value20 = *from_ptr++;
     123  
     124        if ((in_mask2 & (1L << 1)) != 0L)
     125  	value21 = *from_ptr++;
     126  
     127        if ((in_mask2 & (1L << 2)) != 0L)
     128  	value22 = *from_ptr++;
     129  
     130        if ((in_mask2 & (1L << 3)) != 0L)
     131  	value23 = *from_ptr++;
     132  
     133        if ((in_mask2 & (1L << 4)) != 0L)
     134  	value24 = *from_ptr++;
     135  
     136        if ((in_mask2 & (1L << 5)) != 0L)
     137  	value25 = *from_ptr++;
     138  
     139        if ((in_mask2 & (1L << 6)) != 0L)
     140  	value26 = *from_ptr++;
     141  
     142        if ((in_mask2 & (1L << 7)) != 0L)
     143  	value27 = *from_ptr++;
     144  
     145        if ((in_mask2 & (1L << 8)) != 0L)
     146  	value28 = *from_ptr++;
     147  
     148        if ((in_mask2 & (1L << 9)) != 0L)
     149  	value29 = *from_ptr++;
     150  
     151        if ((in_mask2 & (1L << 10)) != 0L)
     152  	value30 = *from_ptr++;
     153  
     154        if ((in_mask2 & (1L << 11)) != 0L)
     155  	value31 = *from_ptr++;
     156  
     157        if ((in_mask2 & (1L << 12)) != 0L)
     158  	value32 = *from_ptr++;
     159  
     160        if ((in_mask2 & (1L << 13)) != 0L)
     161  	value33 = *from_ptr++;
     162  
     163        if ((in_mask2 & (1L << 14)) != 0L)
     164  	value34 = *from_ptr++;
     165  
     166        if ((in_mask2 & (1L << 15)) != 0L)
     167  	value35 = *from_ptr++;
     168  
     169        if ((in_mask2 & (1L << 16)) != 0L)
     170  	value36 = *from_ptr++;
     171  
     172        if ((in_mask2 & (1L << 17)) != 0L)
     173  	value37 = *from_ptr++;
     174  
     175        if ((in_mask2 & (1L << 18)) != 0L)
     176  	value38 = *from_ptr++;
     177  
     178        if ((in_mask2 & (1L << 19)) != 0L)
     179  	value39 = *from_ptr++;
     180  
     181        out_mask = *out_mask_ptr++;
     182        out_mask2 = *out_mask_ptr++;
     183        if ((out_mask & (1L <<  0)) != 0L)
     184  	*to_ptr++ = value00;
     185  
     186        if ((out_mask & (1L <<  1)) != 0L)
     187  	*to_ptr++ = value01;
     188  
     189        if ((out_mask & (1L <<  2)) != 0L)
     190  	*to_ptr++ = value02;
     191  
     192        if ((out_mask & (1L <<  3)) != 0L)
     193  	*to_ptr++ = value03;
     194  
     195        if ((out_mask & (1L <<  4)) != 0L)
     196  	*to_ptr++ = value04;
     197  
     198        if ((out_mask & (1L <<  5)) != 0L)
     199  	*to_ptr++ = value05;
     200  
     201        if ((out_mask & (1L <<  6)) != 0L)
     202  	*to_ptr++ = value06;
     203  
     204        if ((out_mask & (1L <<  7)) != 0L)
     205  	*to_ptr++ = value07;
     206  
     207        if ((out_mask & (1L <<  8)) != 0L)
     208  	*to_ptr++ = value08;
     209  
     210        if ((out_mask & (1L <<  9)) != 0L)
     211  	*to_ptr++ = value09;
     212  
     213        if ((out_mask & (1L << 10)) != 0L)
     214  	*to_ptr++ = value10;
     215  
     216        if ((out_mask & (1L << 11)) != 0L)
     217  	*to_ptr++ = value11;
     218  
     219        if ((out_mask & (1L << 12)) != 0L)
     220  	*to_ptr++ = value12;
     221  
     222        if ((out_mask & (1L << 13)) != 0L)
     223  	*to_ptr++ = value13;
     224  
     225        if ((out_mask & (1L << 14)) != 0L)
     226  	*to_ptr++ = value14;
     227  
     228        if ((out_mask & (1L << 15)) != 0L)
     229  	*to_ptr++ = value15;
     230  
     231        if ((out_mask & (1L << 16)) != 0L)
     232  	*to_ptr++ = value16;
     233  
     234        if ((out_mask & (1L << 17)) != 0L)
     235  	*to_ptr++ = value17;
     236  
     237        if ((out_mask & (1L << 18)) != 0L)
     238  	*to_ptr++ = value18;
     239  
     240        if ((out_mask & (1L << 19)) != 0L)
     241  	*to_ptr++ = value19;
     242  
     243        if ((out_mask2 & (1L << 0)) != 0L)
     244  	*to_ptr++ = value20;
     245  
     246        if ((out_mask2 & (1L << 1)) != 0L)
     247  	*to_ptr++ = value21;
     248  
     249        if ((out_mask2 & (1L << 2)) != 0L)
     250  	*to_ptr++ = value22;
     251  
     252        if ((out_mask2 & (1L << 3)) != 0L)
     253  	*to_ptr++ = value23;
     254  
     255        if ((out_mask2 & (1L << 4)) != 0L)
     256  	*to_ptr++ = value24;
     257  
     258        if ((out_mask2 & (1L << 5)) != 0L)
     259  	*to_ptr++ = value25;
     260  
     261        if ((out_mask2 & (1L << 6)) != 0L)
     262  	*to_ptr++ = value26;
     263  
     264        if ((out_mask2 & (1L << 7)) != 0L)
     265  	*to_ptr++ = value27;
     266  
     267        if ((out_mask2 & (1L << 8)) != 0L)
     268  	*to_ptr++ = value28;
     269  
     270        if ((out_mask2 & (1L << 9)) != 0L)
     271  	*to_ptr++ = value29;
     272  
     273        if ((out_mask2 & (1L << 10)) != 0L)
     274  	*to_ptr++ = value30;
     275  
     276        if ((out_mask2 & (1L << 11)) != 0L)
     277  	*to_ptr++ = value31;
     278  
     279        if ((out_mask2 & (1L << 12)) != 0L)
     280  	*to_ptr++ = value32;
     281  
     282        if ((out_mask2 & (1L << 13)) != 0L)
     283  	*to_ptr++ = value33;
     284  
     285        if ((out_mask2 & (1L << 14)) != 0L)
     286  	*to_ptr++ = value34;
     287  
     288        if ((out_mask2 & (1L << 15)) != 0L)
     289  	*to_ptr++ = value35;
     290  
     291        if ((out_mask2 & (1L << 16)) != 0L)
     292  	*to_ptr++ = value36;
     293  
     294        if ((out_mask2 & (1L << 17)) != 0L)
     295  	*to_ptr++ = value37;
     296  
     297        if ((out_mask2 & (1L << 18)) != 0L)
     298  	*to_ptr++ = value38;
     299  
     300        if ((out_mask2 & (1L << 19)) != 0L)
     301  	*to_ptr++ = value39;
     302      }
     303  
     304    return (  value00 + value01 + value02 + value03 + value04
     305  	  + value05 + value06 + value07 + value08 + value09
     306  	  + value10 + value11 + value12 + value13 + value14
     307  	  + value15 + value16 + value17 + value18 + value19
     308  	  + value20 + value21 + value22 + value23 + value24
     309  	  + value25 + value26 + value27 + value28 + value29
     310  	  + value30 + value31 + value32 + value33 + value34
     311  	  + value35 + value36 + value37 + value38 + value39);
     312  }
     313  
     314  double
     315  load_store_df (unsigned long num,
     316  	       const double *from_ptr,
     317  	       double *to_ptr,
     318  	       const unsigned long *in_mask_ptr,
     319  	       const unsigned long *out_mask_ptr)
     320  {
     321    double value00	= 0.0;
     322    double value01	= 0.0;
     323    double value02	= 0.0;
     324    double value03	= 0.0;
     325    double value04	= 0.0;
     326    double value05	= 0.0;
     327    double value06	= 0.0;
     328    double value07	= 0.0;
     329    double value08	= 0.0;
     330    double value09	= 0.0;
     331    double value10	= 0.0;
     332    double value11	= 0.0;
     333    double value12	= 0.0;
     334    double value13	= 0.0;
     335    double value14	= 0.0;
     336    double value15	= 0.0;
     337    double value16	= 0.0;
     338    double value17	= 0.0;
     339    double value18	= 0.0;
     340    double value19	= 0.0;
     341    double value20	= 0.0;
     342    double value21	= 0.0;
     343    double value22	= 0.0;
     344    double value23	= 0.0;
     345    double value24	= 0.0;
     346    double value25	= 0.0;
     347    double value26	= 0.0;
     348    double value27	= 0.0;
     349    double value28	= 0.0;
     350    double value29	= 0.0;
     351    double value30	= 0.0;
     352    double value31	= 0.0;
     353    double value32	= 0.0;
     354    double value33	= 0.0;
     355    double value34	= 0.0;
     356    double value35	= 0.0;
     357    double value36	= 0.0;
     358    double value37	= 0.0;
     359    double value38	= 0.0;
     360    double value39	= 0.0;
     361    unsigned long in_mask, in_mask2;
     362    unsigned long out_mask, out_mask2;
     363    unsigned long i;
     364  
     365    for (i = 0; i < num; i++)
     366      {
     367        in_mask = *in_mask_ptr++;
     368        in_mask2 = *in_mask_ptr++;
     369        if ((in_mask & (1L <<  0)) != 0L)
     370  	value00 = *from_ptr++;
     371  
     372        if ((in_mask & (1L <<  1)) != 0L)
     373  	value01 = *from_ptr++;
     374  
     375        if ((in_mask & (1L <<  2)) != 0L)
     376  	value02 = *from_ptr++;
     377  
     378        if ((in_mask & (1L <<  3)) != 0L)
     379  	value03 = *from_ptr++;
     380  
     381        if ((in_mask & (1L <<  4)) != 0L)
     382  	value04 = *from_ptr++;
     383  
     384        if ((in_mask & (1L <<  5)) != 0L)
     385  	value05 = *from_ptr++;
     386  
     387        if ((in_mask & (1L <<  6)) != 0L)
     388  	value06 = *from_ptr++;
     389  
     390        if ((in_mask & (1L <<  7)) != 0L)
     391  	value07 = *from_ptr++;
     392  
     393        if ((in_mask & (1L <<  8)) != 0L)
     394  	value08 = *from_ptr++;
     395  
     396        if ((in_mask & (1L <<  9)) != 0L)
     397  	value09 = *from_ptr++;
     398  
     399        if ((in_mask & (1L << 10)) != 0L)
     400  	value10 = *from_ptr++;
     401  
     402        if ((in_mask & (1L << 11)) != 0L)
     403  	value11 = *from_ptr++;
     404  
     405        if ((in_mask & (1L << 12)) != 0L)
     406  	value12 = *from_ptr++;
     407  
     408        if ((in_mask & (1L << 13)) != 0L)
     409  	value13 = *from_ptr++;
     410  
     411        if ((in_mask & (1L << 14)) != 0L)
     412  	value14 = *from_ptr++;
     413  
     414        if ((in_mask & (1L << 15)) != 0L)
     415  	value15 = *from_ptr++;
     416  
     417        if ((in_mask & (1L << 16)) != 0L)
     418  	value16 = *from_ptr++;
     419  
     420        if ((in_mask & (1L << 17)) != 0L)
     421  	value17 = *from_ptr++;
     422  
     423        if ((in_mask & (1L << 18)) != 0L)
     424  	value18 = *from_ptr++;
     425  
     426        if ((in_mask & (1L << 19)) != 0L)
     427  	value19 = *from_ptr++;
     428  
     429        if ((in_mask2 & (1L << 0)) != 0L)
     430  	value20 = *from_ptr++;
     431  
     432        if ((in_mask2 & (1L << 1)) != 0L)
     433  	value21 = *from_ptr++;
     434  
     435        if ((in_mask2 & (1L << 2)) != 0L)
     436  	value22 = *from_ptr++;
     437  
     438        if ((in_mask2 & (1L << 3)) != 0L)
     439  	value23 = *from_ptr++;
     440  
     441        if ((in_mask2 & (1L << 4)) != 0L)
     442  	value24 = *from_ptr++;
     443  
     444        if ((in_mask2 & (1L << 5)) != 0L)
     445  	value25 = *from_ptr++;
     446  
     447        if ((in_mask2 & (1L << 6)) != 0L)
     448  	value26 = *from_ptr++;
     449  
     450        if ((in_mask2 & (1L << 7)) != 0L)
     451  	value27 = *from_ptr++;
     452  
     453        if ((in_mask2 & (1L << 8)) != 0L)
     454  	value28 = *from_ptr++;
     455  
     456        if ((in_mask2 & (1L << 9)) != 0L)
     457  	value29 = *from_ptr++;
     458  
     459        if ((in_mask2 & (1L << 10)) != 0L)
     460  	value30 = *from_ptr++;
     461  
     462        if ((in_mask2 & (1L << 11)) != 0L)
     463  	value31 = *from_ptr++;
     464  
     465        if ((in_mask2 & (1L << 12)) != 0L)
     466  	value32 = *from_ptr++;
     467  
     468        if ((in_mask2 & (1L << 13)) != 0L)
     469  	value33 = *from_ptr++;
     470  
     471        if ((in_mask2 & (1L << 14)) != 0L)
     472  	value34 = *from_ptr++;
     473  
     474        if ((in_mask2 & (1L << 15)) != 0L)
     475  	value35 = *from_ptr++;
     476  
     477        if ((in_mask2 & (1L << 16)) != 0L)
     478  	value36 = *from_ptr++;
     479  
     480        if ((in_mask2 & (1L << 17)) != 0L)
     481  	value37 = *from_ptr++;
     482  
     483        if ((in_mask2 & (1L << 18)) != 0L)
     484  	value38 = *from_ptr++;
     485  
     486        if ((in_mask2 & (1L << 19)) != 0L)
     487  	value39 = *from_ptr++;
     488  
     489        out_mask = *out_mask_ptr++;
     490        out_mask2 = *out_mask_ptr++;
     491        if ((out_mask & (1L <<  0)) != 0L)
     492  	*to_ptr++ = value00;
     493  
     494        if ((out_mask & (1L <<  1)) != 0L)
     495  	*to_ptr++ = value01;
     496  
     497        if ((out_mask & (1L <<  2)) != 0L)
     498  	*to_ptr++ = value02;
     499  
     500        if ((out_mask & (1L <<  3)) != 0L)
     501  	*to_ptr++ = value03;
     502  
     503        if ((out_mask & (1L <<  4)) != 0L)
     504  	*to_ptr++ = value04;
     505  
     506        if ((out_mask & (1L <<  5)) != 0L)
     507  	*to_ptr++ = value05;
     508  
     509        if ((out_mask & (1L <<  6)) != 0L)
     510  	*to_ptr++ = value06;
     511  
     512        if ((out_mask & (1L <<  7)) != 0L)
     513  	*to_ptr++ = value07;
     514  
     515        if ((out_mask & (1L <<  8)) != 0L)
     516  	*to_ptr++ = value08;
     517  
     518        if ((out_mask & (1L <<  9)) != 0L)
     519  	*to_ptr++ = value09;
     520  
     521        if ((out_mask & (1L << 10)) != 0L)
     522  	*to_ptr++ = value10;
     523  
     524        if ((out_mask & (1L << 11)) != 0L)
     525  	*to_ptr++ = value11;
     526  
     527        if ((out_mask & (1L << 12)) != 0L)
     528  	*to_ptr++ = value12;
     529  
     530        if ((out_mask & (1L << 13)) != 0L)
     531  	*to_ptr++ = value13;
     532  
     533        if ((out_mask & (1L << 14)) != 0L)
     534  	*to_ptr++ = value14;
     535  
     536        if ((out_mask & (1L << 15)) != 0L)
     537  	*to_ptr++ = value15;
     538  
     539        if ((out_mask & (1L << 16)) != 0L)
     540  	*to_ptr++ = value16;
     541  
     542        if ((out_mask & (1L << 17)) != 0L)
     543  	*to_ptr++ = value17;
     544  
     545        if ((out_mask & (1L << 18)) != 0L)
     546  	*to_ptr++ = value18;
     547  
     548        if ((out_mask & (1L << 19)) != 0L)
     549  	*to_ptr++ = value19;
     550  
     551        if ((out_mask2 & (1L << 0)) != 0L)
     552  	*to_ptr++ = value20;
     553  
     554        if ((out_mask2 & (1L << 1)) != 0L)
     555  	*to_ptr++ = value21;
     556  
     557        if ((out_mask2 & (1L << 2)) != 0L)
     558  	*to_ptr++ = value22;
     559  
     560        if ((out_mask2 & (1L << 3)) != 0L)
     561  	*to_ptr++ = value23;
     562  
     563        if ((out_mask2 & (1L << 4)) != 0L)
     564  	*to_ptr++ = value24;
     565  
     566        if ((out_mask2 & (1L << 5)) != 0L)
     567  	*to_ptr++ = value25;
     568  
     569        if ((out_mask2 & (1L << 6)) != 0L)
     570  	*to_ptr++ = value26;
     571  
     572        if ((out_mask2 & (1L << 7)) != 0L)
     573  	*to_ptr++ = value27;
     574  
     575        if ((out_mask2 & (1L << 8)) != 0L)
     576  	*to_ptr++ = value28;
     577  
     578        if ((out_mask2 & (1L << 9)) != 0L)
     579  	*to_ptr++ = value29;
     580  
     581        if ((out_mask2 & (1L << 10)) != 0L)
     582  	*to_ptr++ = value30;
     583  
     584        if ((out_mask2 & (1L << 11)) != 0L)
     585  	*to_ptr++ = value31;
     586  
     587        if ((out_mask2 & (1L << 12)) != 0L)
     588  	*to_ptr++ = value32;
     589  
     590        if ((out_mask2 & (1L << 13)) != 0L)
     591  	*to_ptr++ = value33;
     592  
     593        if ((out_mask2 & (1L << 14)) != 0L)
     594  	*to_ptr++ = value34;
     595  
     596        if ((out_mask2 & (1L << 15)) != 0L)
     597  	*to_ptr++ = value35;
     598  
     599        if ((out_mask2 & (1L << 16)) != 0L)
     600  	*to_ptr++ = value36;
     601  
     602        if ((out_mask2 & (1L << 17)) != 0L)
     603  	*to_ptr++ = value37;
     604  
     605        if ((out_mask2 & (1L << 18)) != 0L)
     606  	*to_ptr++ = value38;
     607  
     608        if ((out_mask2 & (1L << 19)) != 0L)
     609  	*to_ptr++ = value39;
     610      }
     611  
     612    return (  value00 + value01 + value02 + value03 + value04
     613  	  + value05 + value06 + value07 + value08 + value09
     614  	  + value10 + value11 + value12 + value13 + value14
     615  	  + value15 + value16 + value17 + value18 + value19
     616  	  + value20 + value21 + value22 + value23 + value24
     617  	  + value25 + value26 + value27 + value28 + value29
     618  	  + value30 + value31 + value32 + value33 + value34
     619  	  + value35 + value36 + value37 + value38 + value39);
     620  }
     621  
     622  /* { dg-final { scan-assembler "lxsspx"  } } */
     623  /* { dg-final { scan-assembler "lxsdx"   } } */
     624  /* { dg-final { scan-assembler "stxsspx" } } */
     625  /* { dg-final { scan-assembler "stxsdx"  } } */
     626  /* { dg-final { scan-assembler "xsaddsp" } } */
     627  /* { dg-final { scan-assembler "xsadddp" } } */