1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** st2_u64_base:
       7  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
       8  **	ret
       9  */
      10  TEST_STORE (st2_u64_base, svuint64x2_t, uint64_t,
      11  	    svst2_u64 (p0, x0, z0),
      12  	    svst2 (p0, x0, z0))
      13  
      14  /*
      15  ** st2_u64_index:
      16  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, x1, lsl 3\]
      17  **	ret
      18  */
      19  TEST_STORE (st2_u64_index, svuint64x2_t, uint64_t,
      20  	    svst2_u64 (p0, x0 + x1, z0),
      21  	    svst2 (p0, x0 + x1, z0))
      22  
      23  /* Moving the constant into a register would also be OK.  */
      24  /*
      25  ** st2_u64_1:
      26  **	incb	x0
      27  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
      28  **	ret
      29  */
      30  TEST_STORE (st2_u64_1, svuint64x2_t, uint64_t,
      31  	    svst2_u64 (p0, x0 + svcntd (), z0),
      32  	    svst2 (p0, x0 + svcntd (), z0))
      33  
      34  /*
      35  ** st2_u64_2:
      36  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #2, mul vl\]
      37  **	ret
      38  */
      39  TEST_STORE (st2_u64_2, svuint64x2_t, uint64_t,
      40  	    svst2_u64 (p0, x0 + svcntd () * 2, z0),
      41  	    svst2 (p0, x0 + svcntd () * 2, z0))
      42  
      43  /*
      44  ** st2_u64_14:
      45  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #14, mul vl\]
      46  **	ret
      47  */
      48  TEST_STORE (st2_u64_14, svuint64x2_t, uint64_t,
      49  	    svst2_u64 (p0, x0 + svcntd () * 14, z0),
      50  	    svst2 (p0, x0 + svcntd () * 14, z0))
      51  
      52  /* Moving the constant into a register would also be OK.  */
      53  /*
      54  ** st2_u64_16:
      55  **	incb	x0, all, mul #16
      56  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
      57  **	ret
      58  */
      59  TEST_STORE (st2_u64_16, svuint64x2_t, uint64_t,
      60  	    svst2_u64 (p0, x0 + svcntd () * 16, z0),
      61  	    svst2 (p0, x0 + svcntd () * 16, z0))
      62  
      63  /* Moving the constant into a register would also be OK.  */
      64  /*
      65  ** st2_u64_m1:
      66  **	decb	x0
      67  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
      68  **	ret
      69  */
      70  TEST_STORE (st2_u64_m1, svuint64x2_t, uint64_t,
      71  	    svst2_u64 (p0, x0 - svcntd (), z0),
      72  	    svst2 (p0, x0 - svcntd (), z0))
      73  
      74  /*
      75  ** st2_u64_m2:
      76  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #-2, mul vl\]
      77  **	ret
      78  */
      79  TEST_STORE (st2_u64_m2, svuint64x2_t, uint64_t,
      80  	    svst2_u64 (p0, x0 - svcntd () * 2, z0),
      81  	    svst2 (p0, x0 - svcntd () * 2, z0))
      82  
      83  /*
      84  ** st2_u64_m16:
      85  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #-16, mul vl\]
      86  **	ret
      87  */
      88  TEST_STORE (st2_u64_m16, svuint64x2_t, uint64_t,
      89  	    svst2_u64 (p0, x0 - svcntd () * 16, z0),
      90  	    svst2 (p0, x0 - svcntd () * 16, z0))
      91  
      92  /*
      93  ** st2_u64_m18:
      94  **	addvl	(x[0-9]+), x0, #-18
      95  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[\1\]
      96  **	ret
      97  */
      98  TEST_STORE (st2_u64_m18, svuint64x2_t, uint64_t,
      99  	    svst2_u64 (p0, x0 - svcntd () * 18, z0),
     100  	    svst2 (p0, x0 - svcntd () * 18, z0))
     101  
     102  /*
     103  ** st2_vnum_u64_0:
     104  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
     105  **	ret
     106  */
     107  TEST_STORE (st2_vnum_u64_0, svuint64x2_t, uint64_t,
     108  	    svst2_vnum_u64 (p0, x0, 0, z0),
     109  	    svst2_vnum (p0, x0, 0, z0))
     110  
     111  /* Moving the constant into a register would also be OK.  */
     112  /*
     113  ** st2_vnum_u64_1:
     114  **	incb	x0
     115  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
     116  **	ret
     117  */
     118  TEST_STORE (st2_vnum_u64_1, svuint64x2_t, uint64_t,
     119  	    svst2_vnum_u64 (p0, x0, 1, z0),
     120  	    svst2_vnum (p0, x0, 1, z0))
     121  
     122  /*
     123  ** st2_vnum_u64_2:
     124  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #2, mul vl\]
     125  **	ret
     126  */
     127  TEST_STORE (st2_vnum_u64_2, svuint64x2_t, uint64_t,
     128  	    svst2_vnum_u64 (p0, x0, 2, z0),
     129  	    svst2_vnum (p0, x0, 2, z0))
     130  
     131  /*
     132  ** st2_vnum_u64_14:
     133  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #14, mul vl\]
     134  **	ret
     135  */
     136  TEST_STORE (st2_vnum_u64_14, svuint64x2_t, uint64_t,
     137  	    svst2_vnum_u64 (p0, x0, 14, z0),
     138  	    svst2_vnum (p0, x0, 14, z0))
     139  
     140  /* Moving the constant into a register would also be OK.  */
     141  /*
     142  ** st2_vnum_u64_16:
     143  **	incb	x0, all, mul #16
     144  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
     145  **	ret
     146  */
     147  TEST_STORE (st2_vnum_u64_16, svuint64x2_t, uint64_t,
     148  	    svst2_vnum_u64 (p0, x0, 16, z0),
     149  	    svst2_vnum (p0, x0, 16, z0))
     150  
     151  /* Moving the constant into a register would also be OK.  */
     152  /*
     153  ** st2_vnum_u64_m1:
     154  **	decb	x0
     155  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0\]
     156  **	ret
     157  */
     158  TEST_STORE (st2_vnum_u64_m1, svuint64x2_t, uint64_t,
     159  	    svst2_vnum_u64 (p0, x0, -1, z0),
     160  	    svst2_vnum (p0, x0, -1, z0))
     161  
     162  /*
     163  ** st2_vnum_u64_m2:
     164  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #-2, mul vl\]
     165  **	ret
     166  */
     167  TEST_STORE (st2_vnum_u64_m2, svuint64x2_t, uint64_t,
     168  	    svst2_vnum_u64 (p0, x0, -2, z0),
     169  	    svst2_vnum (p0, x0, -2, z0))
     170  
     171  /*
     172  ** st2_vnum_u64_m16:
     173  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[x0, #-16, mul vl\]
     174  **	ret
     175  */
     176  TEST_STORE (st2_vnum_u64_m16, svuint64x2_t, uint64_t,
     177  	    svst2_vnum_u64 (p0, x0, -16, z0),
     178  	    svst2_vnum (p0, x0, -16, z0))
     179  
     180  /*
     181  ** st2_vnum_u64_m18:
     182  **	addvl	(x[0-9]+), x0, #-18
     183  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[\1\]
     184  **	ret
     185  */
     186  TEST_STORE (st2_vnum_u64_m18, svuint64x2_t, uint64_t,
     187  	    svst2_vnum_u64 (p0, x0, -18, z0),
     188  	    svst2_vnum (p0, x0, -18, z0))
     189  
     190  /* Using MUL to calculate an index would also be OK.  */
     191  /*
     192  ** st2_vnum_u64_x1:
     193  **	cntb	(x[0-9]+)
     194  **	madd	(x[0-9]+), (x1, \1|\1, x1), x0
     195  **	st2d	{z0\.d(?: - |, )z1\.d}, p0, \[\2\]
     196  **	ret
     197  */
     198  TEST_STORE (st2_vnum_u64_x1, svuint64x2_t, uint64_t,
     199  	    svst2_vnum_u64 (p0, x0, x1, z0),
     200  	    svst2_vnum (p0, x0, x1, z0))