(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
acle/
asm/
st3_f16.c
       1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** st3_f16_base:
       7  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
       8  **	ret
       9  */
      10  TEST_STORE (st3_f16_base, svfloat16x3_t, float16_t,
      11  	    svst3_f16 (p0, x0, z0),
      12  	    svst3 (p0, x0, z0))
      13  
      14  /*
      15  ** st3_f16_index:
      16  **	st3h	{z0\.h - z2\.h}, p0, \[x0, x1, lsl 1\]
      17  **	ret
      18  */
      19  TEST_STORE (st3_f16_index, svfloat16x3_t, float16_t,
      20  	    svst3_f16 (p0, x0 + x1, z0),
      21  	    svst3 (p0, x0 + x1, z0))
      22  
      23  /* Moving the constant into a register would also be OK.  */
      24  /*
      25  ** st3_f16_1:
      26  **	incb	x0
      27  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
      28  **	ret
      29  */
      30  TEST_STORE (st3_f16_1, svfloat16x3_t, float16_t,
      31  	    svst3_f16 (p0, x0 + svcnth (), z0),
      32  	    svst3 (p0, x0 + svcnth (), z0))
      33  
      34  /* Moving the constant into a register would also be OK.  */
      35  /*
      36  ** st3_f16_2:
      37  **	incb	x0, all, mul #2
      38  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
      39  **	ret
      40  */
      41  TEST_STORE (st3_f16_2, svfloat16x3_t, float16_t,
      42  	    svst3_f16 (p0, x0 + svcnth () * 2, z0),
      43  	    svst3 (p0, x0 + svcnth () * 2, z0))
      44  
      45  /*
      46  ** st3_f16_3:
      47  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #3, mul vl\]
      48  **	ret
      49  */
      50  TEST_STORE (st3_f16_3, svfloat16x3_t, float16_t,
      51  	    svst3_f16 (p0, x0 + svcnth () * 3, z0),
      52  	    svst3 (p0, x0 + svcnth () * 3, z0))
      53  
      54  /*
      55  ** st3_f16_21:
      56  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #21, mul vl\]
      57  **	ret
      58  */
      59  TEST_STORE (st3_f16_21, svfloat16x3_t, float16_t,
      60  	    svst3_f16 (p0, x0 + svcnth () * 21, z0),
      61  	    svst3 (p0, x0 + svcnth () * 21, z0))
      62  
      63  /*
      64  ** st3_f16_24:
      65  **	addvl	(x[0-9]+), x0, #24
      66  **	st3h	{z0\.h - z2\.h}, p0, \[\1\]
      67  **	ret
      68  */
      69  TEST_STORE (st3_f16_24, svfloat16x3_t, float16_t,
      70  	    svst3_f16 (p0, x0 + svcnth () * 24, z0),
      71  	    svst3 (p0, x0 + svcnth () * 24, z0))
      72  
      73  /* Moving the constant into a register would also be OK.  */
      74  /*
      75  ** st3_f16_m1:
      76  **	decb	x0
      77  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
      78  **	ret
      79  */
      80  TEST_STORE (st3_f16_m1, svfloat16x3_t, float16_t,
      81  	    svst3_f16 (p0, x0 - svcnth (), z0),
      82  	    svst3 (p0, x0 - svcnth (), z0))
      83  
      84  /* Moving the constant into a register would also be OK.  */
      85  /*
      86  ** st3_f16_m2:
      87  **	decb	x0, all, mul #2
      88  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
      89  **	ret
      90  */
      91  TEST_STORE (st3_f16_m2, svfloat16x3_t, float16_t,
      92  	    svst3_f16 (p0, x0 - svcnth () * 2, z0),
      93  	    svst3 (p0, x0 - svcnth () * 2, z0))
      94  
      95  /*
      96  ** st3_f16_m3:
      97  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #-3, mul vl\]
      98  **	ret
      99  */
     100  TEST_STORE (st3_f16_m3, svfloat16x3_t, float16_t,
     101  	    svst3_f16 (p0, x0 - svcnth () * 3, z0),
     102  	    svst3 (p0, x0 - svcnth () * 3, z0))
     103  
     104  /*
     105  ** st3_f16_m24:
     106  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #-24, mul vl\]
     107  **	ret
     108  */
     109  TEST_STORE (st3_f16_m24, svfloat16x3_t, float16_t,
     110  	    svst3_f16 (p0, x0 - svcnth () * 24, z0),
     111  	    svst3 (p0, x0 - svcnth () * 24, z0))
     112  
     113  /*
     114  ** st3_f16_m27:
     115  **	addvl	(x[0-9]+), x0, #-27
     116  **	st3h	{z0\.h - z2\.h}, p0, \[\1\]
     117  **	ret
     118  */
     119  TEST_STORE (st3_f16_m27, svfloat16x3_t, float16_t,
     120  	    svst3_f16 (p0, x0 - svcnth () * 27, z0),
     121  	    svst3 (p0, x0 - svcnth () * 27, z0))
     122  
     123  /*
     124  ** st3_vnum_f16_0:
     125  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
     126  **	ret
     127  */
     128  TEST_STORE (st3_vnum_f16_0, svfloat16x3_t, float16_t,
     129  	    svst3_vnum_f16 (p0, x0, 0, z0),
     130  	    svst3_vnum (p0, x0, 0, z0))
     131  
     132  /* Moving the constant into a register would also be OK.  */
     133  /*
     134  ** st3_vnum_f16_1:
     135  **	incb	x0
     136  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
     137  **	ret
     138  */
     139  TEST_STORE (st3_vnum_f16_1, svfloat16x3_t, float16_t,
     140  	    svst3_vnum_f16 (p0, x0, 1, z0),
     141  	    svst3_vnum (p0, x0, 1, z0))
     142  
     143  /* Moving the constant into a register would also be OK.  */
     144  /*
     145  ** st3_vnum_f16_2:
     146  **	incb	x0, all, mul #2
     147  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
     148  **	ret
     149  */
     150  TEST_STORE (st3_vnum_f16_2, svfloat16x3_t, float16_t,
     151  	    svst3_vnum_f16 (p0, x0, 2, z0),
     152  	    svst3_vnum (p0, x0, 2, z0))
     153  
     154  /*
     155  ** st3_vnum_f16_3:
     156  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #3, mul vl\]
     157  **	ret
     158  */
     159  TEST_STORE (st3_vnum_f16_3, svfloat16x3_t, float16_t,
     160  	    svst3_vnum_f16 (p0, x0, 3, z0),
     161  	    svst3_vnum (p0, x0, 3, z0))
     162  
     163  /*
     164  ** st3_vnum_f16_21:
     165  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #21, mul vl\]
     166  **	ret
     167  */
     168  TEST_STORE (st3_vnum_f16_21, svfloat16x3_t, float16_t,
     169  	    svst3_vnum_f16 (p0, x0, 21, z0),
     170  	    svst3_vnum (p0, x0, 21, z0))
     171  
     172  /*
     173  ** st3_vnum_f16_24:
     174  **	addvl	(x[0-9]+), x0, #24
     175  **	st3h	{z0\.h - z2\.h}, p0, \[\1\]
     176  **	ret
     177  */
     178  TEST_STORE (st3_vnum_f16_24, svfloat16x3_t, float16_t,
     179  	    svst3_vnum_f16 (p0, x0, 24, z0),
     180  	    svst3_vnum (p0, x0, 24, z0))
     181  
     182  /* Moving the constant into a register would also be OK.  */
     183  /*
     184  ** st3_vnum_f16_m1:
     185  **	decb	x0
     186  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
     187  **	ret
     188  */
     189  TEST_STORE (st3_vnum_f16_m1, svfloat16x3_t, float16_t,
     190  	    svst3_vnum_f16 (p0, x0, -1, z0),
     191  	    svst3_vnum (p0, x0, -1, z0))
     192  
     193  /* Moving the constant into a register would also be OK.  */
     194  /*
     195  ** st3_vnum_f16_m2:
     196  **	decb	x0, all, mul #2
     197  **	st3h	{z0\.h - z2\.h}, p0, \[x0\]
     198  **	ret
     199  */
     200  TEST_STORE (st3_vnum_f16_m2, svfloat16x3_t, float16_t,
     201  	    svst3_vnum_f16 (p0, x0, -2, z0),
     202  	    svst3_vnum (p0, x0, -2, z0))
     203  
     204  /*
     205  ** st3_vnum_f16_m3:
     206  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #-3, mul vl\]
     207  **	ret
     208  */
     209  TEST_STORE (st3_vnum_f16_m3, svfloat16x3_t, float16_t,
     210  	    svst3_vnum_f16 (p0, x0, -3, z0),
     211  	    svst3_vnum (p0, x0, -3, z0))
     212  
     213  /*
     214  ** st3_vnum_f16_m24:
     215  **	st3h	{z0\.h - z2\.h}, p0, \[x0, #-24, mul vl\]
     216  **	ret
     217  */
     218  TEST_STORE (st3_vnum_f16_m24, svfloat16x3_t, float16_t,
     219  	    svst3_vnum_f16 (p0, x0, -24, z0),
     220  	    svst3_vnum (p0, x0, -24, z0))
     221  
     222  /*
     223  ** st3_vnum_f16_m27:
     224  **	addvl	(x[0-9]+), x0, #-27
     225  **	st3h	{z0\.h - z2\.h}, p0, \[\1\]
     226  **	ret
     227  */
     228  TEST_STORE (st3_vnum_f16_m27, svfloat16x3_t, float16_t,
     229  	    svst3_vnum_f16 (p0, x0, -27, z0),
     230  	    svst3_vnum (p0, x0, -27, z0))
     231  
     232  /* Using MUL to calculate an index would also be OK.  */
     233  /*
     234  ** st3_vnum_f16_x1:
     235  **	cntb	(x[0-9]+)
     236  **	madd	(x[0-9]+), (x1, \1|\1, x1), x0
     237  **	st3h	{z0\.h - z2\.h}, p0, \[\2\]
     238  **	ret
     239  */
     240  TEST_STORE (st3_vnum_f16_x1, svfloat16x3_t, float16_t,
     241  	    svst3_vnum_f16 (p0, x0, x1, z0),
     242  	    svst3_vnum (p0, x0, x1, z0))