1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** prfh_base:
       7  **	prfh	pldl1keep, p0, \[x0\]
       8  **	ret
       9  */
      10  TEST_PREFETCH (prfh_base, uint8_t,
      11  	       svprfh (p0, x0, SV_PLDL1KEEP),
      12  	       svprfh (p0, x0, SV_PLDL1KEEP))
      13  
      14  /*
      15  ** prfh_u8_index:
      16  **	add	(x[0-9+]), (x0, x1|x1, x0)
      17  **	prfh	pldl1keep, p0, \[x0\]
      18  **	ret
      19  */
      20  TEST_PREFETCH (prfh_u8_index, uint8_t,
      21  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP),
      22  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP))
      23  
      24  /*
      25  ** prfh_u8_1:
      26  **	add	(x[0-9+]), x0, #?1
      27  **	prfh	pldl1keep, p0, \[\1\]
      28  **	ret
      29  */
      30  TEST_PREFETCH (prfh_u8_1, uint8_t,
      31  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP),
      32  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP))
      33  
      34  /*
      35  ** prfh_u16_index:
      36  **	prfh	pldl1keep, p0, \[x0, x1, lsl #?1\]
      37  **	ret
      38  */
      39  TEST_PREFETCH (prfh_u16_index, uint16_t,
      40  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP),
      41  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP))
      42  
      43  /*
      44  ** prfh_u16_1:
      45  **	add	(x[0-9+]), x0, #?2
      46  **	prfh	pldl1keep, p0, \[\1\]
      47  **	ret
      48  */
      49  TEST_PREFETCH (prfh_u16_1, uint16_t,
      50  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP),
      51  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP))
      52  
      53  /*
      54  ** prfh_u32_index:
      55  **	add	(x[0-9+]), x0, x1, lsl #?2
      56  **	prfh	pldl1keep, p0, \[\1\]
      57  **	ret
      58  */
      59  TEST_PREFETCH (prfh_u32_index, uint32_t,
      60  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP),
      61  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP))
      62  
      63  /*
      64  ** prfh_u32_1:
      65  **	add	(x[0-9+]), x0, #?4
      66  **	prfh	pldl1keep, p0, \[\1\]
      67  **	ret
      68  */
      69  TEST_PREFETCH (prfh_u32_1, uint32_t,
      70  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP),
      71  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP))
      72  
      73  /*
      74  ** prfh_u64_index:
      75  **	add	(x[0-9+]), x0, x1, lsl #?3
      76  **	prfh	pldl1keep, p0, \[\1\]
      77  **	ret
      78  */
      79  TEST_PREFETCH (prfh_u64_index, uint64_t,
      80  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP),
      81  	       svprfh (p0, x0 + x1, SV_PLDL1KEEP))
      82  
      83  /*
      84  ** prfh_u64_1:
      85  **	add	(x[0-9+]), x0, #?8
      86  **	prfh	pldl1keep, p0, \[\1\]
      87  **	ret
      88  */
      89  TEST_PREFETCH (prfh_u64_1, uint64_t,
      90  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP),
      91  	       svprfh (p0, x0 + 1, SV_PLDL1KEEP))
      92  
      93  /*
      94  ** prfh_pldl1strm:
      95  **	prfh	pldl1strm, p0, \[x0\]
      96  **	ret
      97  */
      98  TEST_PREFETCH (prfh_pldl1strm, uint8_t,
      99  	       svprfh (p0, x0, SV_PLDL1STRM),
     100  	       svprfh (p0, x0, SV_PLDL1STRM))
     101  
     102  /*
     103  ** prfh_pldl2keep:
     104  **	prfh	pldl2keep, p0, \[x0\]
     105  **	ret
     106  */
     107  TEST_PREFETCH (prfh_pldl2keep, uint8_t,
     108  	       svprfh (p0, x0, SV_PLDL2KEEP),
     109  	       svprfh (p0, x0, SV_PLDL2KEEP))
     110  
     111  /*
     112  ** prfh_pldl2strm:
     113  **	prfh	pldl2strm, p0, \[x0\]
     114  **	ret
     115  */
     116  TEST_PREFETCH (prfh_pldl2strm, uint8_t,
     117  	       svprfh (p0, x0, SV_PLDL2STRM),
     118  	       svprfh (p0, x0, SV_PLDL2STRM))
     119  
     120  /*
     121  ** prfh_pldl3keep:
     122  **	prfh	pldl3keep, p0, \[x0\]
     123  **	ret
     124  */
     125  TEST_PREFETCH (prfh_pldl3keep, uint8_t,
     126  	       svprfh (p0, x0, SV_PLDL3KEEP),
     127  	       svprfh (p0, x0, SV_PLDL3KEEP))
     128  
     129  /*
     130  ** prfh_pldl3strm:
     131  **	prfh	pldl3strm, p0, \[x0\]
     132  **	ret
     133  */
     134  TEST_PREFETCH (prfh_pldl3strm, uint8_t,
     135  	       svprfh (p0, x0, SV_PLDL3STRM),
     136  	       svprfh (p0, x0, SV_PLDL3STRM))
     137  
     138  /*
     139  ** prfh_pstl1keep:
     140  **	prfh	pstl1keep, p0, \[x0\]
     141  **	ret
     142  */
     143  TEST_PREFETCH (prfh_pstl1keep, uint8_t,
     144  	       svprfh (p0, x0, SV_PSTL1KEEP),
     145  	       svprfh (p0, x0, SV_PSTL1KEEP))
     146  
     147  /*
     148  ** prfh_pstl1strm:
     149  **	prfh	pstl1strm, p0, \[x0\]
     150  **	ret
     151  */
     152  TEST_PREFETCH (prfh_pstl1strm, uint8_t,
     153  	       svprfh (p0, x0, SV_PSTL1STRM),
     154  	       svprfh (p0, x0, SV_PSTL1STRM))
     155  
     156  /*
     157  ** prfh_pstl2keep:
     158  **	prfh	pstl2keep, p0, \[x0\]
     159  **	ret
     160  */
     161  TEST_PREFETCH (prfh_pstl2keep, uint8_t,
     162  	       svprfh (p0, x0, SV_PSTL2KEEP),
     163  	       svprfh (p0, x0, SV_PSTL2KEEP))
     164  
     165  /*
     166  ** prfh_pstl2strm:
     167  **	prfh	pstl2strm, p0, \[x0\]
     168  **	ret
     169  */
     170  TEST_PREFETCH (prfh_pstl2strm, uint8_t,
     171  	       svprfh (p0, x0, SV_PSTL2STRM),
     172  	       svprfh (p0, x0, SV_PSTL2STRM))
     173  
     174  /*
     175  ** prfh_pstl3keep:
     176  **	prfh	pstl3keep, p0, \[x0\]
     177  **	ret
     178  */
     179  TEST_PREFETCH (prfh_pstl3keep, uint8_t,
     180  	       svprfh (p0, x0, SV_PSTL3KEEP),
     181  	       svprfh (p0, x0, SV_PSTL3KEEP))
     182  
     183  /*
     184  ** prfh_pstl3strm:
     185  **	prfh	pstl3strm, p0, \[x0\]
     186  **	ret
     187  */
     188  TEST_PREFETCH (prfh_pstl3strm, uint8_t,
     189  	       svprfh (p0, x0, SV_PSTL3STRM),
     190  	       svprfh (p0, x0, SV_PSTL3STRM))
     191  
     192  /*
     193  ** prfh_vnum_0:
     194  **	prfh	pldl1keep, p0, \[x0\]
     195  **	ret
     196  */
     197  TEST_PREFETCH (prfh_vnum_0, uint8_t,
     198  	       svprfh_vnum (p0, x0, 0, SV_PLDL1KEEP),
     199  	       svprfh_vnum (p0, x0, 0, SV_PLDL1KEEP))
     200  
     201  /*
     202  ** prfh_vnum_1:
     203  **	prfh	pldl1keep, p0, \[x0, #1, mul vl\]
     204  **	ret
     205  */
     206  TEST_PREFETCH (prfh_vnum_1, uint16_t,
     207  	       svprfh_vnum (p0, x0, 1, SV_PLDL1KEEP),
     208  	       svprfh_vnum (p0, x0, 1, SV_PLDL1KEEP))
     209  
     210  /*
     211  ** prfh_vnum_31:
     212  **	prfh	pldl1keep, p0, \[x0, #31, mul vl\]
     213  **	ret
     214  */
     215  TEST_PREFETCH (prfh_vnum_31, uint16_t,
     216  	       svprfh_vnum (p0, x0, 31, SV_PLDL1KEEP),
     217  	       svprfh_vnum (p0, x0, 31, SV_PLDL1KEEP))
     218  
     219  /*
     220  ** prfh_vnum_32:
     221  **	cntd	(x[0-9]+)
     222  **	lsl	(x[0-9]+), \1, #?8
     223  **	add	(x[0-9]+), (\2, x0|x0, \2)
     224  **	prfh	pldl1keep, p0, \[\3\]
     225  **	ret
     226  */
     227  TEST_PREFETCH (prfh_vnum_32, uint16_t,
     228  	       svprfh_vnum (p0, x0, 32, SV_PLDL1KEEP),
     229  	       svprfh_vnum (p0, x0, 32, SV_PLDL1KEEP))
     230  
     231  /*
     232  ** prfh_vnum_m32:
     233  **	prfh	pldl1keep, p0, \[x0, #-32, mul vl\]
     234  **	ret
     235  */
     236  TEST_PREFETCH (prfh_vnum_m32, uint16_t,
     237  	       svprfh_vnum (p0, x0, -32, SV_PLDL1KEEP),
     238  	       svprfh_vnum (p0, x0, -32, SV_PLDL1KEEP))
     239  
     240  /*
     241  ** prfh_vnum_m33:
     242  **	...
     243  **	prfh	pldl1keep, p0, \[x[0-9]+\]
     244  **	ret
     245  */
     246  TEST_PREFETCH (prfh_vnum_m33, uint16_t,
     247  	       svprfh_vnum (p0, x0, -33, SV_PLDL1KEEP),
     248  	       svprfh_vnum (p0, x0, -33, SV_PLDL1KEEP))
     249  
     250  /*
     251  ** prfh_vnum_x1:
     252  **	cntb	(x[0-9]+)
     253  ** (
     254  **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
     255  **	prfh	pldl1keep, p0, \[\2\]
     256  ** |
     257  **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
     258  **	prfh	zldl1keep, p0, \[x0, \3\]
     259  ** )
     260  **	ret
     261  */
     262  TEST_PREFETCH (prfh_vnum_x1, uint64_t,
     263  	       svprfh_vnum (p0, x0, x1, SV_PLDL1KEEP),
     264  	       svprfh_vnum (p0, x0, x1, SV_PLDL1KEEP))