1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** cntb_1:
       7  **	cntb	x0
       8  **	ret
       9  */
      10  PROTO (cntb_1, uint64_t, ()) { return svcntb (); }
      11  
      12  /*
      13  ** cntb_2:
      14  **	cntb	x0, all, mul #2
      15  **	ret
      16  */
      17  PROTO (cntb_2, uint64_t, ()) { return svcntb () * 2; }
      18  
      19  /*
      20  ** cntb_3:
      21  **	cntb	x0, all, mul #3
      22  **	ret
      23  */
      24  PROTO (cntb_3, uint64_t, ()) { return svcntb () * 3; }
      25  
      26  /*
      27  ** cntb_4:
      28  **	cntb	x0, all, mul #4
      29  **	ret
      30  */
      31  PROTO (cntb_4, uint64_t, ()) { return svcntb () * 4; }
      32  
      33  /*
      34  ** cntb_8:
      35  **	cntb	x0, all, mul #8
      36  **	ret
      37  */
      38  PROTO (cntb_8, uint64_t, ()) { return svcntb () * 8; }
      39  
      40  /*
      41  ** cntb_15:
      42  **	cntb	x0, all, mul #15
      43  **	ret
      44  */
      45  PROTO (cntb_15, uint64_t, ()) { return svcntb () * 15; }
      46  
      47  /*
      48  ** cntb_16:
      49  **	cntb	x0, all, mul #16
      50  **	ret
      51  */
      52  PROTO (cntb_16, uint64_t, ()) { return svcntb () * 16; }
      53  
      54  /* Other sequences would be OK.  */
      55  /*
      56  ** cntb_17:
      57  **	cntb	x0, all, mul #16
      58  **	incb	x0
      59  **	ret
      60  */
      61  PROTO (cntb_17, uint64_t, ()) { return svcntb () * 17; }
      62  
      63  /*
      64  ** cntb_32:
      65  **	cntd	(x[0-9]+)
      66  **	lsl	x0, \1, 8
      67  **	ret
      68  */
      69  PROTO (cntb_32, uint64_t, ()) { return svcntb () * 32; }
      70  
      71  /* Other sequences would be OK.  */
      72  /*
      73  ** cntb_33:
      74  **	cntb	(x[0-9]+)
      75  **	lsl	x0, \1, 5
      76  **	incb	x0
      77  **	ret
      78  */
      79  PROTO (cntb_33, uint64_t, ()) { return svcntb () * 33; }
      80  
      81  /*
      82  ** cntb_64:
      83  **	cntd	(x[0-9]+)
      84  **	lsl	x0, \1, 9
      85  **	ret
      86  */
      87  PROTO (cntb_64, uint64_t, ()) { return svcntb () * 64; }
      88  
      89  /*
      90  ** cntb_128:
      91  **	cntd	(x[0-9]+)
      92  **	lsl	x0, \1, 10
      93  **	ret
      94  */
      95  PROTO (cntb_128, uint64_t, ()) { return svcntb () * 128; }
      96  
      97  /* Other sequences would be OK.  */
      98  /*
      99  ** cntb_129:
     100  **	cntb	(x[0-9]+)
     101  **	lsl	x0, \1, 7
     102  **	incb	x0
     103  **	ret
     104  */
     105  PROTO (cntb_129, uint64_t, ()) { return svcntb () * 129; }
     106  
     107  /*
     108  ** cntb_m1:
     109  **	cntb	(x[0-9]+)
     110  **	neg	x0, \1
     111  **	ret
     112  */
     113  PROTO (cntb_m1, uint64_t, ()) { return -svcntb (); }
     114  
     115  /*
     116  ** cntb_m13:
     117  **	cntb	(x[0-9]+), all, mul #13
     118  **	neg	x0, \1
     119  **	ret
     120  */
     121  PROTO (cntb_m13, uint64_t, ()) { return -svcntb () * 13; }
     122  
     123  /*
     124  ** cntb_m15:
     125  **	cntb	(x[0-9]+), all, mul #15
     126  **	neg	x0, \1
     127  **	ret
     128  */
     129  PROTO (cntb_m15, uint64_t, ()) { return -svcntb () * 15; }
     130  
     131  /*
     132  ** cntb_m16:
     133  **	cntb	(x[0-9]+), all, mul #16
     134  **	neg	x0, \1
     135  **	ret
     136  */
     137  PROTO (cntb_m16, uint64_t, ()) { return -svcntb () * 16; }
     138  
     139  /* Other sequences would be OK.  */
     140  /*
     141  ** cntb_m17:
     142  **	cntb	x0, all, mul #16
     143  **	incb	x0
     144  **	neg	x0, x0
     145  **	ret
     146  */
     147  PROTO (cntb_m17, uint64_t, ()) { return -svcntb () * 17; }
     148  
     149  /*
     150  ** incb_1:
     151  **	incb	x0
     152  **	ret
     153  */
     154  PROTO (incb_1, uint64_t, (uint64_t x0)) { return x0 + svcntb (); }
     155  
     156  /*
     157  ** incb_2:
     158  **	incb	x0, all, mul #2
     159  **	ret
     160  */
     161  PROTO (incb_2, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 2; }
     162  
     163  /*
     164  ** incb_3:
     165  **	incb	x0, all, mul #3
     166  **	ret
     167  */
     168  PROTO (incb_3, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 3; }
     169  
     170  /*
     171  ** incb_4:
     172  **	incb	x0, all, mul #4
     173  **	ret
     174  */
     175  PROTO (incb_4, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 4; }
     176  
     177  /*
     178  ** incb_8:
     179  **	incb	x0, all, mul #8
     180  **	ret
     181  */
     182  PROTO (incb_8, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 8; }
     183  
     184  /*
     185  ** incb_15:
     186  **	incb	x0, all, mul #15
     187  **	ret
     188  */
     189  PROTO (incb_15, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 15; }
     190  
     191  /*
     192  ** incb_16:
     193  **	incb	x0, all, mul #16
     194  **	ret
     195  */
     196  PROTO (incb_16, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 16; }
     197  
     198  /*
     199  ** incb_17:
     200  **	addvl	x0, x0, #17
     201  **	ret
     202  */
     203  PROTO (incb_17, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 17; }
     204  
     205  /*
     206  ** incb_31:
     207  **	addvl	x0, x0, #31
     208  **	ret
     209  */
     210  PROTO (incb_31, uint64_t, (uint64_t x0)) { return x0 + svcntb () * 31; }
     211  
     212  /*
     213  ** decb_1:
     214  **	decb	x0
     215  **	ret
     216  */
     217  PROTO (decb_1, uint64_t, (uint64_t x0)) { return x0 - svcntb (); }
     218  
     219  /*
     220  ** decb_2:
     221  **	decb	x0, all, mul #2
     222  **	ret
     223  */
     224  PROTO (decb_2, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 2; }
     225  
     226  /*
     227  ** decb_3:
     228  **	decb	x0, all, mul #3
     229  **	ret
     230  */
     231  PROTO (decb_3, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 3; }
     232  
     233  /*
     234  ** decb_4:
     235  **	decb	x0, all, mul #4
     236  **	ret
     237  */
     238  PROTO (decb_4, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 4; }
     239  
     240  /*
     241  ** decb_8:
     242  **	decb	x0, all, mul #8
     243  **	ret
     244  */
     245  PROTO (decb_8, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 8; }
     246  
     247  /*
     248  ** decb_15:
     249  **	decb	x0, all, mul #15
     250  **	ret
     251  */
     252  PROTO (decb_15, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 15; }
     253  
     254  /*
     255  ** decb_16:
     256  **	decb	x0, all, mul #16
     257  **	ret
     258  */
     259  PROTO (decb_16, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 16; }
     260  
     261  /*
     262  ** decb_17:
     263  **	addvl	x0, x0, #-17
     264  **	ret
     265  */
     266  PROTO (decb_17, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 17; }
     267  
     268  /*
     269  ** decb_31:
     270  **	addvl	x0, x0, #-31
     271  **	ret
     272  */
     273  PROTO (decb_31, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 31; }
     274  
     275  /*
     276  ** decb_32:
     277  **	addvl	x0, x0, #-32
     278  **	ret
     279  */
     280  PROTO (decb_32, uint64_t, (uint64_t x0)) { return x0 - svcntb () * 32; }