1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** cvt_u32_f16_m_tied1:
       7  **	fcvtzu	z0\.s, p0/m, z4\.h
       8  **	ret
       9  */
      10  TEST_DUAL_Z (cvt_u32_f16_m_tied1, svuint32_t, svfloat16_t,
      11  	     z0 = svcvt_u32_f16_m (z0, p0, z4),
      12  	     z0 = svcvt_u32_m (z0, p0, z4))
      13  
      14  /*
      15  ** cvt_u32_f16_m_tied2:
      16  **	mov	(z[0-9]+)\.d, z0\.d
      17  **	movprfx	z0, z4
      18  **	fcvtzu	z0\.s, p0/m, \1\.h
      19  **	ret
      20  */
      21  TEST_DUAL_Z_REV (cvt_u32_f16_m_tied2, svuint32_t, svfloat16_t,
      22  		 z0_res = svcvt_u32_f16_m (z4, p0, z0),
      23  		 z0_res = svcvt_u32_m (z4, p0, z0))
      24  
      25  /*
      26  ** cvt_u32_f16_m_untied:
      27  **	movprfx	z0, z1
      28  **	fcvtzu	z0\.s, p0/m, z4\.h
      29  **	ret
      30  */
      31  TEST_DUAL_Z (cvt_u32_f16_m_untied, svuint32_t, svfloat16_t,
      32  	     z0 = svcvt_u32_f16_m (z1, p0, z4),
      33  	     z0 = svcvt_u32_m (z1, p0, z4))
      34  
      35  /*
      36  ** cvt_u32_f32_m_tied1:
      37  **	fcvtzu	z0\.s, p0/m, z4\.s
      38  **	ret
      39  */
      40  TEST_DUAL_Z (cvt_u32_f32_m_tied1, svuint32_t, svfloat32_t,
      41  	     z0 = svcvt_u32_f32_m (z0, p0, z4),
      42  	     z0 = svcvt_u32_m (z0, p0, z4))
      43  
      44  /*
      45  ** cvt_u32_f32_m_tied2:
      46  **	mov	(z[0-9]+)\.d, z0\.d
      47  **	movprfx	z0, z4
      48  **	fcvtzu	z0\.s, p0/m, \1\.s
      49  **	ret
      50  */
      51  TEST_DUAL_Z_REV (cvt_u32_f32_m_tied2, svuint32_t, svfloat32_t,
      52  		 z0_res = svcvt_u32_f32_m (z4, p0, z0),
      53  		 z0_res = svcvt_u32_m (z4, p0, z0))
      54  
      55  /*
      56  ** cvt_u32_f32_m_untied:
      57  **	movprfx	z0, z1
      58  **	fcvtzu	z0\.s, p0/m, z4\.s
      59  **	ret
      60  */
      61  TEST_DUAL_Z (cvt_u32_f32_m_untied, svuint32_t, svfloat32_t,
      62  	     z0 = svcvt_u32_f32_m (z1, p0, z4),
      63  	     z0 = svcvt_u32_m (z1, p0, z4))
      64  
      65  /*
      66  ** cvt_u32_f64_m_tied1:
      67  **	fcvtzu	z0\.s, p0/m, z4\.d
      68  **	ret
      69  */
      70  TEST_DUAL_Z (cvt_u32_f64_m_tied1, svuint32_t, svfloat64_t,
      71  	     z0 = svcvt_u32_f64_m (z0, p0, z4),
      72  	     z0 = svcvt_u32_m (z0, p0, z4))
      73  
      74  /*
      75  ** cvt_u32_f64_m_tied2:
      76  **	mov	(z[0-9]+\.d), z0\.d
      77  **	movprfx	z0, z4
      78  **	fcvtzu	z0\.s, p0/m, \1
      79  **	ret
      80  */
      81  TEST_DUAL_Z_REV (cvt_u32_f64_m_tied2, svuint32_t, svfloat64_t,
      82  		 z0_res = svcvt_u32_f64_m (z4, p0, z0),
      83  		 z0_res = svcvt_u32_m (z4, p0, z0))
      84  
      85  /*
      86  ** cvt_u32_f64_m_untied:
      87  **	movprfx	z0, z1
      88  **	fcvtzu	z0\.s, p0/m, z4\.d
      89  **	ret
      90  */
      91  TEST_DUAL_Z (cvt_u32_f64_m_untied, svuint32_t, svfloat64_t,
      92  	     z0 = svcvt_u32_f64_m (z1, p0, z4),
      93  	     z0 = svcvt_u32_m (z1, p0, z4))
      94  
      95  /*
      96  ** cvt_u32_f16_z_tied1:
      97  **	mov	(z[0-9]+)\.d, z0\.d
      98  **	movprfx	z0\.s, p0/z, \1\.s
      99  **	fcvtzu	z0\.s, p0/m, \1\.h
     100  **	ret
     101  */
     102  TEST_DUAL_Z_REV (cvt_u32_f16_z_tied1, svuint32_t, svfloat16_t,
     103  		 z0_res = svcvt_u32_f16_z (p0, z0),
     104  		 z0_res = svcvt_u32_z (p0, z0))
     105  
     106  /*
     107  ** cvt_u32_f16_z_untied:
     108  **	movprfx	z0\.s, p0/z, z4\.s
     109  **	fcvtzu	z0\.s, p0/m, z4\.h
     110  **	ret
     111  */
     112  TEST_DUAL_Z (cvt_u32_f16_z_untied, svuint32_t, svfloat16_t,
     113  	     z0 = svcvt_u32_f16_z (p0, z4),
     114  	     z0 = svcvt_u32_z (p0, z4))
     115  
     116  /*
     117  ** cvt_u32_f32_z_tied1:
     118  **	mov	(z[0-9]+)\.d, z0\.d
     119  **	movprfx	z0\.s, p0/z, \1\.s
     120  **	fcvtzu	z0\.s, p0/m, \1\.s
     121  **	ret
     122  */
     123  TEST_DUAL_Z_REV (cvt_u32_f32_z_tied1, svuint32_t, svfloat32_t,
     124  		 z0_res = svcvt_u32_f32_z (p0, z0),
     125  		 z0_res = svcvt_u32_z (p0, z0))
     126  
     127  /*
     128  ** cvt_u32_f32_z_untied:
     129  **	movprfx	z0\.s, p0/z, z4\.s
     130  **	fcvtzu	z0\.s, p0/m, z4\.s
     131  **	ret
     132  */
     133  TEST_DUAL_Z (cvt_u32_f32_z_untied, svuint32_t, svfloat32_t,
     134  	     z0 = svcvt_u32_f32_z (p0, z4),
     135  	     z0 = svcvt_u32_z (p0, z4))
     136  
     137  /*
     138  ** cvt_u32_f64_z_tied1:
     139  **	mov	(z[0-9]+\.d), z0\.d
     140  **	movprfx	z0\.d, p0/z, \1
     141  **	fcvtzu	z0\.s, p0/m, \1
     142  **	ret
     143  */
     144  TEST_DUAL_Z_REV (cvt_u32_f64_z_tied1, svuint32_t, svfloat64_t,
     145  		 z0_res = svcvt_u32_f64_z (p0, z0),
     146  		 z0_res = svcvt_u32_z (p0, z0))
     147  
     148  /*
     149  ** cvt_u32_f64_z_untied:
     150  **	movprfx	z0\.d, p0/z, z4\.d
     151  **	fcvtzu	z0\.s, p0/m, z4\.d
     152  **	ret
     153  */
     154  TEST_DUAL_Z (cvt_u32_f64_z_untied, svuint32_t, svfloat64_t,
     155  	     z0 = svcvt_u32_f64_z (p0, z4),
     156  	     z0 = svcvt_u32_z (p0, z4))
     157  
     158  /*
     159  ** cvt_u32_f16_x_tied1:
     160  **	fcvtzu	z0\.s, p0/m, z0\.h
     161  **	ret
     162  */
     163  TEST_DUAL_Z_REV (cvt_u32_f16_x_tied1, svuint32_t, svfloat16_t,
     164  		 z0_res = svcvt_u32_f16_x (p0, z0),
     165  		 z0_res = svcvt_u32_x (p0, z0))
     166  
     167  /*
     168  ** cvt_u32_f16_x_untied:
     169  **	movprfx	z0, z4
     170  **	fcvtzu	z0\.s, p0/m, z4\.h
     171  **	ret
     172  */
     173  TEST_DUAL_Z (cvt_u32_f16_x_untied, svuint32_t, svfloat16_t,
     174  	     z0 = svcvt_u32_f16_x (p0, z4),
     175  	     z0 = svcvt_u32_x (p0, z4))
     176  
     177  /*
     178  ** cvt_u32_f32_x_tied1:
     179  **	fcvtzu	z0\.s, p0/m, z0\.s
     180  **	ret
     181  */
     182  TEST_DUAL_Z_REV (cvt_u32_f32_x_tied1, svuint32_t, svfloat32_t,
     183  		 z0_res = svcvt_u32_f32_x (p0, z0),
     184  		 z0_res = svcvt_u32_x (p0, z0))
     185  
     186  /*
     187  ** cvt_u32_f32_x_untied:
     188  **	movprfx	z0, z4
     189  **	fcvtzu	z0\.s, p0/m, z4\.s
     190  **	ret
     191  */
     192  TEST_DUAL_Z (cvt_u32_f32_x_untied, svuint32_t, svfloat32_t,
     193  	     z0 = svcvt_u32_f32_x (p0, z4),
     194  	     z0 = svcvt_u32_x (p0, z4))
     195  
     196  /*
     197  ** cvt_u32_f64_x_tied1:
     198  **	fcvtzu	z0\.s, p0/m, z0\.d
     199  **	ret
     200  */
     201  TEST_DUAL_Z_REV (cvt_u32_f64_x_tied1, svuint32_t, svfloat64_t,
     202  		 z0_res = svcvt_u32_f64_x (p0, z0),
     203  		 z0_res = svcvt_u32_x (p0, z0))
     204  
     205  /*
     206  ** cvt_u32_f64_x_untied:
     207  **	movprfx	z0, z4
     208  **	fcvtzu	z0\.s, p0/m, z4\.d
     209  **	ret
     210  */
     211  TEST_DUAL_Z (cvt_u32_f64_x_untied, svuint32_t, svfloat64_t,
     212  	     z0 = svcvt_u32_f64_x (p0, z4),
     213  	     z0 = svcvt_u32_x (p0, z4))