1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** div_f32_m_tied1:
       7  **	fdiv	z0\.s, p0/m, z0\.s, z1\.s
       8  **	ret
       9  */
      10  TEST_UNIFORM_Z (div_f32_m_tied1, svfloat32_t,
      11  		z0 = svdiv_f32_m (p0, z0, z1),
      12  		z0 = svdiv_m (p0, z0, z1))
      13  
      14  /*
      15  ** div_f32_m_tied2:
      16  **	mov	(z[0-9]+)\.d, z0\.d
      17  **	movprfx	z0, z1
      18  **	fdiv	z0\.s, p0/m, z0\.s, \1\.s
      19  **	ret
      20  */
      21  TEST_UNIFORM_Z (div_f32_m_tied2, svfloat32_t,
      22  		z0 = svdiv_f32_m (p0, z1, z0),
      23  		z0 = svdiv_m (p0, z1, z0))
      24  
      25  /*
      26  ** div_f32_m_untied:
      27  **	movprfx	z0, z1
      28  **	fdiv	z0\.s, p0/m, z0\.s, z2\.s
      29  **	ret
      30  */
      31  TEST_UNIFORM_Z (div_f32_m_untied, svfloat32_t,
      32  		z0 = svdiv_f32_m (p0, z1, z2),
      33  		z0 = svdiv_m (p0, z1, z2))
      34  
      35  /*
      36  ** div_s4_f32_m_tied1:
      37  **	mov	(z[0-9]+\.s), s4
      38  **	fdiv	z0\.s, p0/m, z0\.s, \1
      39  **	ret
      40  */
      41  TEST_UNIFORM_ZD (div_s4_f32_m_tied1, svfloat32_t, float,
      42  		 z0 = svdiv_n_f32_m (p0, z0, d4),
      43  		 z0 = svdiv_m (p0, z0, d4))
      44  
      45  /*
      46  ** div_s4_f32_m_untied:
      47  **	mov	(z[0-9]+\.s), s4
      48  **	movprfx	z0, z1
      49  **	fdiv	z0\.s, p0/m, z0\.s, \1
      50  **	ret
      51  */
      52  TEST_UNIFORM_ZD (div_s4_f32_m_untied, svfloat32_t, float,
      53  		 z0 = svdiv_n_f32_m (p0, z1, d4),
      54  		 z0 = svdiv_m (p0, z1, d4))
      55  
      56  /*
      57  ** div_1_f32_m_tied1:
      58  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
      59  **	fdiv	z0\.s, p0/m, z0\.s, \1
      60  **	ret
      61  */
      62  TEST_UNIFORM_Z (div_1_f32_m_tied1, svfloat32_t,
      63  		z0 = svdiv_n_f32_m (p0, z0, 1),
      64  		z0 = svdiv_m (p0, z0, 1))
      65  
      66  /*
      67  ** div_1_f32_m_untied: { xfail *-*-* }
      68  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
      69  **	movprfx	z0, z1
      70  **	fdiv	z0\.s, p0/m, z0\.s, \1
      71  **	ret
      72  */
      73  TEST_UNIFORM_Z (div_1_f32_m_untied, svfloat32_t,
      74  		z0 = svdiv_n_f32_m (p0, z1, 1),
      75  		z0 = svdiv_m (p0, z1, 1))
      76  
      77  /*
      78  ** div_f32_z_tied1:
      79  **	movprfx	z0\.s, p0/z, z0\.s
      80  **	fdiv	z0\.s, p0/m, z0\.s, z1\.s
      81  **	ret
      82  */
      83  TEST_UNIFORM_Z (div_f32_z_tied1, svfloat32_t,
      84  		z0 = svdiv_f32_z (p0, z0, z1),
      85  		z0 = svdiv_z (p0, z0, z1))
      86  
      87  /*
      88  ** div_f32_z_tied2:
      89  **	movprfx	z0\.s, p0/z, z0\.s
      90  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
      91  **	ret
      92  */
      93  TEST_UNIFORM_Z (div_f32_z_tied2, svfloat32_t,
      94  		z0 = svdiv_f32_z (p0, z1, z0),
      95  		z0 = svdiv_z (p0, z1, z0))
      96  
      97  /*
      98  ** div_f32_z_untied:
      99  ** (
     100  **	movprfx	z0\.s, p0/z, z1\.s
     101  **	fdiv	z0\.s, p0/m, z0\.s, z2\.s
     102  ** |
     103  **	movprfx	z0\.s, p0/z, z2\.s
     104  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     105  ** )
     106  **	ret
     107  */
     108  TEST_UNIFORM_Z (div_f32_z_untied, svfloat32_t,
     109  		z0 = svdiv_f32_z (p0, z1, z2),
     110  		z0 = svdiv_z (p0, z1, z2))
     111  
     112  /*
     113  ** div_s4_f32_z_tied1:
     114  **	mov	(z[0-9]+\.s), s4
     115  **	movprfx	z0\.s, p0/z, z0\.s
     116  **	fdiv	z0\.s, p0/m, z0\.s, \1
     117  **	ret
     118  */
     119  TEST_UNIFORM_ZD (div_s4_f32_z_tied1, svfloat32_t, float,
     120  		 z0 = svdiv_n_f32_z (p0, z0, d4),
     121  		 z0 = svdiv_z (p0, z0, d4))
     122  
     123  /*
     124  ** div_s4_f32_z_untied:
     125  **	mov	(z[0-9]+\.s), s4
     126  ** (
     127  **	movprfx	z0\.s, p0/z, z1\.s
     128  **	fdiv	z0\.s, p0/m, z0\.s, \1
     129  ** |
     130  **	movprfx	z0\.s, p0/z, \1
     131  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     132  ** )
     133  **	ret
     134  */
     135  TEST_UNIFORM_ZD (div_s4_f32_z_untied, svfloat32_t, float,
     136  		 z0 = svdiv_n_f32_z (p0, z1, d4),
     137  		 z0 = svdiv_z (p0, z1, d4))
     138  
     139  /*
     140  ** div_1_f32_z_tied1:
     141  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     142  **	movprfx	z0\.s, p0/z, z0\.s
     143  **	fdiv	z0\.s, p0/m, z0\.s, \1
     144  **	ret
     145  */
     146  TEST_UNIFORM_Z (div_1_f32_z_tied1, svfloat32_t,
     147  		z0 = svdiv_n_f32_z (p0, z0, 1),
     148  		z0 = svdiv_z (p0, z0, 1))
     149  
     150  /*
     151  ** div_1_f32_z_untied:
     152  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     153  ** (
     154  **	movprfx	z0\.s, p0/z, z1\.s
     155  **	fdiv	z0\.s, p0/m, z0\.s, \1
     156  ** |
     157  **	movprfx	z0\.s, p0/z, \1
     158  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     159  ** )
     160  **	ret
     161  */
     162  TEST_UNIFORM_Z (div_1_f32_z_untied, svfloat32_t,
     163  		z0 = svdiv_n_f32_z (p0, z1, 1),
     164  		z0 = svdiv_z (p0, z1, 1))
     165  
     166  /*
     167  ** div_0p5_f32_z:
     168  **	fmov	(z[0-9]+\.s), #(?:0\.5|5\.0e-1)
     169  **	movprfx	z0\.s, p0/z, z0\.s
     170  **	fdiv	z0\.s, p0/m, z0\.s, \1
     171  **	ret
     172  */
     173  TEST_UNIFORM_Z (div_0p5_f32_z, svfloat32_t,
     174  		z0 = svdiv_n_f32_z (p0, z0, 0.5),
     175  		z0 = svdiv_z (p0, z0, 0.5))
     176  
     177  /*
     178  ** div_f32_x_tied1:
     179  **	fdiv	z0\.s, p0/m, z0\.s, z1\.s
     180  **	ret
     181  */
     182  TEST_UNIFORM_Z (div_f32_x_tied1, svfloat32_t,
     183  		z0 = svdiv_f32_x (p0, z0, z1),
     184  		z0 = svdiv_x (p0, z0, z1))
     185  
     186  /*
     187  ** div_f32_x_tied2:
     188  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     189  **	ret
     190  */
     191  TEST_UNIFORM_Z (div_f32_x_tied2, svfloat32_t,
     192  		z0 = svdiv_f32_x (p0, z1, z0),
     193  		z0 = svdiv_x (p0, z1, z0))
     194  
     195  /*
     196  ** div_f32_x_untied:
     197  ** (
     198  **	movprfx	z0, z1
     199  **	fdiv	z0\.s, p0/m, z0\.s, z2\.s
     200  ** |
     201  **	movprfx	z0, z2
     202  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     203  ** )
     204  **	ret
     205  */
     206  TEST_UNIFORM_Z (div_f32_x_untied, svfloat32_t,
     207  		z0 = svdiv_f32_x (p0, z1, z2),
     208  		z0 = svdiv_x (p0, z1, z2))
     209  
     210  /*
     211  ** div_s4_f32_x_tied1:
     212  **	mov	(z[0-9]+\.s), s4
     213  **	fdiv	z0\.s, p0/m, z0\.s, \1
     214  **	ret
     215  */
     216  TEST_UNIFORM_ZD (div_s4_f32_x_tied1, svfloat32_t, float,
     217  		 z0 = svdiv_n_f32_x (p0, z0, d4),
     218  		 z0 = svdiv_x (p0, z0, d4))
     219  
     220  /*
     221  ** div_s4_f32_x_untied:
     222  **	mov	z0\.s, s4
     223  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     224  **	ret
     225  */
     226  TEST_UNIFORM_ZD (div_s4_f32_x_untied, svfloat32_t, float,
     227  		 z0 = svdiv_n_f32_x (p0, z1, d4),
     228  		 z0 = svdiv_x (p0, z1, d4))
     229  
     230  /*
     231  ** div_1_f32_x_tied1:
     232  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     233  **	fdiv	z0\.s, p0/m, z0\.s, \1
     234  **	ret
     235  */
     236  TEST_UNIFORM_Z (div_1_f32_x_tied1, svfloat32_t,
     237  		z0 = svdiv_n_f32_x (p0, z0, 1),
     238  		z0 = svdiv_x (p0, z0, 1))
     239  
     240  /*
     241  ** div_1_f32_x_untied:
     242  **	fmov	z0\.s, #1\.0(?:e\+0)?
     243  **	fdivr	z0\.s, p0/m, z0\.s, z1\.s
     244  **	ret
     245  */
     246  TEST_UNIFORM_Z (div_1_f32_x_untied, svfloat32_t,
     247  		z0 = svdiv_n_f32_x (p0, z1, 1),
     248  		z0 = svdiv_x (p0, z1, 1))
     249  
     250  /*
     251  ** ptrue_div_f32_x_tied1:
     252  **	...
     253  **	ptrue	p[0-9]+\.b[^\n]*
     254  **	...
     255  **	ret
     256  */
     257  TEST_UNIFORM_Z (ptrue_div_f32_x_tied1, svfloat32_t,
     258  		z0 = svdiv_f32_x (svptrue_b32 (), z0, z1),
     259  		z0 = svdiv_x (svptrue_b32 (), z0, z1))
     260  
     261  /*
     262  ** ptrue_div_f32_x_tied2:
     263  **	...
     264  **	ptrue	p[0-9]+\.b[^\n]*
     265  **	...
     266  **	ret
     267  */
     268  TEST_UNIFORM_Z (ptrue_div_f32_x_tied2, svfloat32_t,
     269  		z0 = svdiv_f32_x (svptrue_b32 (), z1, z0),
     270  		z0 = svdiv_x (svptrue_b32 (), z1, z0))
     271  
     272  /*
     273  ** ptrue_div_f32_x_untied:
     274  **	...
     275  **	ptrue	p[0-9]+\.b[^\n]*
     276  **	...
     277  **	ret
     278  */
     279  TEST_UNIFORM_Z (ptrue_div_f32_x_untied, svfloat32_t,
     280  		z0 = svdiv_f32_x (svptrue_b32 (), z1, z2),
     281  		z0 = svdiv_x (svptrue_b32 (), z1, z2))
     282  
     283  /*
     284  ** ptrue_div_1_f32_x_tied1:
     285  **	...
     286  **	ptrue	p[0-9]+\.b[^\n]*
     287  **	...
     288  **	ret
     289  */
     290  TEST_UNIFORM_Z (ptrue_div_1_f32_x_tied1, svfloat32_t,
     291  		z0 = svdiv_n_f32_x (svptrue_b32 (), z0, 1),
     292  		z0 = svdiv_x (svptrue_b32 (), z0, 1))
     293  
     294  /*
     295  ** ptrue_div_1_f32_x_untied:
     296  **	...
     297  **	ptrue	p[0-9]+\.b[^\n]*
     298  **	...
     299  **	ret
     300  */
     301  TEST_UNIFORM_Z (ptrue_div_1_f32_x_untied, svfloat32_t,
     302  		z0 = svdiv_n_f32_x (svptrue_b32 (), z1, 1),
     303  		z0 = svdiv_x (svptrue_b32 (), z1, 1))