(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
acle/
asm/
cntb_pat.c
       1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** cntb_pow2:
       7  **	cntb	x0, pow2
       8  **	ret
       9  */
      10  PROTO (cntb_pow2, uint64_t, ()) { return svcntb_pat (SV_POW2); }
      11  
      12  /*
      13  ** cntb_vl1:
      14  **	mov	x0, #?1
      15  **	ret
      16  */
      17  PROTO (cntb_vl1, uint64_t, ()) { return svcntb_pat (SV_VL1); }
      18  
      19  /*
      20  ** cntb_vl2:
      21  **	mov	x0, #?2
      22  **	ret
      23  */
      24  PROTO (cntb_vl2, uint64_t, ()) { return svcntb_pat (SV_VL2); }
      25  
      26  /*
      27  ** cntb_vl3:
      28  **	mov	x0, #?3
      29  **	ret
      30  */
      31  PROTO (cntb_vl3, uint64_t, ()) { return svcntb_pat (SV_VL3); }
      32  
      33  /*
      34  ** cntb_vl4:
      35  **	mov	x0, #?4
      36  **	ret
      37  */
      38  PROTO (cntb_vl4, uint64_t, ()) { return svcntb_pat (SV_VL4); }
      39  
      40  /*
      41  ** cntb_vl5:
      42  **	mov	x0, #?5
      43  **	ret
      44  */
      45  PROTO (cntb_vl5, uint64_t, ()) { return svcntb_pat (SV_VL5); }
      46  
      47  /*
      48  ** cntb_vl6:
      49  **	mov	x0, #?6
      50  **	ret
      51  */
      52  PROTO (cntb_vl6, uint64_t, ()) { return svcntb_pat (SV_VL6); }
      53  
      54  /*
      55  ** cntb_vl7:
      56  **	mov	x0, #?7
      57  **	ret
      58  */
      59  PROTO (cntb_vl7, uint64_t, ()) { return svcntb_pat (SV_VL7); }
      60  
      61  /*
      62  ** cntb_vl8:
      63  **	mov	x0, #?8
      64  **	ret
      65  */
      66  PROTO (cntb_vl8, uint64_t, ()) { return svcntb_pat (SV_VL8); }
      67  
      68  /*
      69  ** cntb_vl16:
      70  **	mov	x0, #?16
      71  **	ret
      72  */
      73  PROTO (cntb_vl16, uint64_t, ()) { return svcntb_pat (SV_VL16); }
      74  
      75  /*
      76  ** cntb_vl32:
      77  **	cntb	x0, vl32
      78  **	ret
      79  */
      80  PROTO (cntb_vl32, uint64_t, ()) { return svcntb_pat (SV_VL32); }
      81  
      82  /*
      83  ** cntb_vl64:
      84  **	cntb	x0, vl64
      85  **	ret
      86  */
      87  PROTO (cntb_vl64, uint64_t, ()) { return svcntb_pat (SV_VL64); }
      88  
      89  /*
      90  ** cntb_vl128:
      91  **	cntb	x0, vl128
      92  **	ret
      93  */
      94  PROTO (cntb_vl128, uint64_t, ()) { return svcntb_pat (SV_VL128); }
      95  
      96  /*
      97  ** cntb_vl256:
      98  **	cntb	x0, vl256
      99  **	ret
     100  */
     101  PROTO (cntb_vl256, uint64_t, ()) { return svcntb_pat (SV_VL256); }
     102  
     103  /*
     104  ** cntb_mul3:
     105  **	cntb	x0, mul3
     106  **	ret
     107  */
     108  PROTO (cntb_mul3, uint64_t, ()) { return svcntb_pat (SV_MUL3); }
     109  
     110  /*
     111  ** cntb_mul4:
     112  **	cntb	x0, mul4
     113  **	ret
     114  */
     115  PROTO (cntb_mul4, uint64_t, ()) { return svcntb_pat (SV_MUL4); }
     116  
     117  /*
     118  ** cntb_all:
     119  **	cntb	x0
     120  **	ret
     121  */
     122  PROTO (cntb_all, uint64_t, ()) { return svcntb_pat (SV_ALL); }
     123  
     124  /*
     125  ** incb_32_pow2:
     126  **	incb	x0, pow2
     127  **	ret
     128  */
     129  PROTO (incb_32_pow2, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_POW2); }
     130  
     131  /*
     132  ** incb_32_vl1:
     133  **	add	w0, w0, #?1
     134  **	ret
     135  */
     136  PROTO (incb_32_vl1, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL1); }
     137  
     138  /*
     139  ** incb_32_vl2:
     140  **	add	w0, w0, #?2
     141  **	ret
     142  */
     143  PROTO (incb_32_vl2, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL2); }
     144  
     145  /*
     146  ** incb_32_vl3:
     147  **	add	w0, w0, #?3
     148  **	ret
     149  */
     150  PROTO (incb_32_vl3, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL3); }
     151  
     152  /*
     153  ** incb_32_vl4:
     154  **	add	w0, w0, #?4
     155  **	ret
     156  */
     157  PROTO (incb_32_vl4, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL4); }
     158  
     159  /*
     160  ** incb_32_vl5:
     161  **	add	w0, w0, #?5
     162  **	ret
     163  */
     164  PROTO (incb_32_vl5, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL5); }
     165  
     166  /*
     167  ** incb_32_vl6:
     168  **	add	w0, w0, #?6
     169  **	ret
     170  */
     171  PROTO (incb_32_vl6, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL6); }
     172  
     173  /*
     174  ** incb_32_vl7:
     175  **	add	w0, w0, #?7
     176  **	ret
     177  */
     178  PROTO (incb_32_vl7, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL7); }
     179  
     180  /*
     181  ** incb_32_vl8:
     182  **	add	w0, w0, #?8
     183  **	ret
     184  */
     185  PROTO (incb_32_vl8, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL8); }
     186  
     187  /*
     188  ** incb_32_vl16:
     189  **	add	w0, w0, #?16
     190  **	ret
     191  */
     192  PROTO (incb_32_vl16, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL16); }
     193  
     194  /*
     195  ** incb_32_vl32:
     196  **	incb	x0, vl32
     197  **	ret
     198  */
     199  PROTO (incb_32_vl32, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL32); }
     200  
     201  /*
     202  ** incb_32_vl64:
     203  **	incb	x0, vl64
     204  **	ret
     205  */
     206  PROTO (incb_32_vl64, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL64); }
     207  
     208  /*
     209  ** incb_32_vl128:
     210  **	incb	x0, vl128
     211  **	ret
     212  */
     213  PROTO (incb_32_vl128, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL128); }
     214  
     215  /*
     216  ** incb_32_vl256:
     217  **	incb	x0, vl256
     218  **	ret
     219  */
     220  PROTO (incb_32_vl256, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_VL256); }
     221  
     222  /*
     223  ** incb_32_mul3:
     224  **	incb	x0, mul3
     225  **	ret
     226  */
     227  PROTO (incb_32_mul3, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_MUL3); }
     228  
     229  /*
     230  ** incb_32_mul4:
     231  **	incb	x0, mul4
     232  **	ret
     233  */
     234  PROTO (incb_32_mul4, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_MUL4); }
     235  
     236  /*
     237  ** incb_32_all:
     238  **	incb	x0
     239  **	ret
     240  */
     241  PROTO (incb_32_all, uint32_t, (uint32_t w0)) { return w0 + svcntb_pat (SV_ALL); }
     242  
     243  /*
     244  ** incb_64_pow2:
     245  **	incb	x0, pow2
     246  **	ret
     247  */
     248  PROTO (incb_64_pow2, uint64_t, (uint64_t x0)) { return x0 + svcntb_pat (SV_POW2); }
     249  
     250  /*
     251  ** incb_64_all:
     252  **	incb	x0
     253  **	ret
     254  */
     255  PROTO (incb_64_all, uint64_t, (uint64_t x0)) { return x0 + svcntb_pat (SV_ALL); }
     256  
     257  /*
     258  ** decb_32_pow2:
     259  **	decb	x0, pow2
     260  **	ret
     261  */
     262  PROTO (decb_32_pow2, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_POW2); }
     263  
     264  /*
     265  ** decb_32_vl1:
     266  **	sub	w0, w0, #?1
     267  **	ret
     268  */
     269  PROTO (decb_32_vl1, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL1); }
     270  
     271  /*
     272  ** decb_32_vl2:
     273  **	sub	w0, w0, #?2
     274  **	ret
     275  */
     276  PROTO (decb_32_vl2, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL2); }
     277  
     278  /*
     279  ** decb_32_vl3:
     280  **	sub	w0, w0, #?3
     281  **	ret
     282  */
     283  PROTO (decb_32_vl3, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL3); }
     284  
     285  /*
     286  ** decb_32_vl4:
     287  **	sub	w0, w0, #?4
     288  **	ret
     289  */
     290  PROTO (decb_32_vl4, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL4); }
     291  
     292  /*
     293  ** decb_32_vl5:
     294  **	sub	w0, w0, #?5
     295  **	ret
     296  */
     297  PROTO (decb_32_vl5, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL5); }
     298  
     299  /*
     300  ** decb_32_vl6:
     301  **	sub	w0, w0, #?6
     302  **	ret
     303  */
     304  PROTO (decb_32_vl6, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL6); }
     305  
     306  /*
     307  ** decb_32_vl7:
     308  **	sub	w0, w0, #?7
     309  **	ret
     310  */
     311  PROTO (decb_32_vl7, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL7); }
     312  
     313  /*
     314  ** decb_32_vl8:
     315  **	sub	w0, w0, #?8
     316  **	ret
     317  */
     318  PROTO (decb_32_vl8, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL8); }
     319  
     320  /*
     321  ** decb_32_vl16:
     322  **	sub	w0, w0, #?16
     323  **	ret
     324  */
     325  PROTO (decb_32_vl16, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL16); }
     326  
     327  /*
     328  ** decb_32_vl32:
     329  **	decb	x0, vl32
     330  **	ret
     331  */
     332  PROTO (decb_32_vl32, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL32); }
     333  
     334  /*
     335  ** decb_32_vl64:
     336  **	decb	x0, vl64
     337  **	ret
     338  */
     339  PROTO (decb_32_vl64, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL64); }
     340  
     341  /*
     342  ** decb_32_vl128:
     343  **	decb	x0, vl128
     344  **	ret
     345  */
     346  PROTO (decb_32_vl128, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL128); }
     347  
     348  /*
     349  ** decb_32_vl256:
     350  **	decb	x0, vl256
     351  **	ret
     352  */
     353  PROTO (decb_32_vl256, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_VL256); }
     354  
     355  /*
     356  ** decb_32_mul3:
     357  **	decb	x0, mul3
     358  **	ret
     359  */
     360  PROTO (decb_32_mul3, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_MUL3); }
     361  
     362  /*
     363  ** decb_32_mul4:
     364  **	decb	x0, mul4
     365  **	ret
     366  */
     367  PROTO (decb_32_mul4, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_MUL4); }
     368  
     369  /*
     370  ** decb_32_all:
     371  **	decb	x0
     372  **	ret
     373  */
     374  PROTO (decb_32_all, uint32_t, (uint32_t w0)) { return w0 - svcntb_pat (SV_ALL); }
     375  
     376  /*
     377  ** decb_64_pow2:
     378  **	decb	x0, pow2
     379  **	ret
     380  */
     381  PROTO (decb_64_pow2, uint64_t, (uint64_t x0)) { return x0 - svcntb_pat (SV_POW2); }
     382  
     383  /*
     384  ** decb_64_all:
     385  **	decb	x0
     386  **	ret
     387  */
     388  PROTO (decb_64_all, uint64_t, (uint64_t x0)) { return x0 - svcntb_pat (SV_ALL); }
     389  
     390  /*
     391  ** incb_s8_pow2_z0:
     392  **	cntb	x([0-9]+), pow2
     393  **	mov	(z[0-9]+\.b), w\1
     394  **	add	z0\.b, (z0\.b, \2|\2, z0\.b)
     395  **	ret
     396  */
     397  TEST_UNIFORM_Z (incb_s8_pow2_z0, svint8_t,
     398  		z0 = svadd_n_s8_x (svptrue_b8 (), z0, svcntb_pat (SV_POW2)),
     399  		z0 = svadd_x (svptrue_b8 (), z0, svcntb_pat (SV_POW2)));
     400  
     401  /*
     402  ** incb_s8_pow2_z1:
     403  **	cntb	x([0-9]+), pow2
     404  **	mov	(z[0-9]+\.b), w\1
     405  **	add	z0\.b, (z1\.b, \2|\2, z1\.b)
     406  **	ret
     407  */
     408  TEST_UNIFORM_Z (incb_s8_pow2_z1, svint8_t,
     409  		z0 = svadd_n_s8_x (svptrue_b8 (), z1, svcntb_pat (SV_POW2)),
     410  		z0 = svadd_x (svptrue_b8 (), z1, svcntb_pat (SV_POW2)));
     411  
     412  /*
     413  ** decb_s8_pow2_z0:
     414  **	cntb	x([0-9]+), pow2
     415  **	mov	(z[0-9]+\.b), w\1
     416  **	sub	z0\.b, z0\.b, \2
     417  **	ret
     418  */
     419  TEST_UNIFORM_Z (decb_s8_pow2_z0, svint8_t,
     420  		z0 = svsub_n_s8_x (svptrue_b8 (), z0, svcntb_pat (SV_POW2)),
     421  		z0 = svsub_x (svptrue_b8 (), z0, svcntb_pat (SV_POW2)));
     422  
     423  /*
     424  ** decb_s8_pow2_z1:
     425  **	cntb	x([0-9]+), pow2
     426  **	mov	(z[0-9]+\.b), w\1
     427  **	sub	z0\.b, z1\.b, \2
     428  **	ret
     429  */
     430  TEST_UNIFORM_Z (decb_s8_pow2_z1, svint8_t,
     431  		z0 = svsub_n_s8_x (svptrue_b8 (), z1, svcntb_pat (SV_POW2)),
     432  		z0 = svsub_x (svptrue_b8 (), z1, svcntb_pat (SV_POW2)));