(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
acle/
asm/
cntw.c
       1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** cntw_1:
       7  **	cntw	x0
       8  **	ret
       9  */
      10  PROTO (cntw_1, uint64_t, ()) { return svcntw (); }
      11  
      12  /*
      13  ** cntw_2:
      14  **	cnth	x0
      15  **	ret
      16  */
      17  PROTO (cntw_2, uint64_t, ()) { return svcntw () * 2; }
      18  
      19  /*
      20  ** cntw_3:
      21  **	cntw	x0, all, mul #3
      22  **	ret
      23  */
      24  PROTO (cntw_3, uint64_t, ()) { return svcntw () * 3; }
      25  
      26  /*
      27  ** cntw_4:
      28  **	cntb	x0
      29  **	ret
      30  */
      31  PROTO (cntw_4, uint64_t, ()) { return svcntw () * 4; }
      32  
      33  /*
      34  ** cntw_8:
      35  **	cntb	x0, all, mul #2
      36  **	ret
      37  */
      38  PROTO (cntw_8, uint64_t, ()) { return svcntw () * 8; }
      39  
      40  /*
      41  ** cntw_15:
      42  **	cntw	x0, all, mul #15
      43  **	ret
      44  */
      45  PROTO (cntw_15, uint64_t, ()) { return svcntw () * 15; }
      46  
      47  /*
      48  ** cntw_16:
      49  **	cntb	x0, all, mul #4
      50  **	ret
      51  */
      52  PROTO (cntw_16, uint64_t, ()) { return svcntw () * 16; }
      53  
      54  /* Other sequences would be OK.  */
      55  /*
      56  ** cntw_17:
      57  **	cntb	x0, all, mul #4
      58  **	incw	x0
      59  **	ret
      60  */
      61  PROTO (cntw_17, uint64_t, ()) { return svcntw () * 17; }
      62  
      63  /*
      64  ** cntw_32:
      65  **	cntb	x0, all, mul #8
      66  **	ret
      67  */
      68  PROTO (cntw_32, uint64_t, ()) { return svcntw () * 32; }
      69  
      70  /*
      71  ** cntw_64:
      72  **	cntb	x0, all, mul #16
      73  **	ret
      74  */
      75  PROTO (cntw_64, uint64_t, ()) { return svcntw () * 64; }
      76  
      77  /*
      78  ** cntw_128:
      79  **	cntd	(x[0-9]+)
      80  **	lsl	x0, \1, 8
      81  **	ret
      82  */
      83  PROTO (cntw_128, uint64_t, ()) { return svcntw () * 128; }
      84  
      85  /*
      86  ** cntw_m1:
      87  **	cntw	(x[0-9]+)
      88  **	neg	x0, \1
      89  **	ret
      90  */
      91  PROTO (cntw_m1, uint64_t, ()) { return -svcntw (); }
      92  
      93  /*
      94  ** cntw_m13:
      95  **	cntw	(x[0-9]+), all, mul #13
      96  **	neg	x0, \1
      97  **	ret
      98  */
      99  PROTO (cntw_m13, uint64_t, ()) { return -svcntw () * 13; }
     100  
     101  /*
     102  ** cntw_m15:
     103  **	cntw	(x[0-9]+), all, mul #15
     104  **	neg	x0, \1
     105  **	ret
     106  */
     107  PROTO (cntw_m15, uint64_t, ()) { return -svcntw () * 15; }
     108  
     109  /*
     110  ** cntw_m16:
     111  **	cntb	(x[0-9]+), all, mul #4
     112  **	neg	x0, \1
     113  **	ret
     114  */
     115  PROTO (cntw_m16, uint64_t, ()) { return -svcntw () * 16; }
     116  
     117  /* Other sequences would be OK.  */
     118  /*
     119  ** cntw_m17:
     120  **	cntb	x0, all, mul #4
     121  **	incw	x0
     122  **	neg	x0, x0
     123  **	ret
     124  */
     125  PROTO (cntw_m17, uint64_t, ()) { return -svcntw () * 17; }
     126  
     127  /*
     128  ** incw_1:
     129  **	incw	x0
     130  **	ret
     131  */
     132  PROTO (incw_1, uint64_t, (uint64_t x0)) { return x0 + svcntw (); }
     133  
     134  /*
     135  ** incw_2:
     136  **	inch	x0
     137  **	ret
     138  */
     139  PROTO (incw_2, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 2; }
     140  
     141  /*
     142  ** incw_3:
     143  **	incw	x0, all, mul #3
     144  **	ret
     145  */
     146  PROTO (incw_3, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 3; }
     147  
     148  /*
     149  ** incw_4:
     150  **	incb	x0
     151  **	ret
     152  */
     153  PROTO (incw_4, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 4; }
     154  
     155  /*
     156  ** incw_7:
     157  **	incw	x0, all, mul #7
     158  **	ret
     159  */
     160  PROTO (incw_7, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 7; }
     161  
     162  /*
     163  ** incw_8:
     164  **	incb	x0, all, mul #2
     165  **	ret
     166  */
     167  PROTO (incw_8, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 8; }
     168  
     169  /*
     170  ** incw_9:
     171  **	incw	x0, all, mul #9
     172  **	ret
     173  */
     174  PROTO (incw_9, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 9; }
     175  
     176  /*
     177  ** incw_15:
     178  **	incw	x0, all, mul #15
     179  **	ret
     180  */
     181  PROTO (incw_15, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 15; }
     182  
     183  /*
     184  ** incw_16:
     185  **	incb	x0, all, mul #4
     186  **	ret
     187  */
     188  PROTO (incw_16, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 16; }
     189  
     190  /*
     191  ** incw_18:
     192  **	inch	x0, all, mul #9
     193  **	ret
     194  */
     195  PROTO (incw_18, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 18; }
     196  
     197  /*
     198  ** incw_30:
     199  **	inch	x0, all, mul #15
     200  **	ret
     201  */
     202  PROTO (incw_30, uint64_t, (uint64_t x0)) { return x0 + svcntw () * 30; }
     203  
     204  /*
     205  ** decw_1:
     206  **	decw	x0
     207  **	ret
     208  */
     209  PROTO (decw_1, uint64_t, (uint64_t x0)) { return x0 - svcntw (); }
     210  
     211  /*
     212  ** decw_2:
     213  **	dech	x0
     214  **	ret
     215  */
     216  PROTO (decw_2, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 2; }
     217  
     218  /*
     219  ** decw_3:
     220  **	decw	x0, all, mul #3
     221  **	ret
     222  */
     223  PROTO (decw_3, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 3; }
     224  
     225  /*
     226  ** decw_4:
     227  **	decb	x0
     228  **	ret
     229  */
     230  PROTO (decw_4, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 4; }
     231  
     232  /*
     233  ** decw_7:
     234  **	decw	x0, all, mul #7
     235  **	ret
     236  */
     237  PROTO (decw_7, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 7; }
     238  
     239  /*
     240  ** decw_8:
     241  **	decb	x0, all, mul #2
     242  **	ret
     243  */
     244  PROTO (decw_8, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 8; }
     245  
     246  /*
     247  ** decw_9:
     248  **	decw	x0, all, mul #9
     249  **	ret
     250  */
     251  PROTO (decw_9, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 9; }
     252  
     253  /*
     254  ** decw_15:
     255  **	decw	x0, all, mul #15
     256  **	ret
     257  */
     258  PROTO (decw_15, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 15; }
     259  
     260  /*
     261  ** decw_16:
     262  **	decb	x0, all, mul #4
     263  **	ret
     264  */
     265  PROTO (decw_16, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 16; }
     266  
     267  /*
     268  ** decw_18:
     269  **	dech	x0, all, mul #9
     270  **	ret
     271  */
     272  PROTO (decw_18, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 18; }
     273  
     274  /*
     275  ** decw_30:
     276  **	dech	x0, all, mul #15
     277  **	ret
     278  */
     279  PROTO (decw_30, uint64_t, (uint64_t x0)) { return x0 - svcntw () * 30; }