1  /* { dg-additional-options "-fno-trapping-math" } */
       2  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       3  
       4  #include "test_sve_acle.h"
       5  
       6  /*
       7  ** mul_f32_m_tied1:
       8  **	fmul	z0\.s, p0/m, z0\.s, z1\.s
       9  **	ret
      10  */
      11  TEST_UNIFORM_Z (mul_f32_m_tied1, svfloat32_t,
      12  		z0 = svmul_f32_m (p0, z0, z1),
      13  		z0 = svmul_m (p0, z0, z1))
      14  
      15  /*
      16  ** mul_f32_m_tied2:
      17  **	mov	(z[0-9]+)\.d, z0\.d
      18  **	movprfx	z0, z1
      19  **	fmul	z0\.s, p0/m, z0\.s, \1\.s
      20  **	ret
      21  */
      22  TEST_UNIFORM_Z (mul_f32_m_tied2, svfloat32_t,
      23  		z0 = svmul_f32_m (p0, z1, z0),
      24  		z0 = svmul_m (p0, z1, z0))
      25  
      26  /*
      27  ** mul_f32_m_untied:
      28  **	movprfx	z0, z1
      29  **	fmul	z0\.s, p0/m, z0\.s, z2\.s
      30  **	ret
      31  */
      32  TEST_UNIFORM_Z (mul_f32_m_untied, svfloat32_t,
      33  		z0 = svmul_f32_m (p0, z1, z2),
      34  		z0 = svmul_m (p0, z1, z2))
      35  
      36  /*
      37  ** mul_s4_f32_m_tied1:
      38  **	mov	(z[0-9]+\.s), s4
      39  **	fmul	z0\.s, p0/m, z0\.s, \1
      40  **	ret
      41  */
      42  TEST_UNIFORM_ZD (mul_s4_f32_m_tied1, svfloat32_t, float,
      43  		 z0 = svmul_n_f32_m (p0, z0, d4),
      44  		 z0 = svmul_m (p0, z0, d4))
      45  
      46  /*
      47  ** mul_s4_f32_m_untied:
      48  **	mov	(z[0-9]+\.s), s4
      49  **	movprfx	z0, z1
      50  **	fmul	z0\.s, p0/m, z0\.s, \1
      51  **	ret
      52  */
      53  TEST_UNIFORM_ZD (mul_s4_f32_m_untied, svfloat32_t, float,
      54  		 z0 = svmul_n_f32_m (p0, z1, d4),
      55  		 z0 = svmul_m (p0, z1, d4))
      56  
      57  /*
      58  ** mul_1_f32_m_tied1:
      59  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
      60  **	fmul	z0\.s, p0/m, z0\.s, \1
      61  **	ret
      62  */
      63  TEST_UNIFORM_Z (mul_1_f32_m_tied1, svfloat32_t,
      64  		z0 = svmul_n_f32_m (p0, z0, 1),
      65  		z0 = svmul_m (p0, z0, 1))
      66  
      67  /*
      68  ** mul_1_f32_m_untied: { xfail *-*-* }
      69  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
      70  **	movprfx	z0, z1
      71  **	fmul	z0\.s, p0/m, z0\.s, \1
      72  **	ret
      73  */
      74  TEST_UNIFORM_Z (mul_1_f32_m_untied, svfloat32_t,
      75  		z0 = svmul_n_f32_m (p0, z1, 1),
      76  		z0 = svmul_m (p0, z1, 1))
      77  
      78  /*
      79  ** mul_0p5_f32_m_tied1:
      80  **	fmul	z0\.s, p0/m, z0\.s, #0\.5
      81  **	ret
      82  */
      83  TEST_UNIFORM_Z (mul_0p5_f32_m_tied1, svfloat32_t,
      84  		z0 = svmul_n_f32_m (p0, z0, 0.5),
      85  		z0 = svmul_m (p0, z0, 0.5))
      86  
      87  /*
      88  ** mul_0p5_f32_m_untied:
      89  **	movprfx	z0, z1
      90  **	fmul	z0\.s, p0/m, z0\.s, #0\.5
      91  **	ret
      92  */
      93  TEST_UNIFORM_Z (mul_0p5_f32_m_untied, svfloat32_t,
      94  		z0 = svmul_n_f32_m (p0, z1, 0.5),
      95  		z0 = svmul_m (p0, z1, 0.5))
      96  
      97  /*
      98  ** mul_2_f32_m_tied1:
      99  **	fmul	z0\.s, p0/m, z0\.s, #2\.0
     100  **	ret
     101  */
     102  TEST_UNIFORM_Z (mul_2_f32_m_tied1, svfloat32_t,
     103  		z0 = svmul_n_f32_m (p0, z0, 2),
     104  		z0 = svmul_m (p0, z0, 2))
     105  
     106  /*
     107  ** mul_2_f32_m_untied:
     108  **	movprfx	z0, z1
     109  **	fmul	z0\.s, p0/m, z0\.s, #2\.0
     110  **	ret
     111  */
     112  TEST_UNIFORM_Z (mul_2_f32_m_untied, svfloat32_t,
     113  		z0 = svmul_n_f32_m (p0, z1, 2),
     114  		z0 = svmul_m (p0, z1, 2))
     115  
     116  /*
     117  ** mul_f32_z_tied1:
     118  **	movprfx	z0\.s, p0/z, z0\.s
     119  **	fmul	z0\.s, p0/m, z0\.s, z1\.s
     120  **	ret
     121  */
     122  TEST_UNIFORM_Z (mul_f32_z_tied1, svfloat32_t,
     123  		z0 = svmul_f32_z (p0, z0, z1),
     124  		z0 = svmul_z (p0, z0, z1))
     125  
     126  /*
     127  ** mul_f32_z_tied2:
     128  **	movprfx	z0\.s, p0/z, z0\.s
     129  **	fmul	z0\.s, p0/m, z0\.s, z1\.s
     130  **	ret
     131  */
     132  TEST_UNIFORM_Z (mul_f32_z_tied2, svfloat32_t,
     133  		z0 = svmul_f32_z (p0, z1, z0),
     134  		z0 = svmul_z (p0, z1, z0))
     135  
     136  /*
     137  ** mul_f32_z_untied:
     138  ** (
     139  **	movprfx	z0\.s, p0/z, z1\.s
     140  **	fmul	z0\.s, p0/m, z0\.s, z2\.s
     141  ** |
     142  **	movprfx	z0\.s, p0/z, z2\.s
     143  **	fmul	z0\.s, p0/m, z0\.s, z1\.s
     144  ** )
     145  **	ret
     146  */
     147  TEST_UNIFORM_Z (mul_f32_z_untied, svfloat32_t,
     148  		z0 = svmul_f32_z (p0, z1, z2),
     149  		z0 = svmul_z (p0, z1, z2))
     150  
     151  /*
     152  ** mul_s4_f32_z_tied1:
     153  **	mov	(z[0-9]+\.s), s4
     154  **	movprfx	z0\.s, p0/z, z0\.s
     155  **	fmul	z0\.s, p0/m, z0\.s, \1
     156  **	ret
     157  */
     158  TEST_UNIFORM_ZD (mul_s4_f32_z_tied1, svfloat32_t, float,
     159  		 z0 = svmul_n_f32_z (p0, z0, d4),
     160  		 z0 = svmul_z (p0, z0, d4))
     161  
     162  /*
     163  ** mul_s4_f32_z_untied:
     164  **	mov	(z[0-9]+\.s), s4
     165  ** (
     166  **	movprfx	z0\.s, p0/z, z1\.s
     167  **	fmul	z0\.s, p0/m, z0\.s, \1
     168  ** |
     169  **	movprfx	z0\.s, p0/z, \1
     170  **	fmul	z0\.s, p0/m, z0\.s, z1\.s
     171  ** )
     172  **	ret
     173  */
     174  TEST_UNIFORM_ZD (mul_s4_f32_z_untied, svfloat32_t, float,
     175  		 z0 = svmul_n_f32_z (p0, z1, d4),
     176  		 z0 = svmul_z (p0, z1, d4))
     177  
     178  /*
     179  ** mul_1_f32_z_tied1:
     180  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     181  **	movprfx	z0\.s, p0/z, z0\.s
     182  **	fmul	z0\.s, p0/m, z0\.s, \1
     183  **	ret
     184  */
     185  TEST_UNIFORM_Z (mul_1_f32_z_tied1, svfloat32_t,
     186  		z0 = svmul_n_f32_z (p0, z0, 1),
     187  		z0 = svmul_z (p0, z0, 1))
     188  
     189  /*
     190  ** mul_1_f32_z_untied:
     191  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     192  ** (
     193  **	movprfx	z0\.s, p0/z, z1\.s
     194  **	fmul	z0\.s, p0/m, z0\.s, \1
     195  ** |
     196  **	movprfx	z0\.s, p0/z, \1
     197  **	fmul	z0\.s, p0/m, z0\.s, z1\.s
     198  ** )
     199  **	ret
     200  */
     201  TEST_UNIFORM_Z (mul_1_f32_z_untied, svfloat32_t,
     202  		z0 = svmul_n_f32_z (p0, z1, 1),
     203  		z0 = svmul_z (p0, z1, 1))
     204  
     205  /*
     206  ** mul_0p5_f32_z_tied1:
     207  **	movprfx	z0\.s, p0/z, z0\.s
     208  **	fmul	z0\.s, p0/m, z0\.s, #0\.5
     209  **	ret
     210  */
     211  TEST_UNIFORM_Z (mul_0p5_f32_z_tied1, svfloat32_t,
     212  		z0 = svmul_n_f32_z (p0, z0, 0.5),
     213  		z0 = svmul_z (p0, z0, 0.5))
     214  
     215  /*
     216  ** mul_0p5_f32_z_untied:
     217  **	movprfx	z0\.s, p0/z, z1\.s
     218  **	fmul	z0\.s, p0/m, z0\.s, #0\.5
     219  **	ret
     220  */
     221  TEST_UNIFORM_Z (mul_0p5_f32_z_untied, svfloat32_t,
     222  		z0 = svmul_n_f32_z (p0, z1, 0.5),
     223  		z0 = svmul_z (p0, z1, 0.5))
     224  
     225  /*
     226  ** mul_2_f32_z_tied1:
     227  **	movprfx	z0\.s, p0/z, z0\.s
     228  **	fmul	z0\.s, p0/m, z0\.s, #2\.0
     229  **	ret
     230  */
     231  TEST_UNIFORM_Z (mul_2_f32_z_tied1, svfloat32_t,
     232  		z0 = svmul_n_f32_z (p0, z0, 2),
     233  		z0 = svmul_z (p0, z0, 2))
     234  
     235  /*
     236  ** mul_2_f32_z_untied:
     237  **	movprfx	z0\.s, p0/z, z1\.s
     238  **	fmul	z0\.s, p0/m, z0\.s, #2\.0
     239  **	ret
     240  */
     241  TEST_UNIFORM_Z (mul_2_f32_z_untied, svfloat32_t,
     242  		z0 = svmul_n_f32_z (p0, z1, 2),
     243  		z0 = svmul_z (p0, z1, 2))
     244  
     245  /*
     246  ** mul_f32_x_tied1:
     247  **	fmul	z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
     248  **	ret
     249  */
     250  TEST_UNIFORM_Z (mul_f32_x_tied1, svfloat32_t,
     251  		z0 = svmul_f32_x (p0, z0, z1),
     252  		z0 = svmul_x (p0, z0, z1))
     253  
     254  /*
     255  ** mul_f32_x_tied2:
     256  **	fmul	z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
     257  **	ret
     258  */
     259  TEST_UNIFORM_Z (mul_f32_x_tied2, svfloat32_t,
     260  		z0 = svmul_f32_x (p0, z1, z0),
     261  		z0 = svmul_x (p0, z1, z0))
     262  
     263  /*
     264  ** mul_f32_x_untied:
     265  **	fmul	z0\.s, (z1\.s, z2\.s|z2\.s, z1\.s)
     266  **	ret
     267  */
     268  TEST_UNIFORM_Z (mul_f32_x_untied, svfloat32_t,
     269  		z0 = svmul_f32_x (p0, z1, z2),
     270  		z0 = svmul_x (p0, z1, z2))
     271  
     272  /*
     273  ** mul_s4_f32_x_tied1:
     274  **	mov	(z[0-9]+\.s), s4
     275  **	fmul	z0\.s, (z0\.s, \1|\1, z0\.s)
     276  **	ret
     277  */
     278  TEST_UNIFORM_ZD (mul_s4_f32_x_tied1, svfloat32_t, float,
     279  		 z0 = svmul_n_f32_x (p0, z0, d4),
     280  		 z0 = svmul_x (p0, z0, d4))
     281  
     282  /*
     283  ** mul_s4_f32_x_untied:
     284  **	mov	(z[0-9]+\.s), s4
     285  **	fmul	z0\.s, (z1\.s, \1|\1, z1\.s)
     286  **	ret
     287  */
     288  TEST_UNIFORM_ZD (mul_s4_f32_x_untied, svfloat32_t, float,
     289  		 z0 = svmul_n_f32_x (p0, z1, d4),
     290  		 z0 = svmul_x (p0, z1, d4))
     291  
     292  /*
     293  ** mul_1_f32_x_tied1:
     294  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     295  **	fmul	z0\.s, (z0\.s, \1|\1, z0\.s)
     296  **	ret
     297  */
     298  TEST_UNIFORM_Z (mul_1_f32_x_tied1, svfloat32_t,
     299  		z0 = svmul_n_f32_x (p0, z0, 1),
     300  		z0 = svmul_x (p0, z0, 1))
     301  
     302  /*
     303  ** mul_1_f32_x_untied:
     304  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     305  **	fmul	z0\.s, (z1\.s, \1|\1, z1\.s)
     306  **	ret
     307  */
     308  TEST_UNIFORM_Z (mul_1_f32_x_untied, svfloat32_t,
     309  		z0 = svmul_n_f32_x (p0, z1, 1),
     310  		z0 = svmul_x (p0, z1, 1))
     311  
     312  /*
     313  ** mul_0p5_f32_x_tied1:
     314  **	fmul	z0\.s, p0/m, z0\.s, #0\.5
     315  **	ret
     316  */
     317  TEST_UNIFORM_Z (mul_0p5_f32_x_tied1, svfloat32_t,
     318  		z0 = svmul_n_f32_x (p0, z0, 0.5),
     319  		z0 = svmul_x (p0, z0, 0.5))
     320  
     321  /*
     322  ** mul_0p5_f32_x_untied:
     323  **	movprfx	z0, z1
     324  **	fmul	z0\.s, p0/m, z0\.s, #0\.5
     325  **	ret
     326  */
     327  TEST_UNIFORM_Z (mul_0p5_f32_x_untied, svfloat32_t,
     328  		z0 = svmul_n_f32_x (p0, z1, 0.5),
     329  		z0 = svmul_x (p0, z1, 0.5))
     330  
     331  /*
     332  ** mul_2_f32_x_tied1:
     333  **	fmul	z0\.s, p0/m, z0\.s, #2\.0
     334  **	ret
     335  */
     336  TEST_UNIFORM_Z (mul_2_f32_x_tied1, svfloat32_t,
     337  		z0 = svmul_n_f32_x (p0, z0, 2),
     338  		z0 = svmul_x (p0, z0, 2))
     339  
     340  /*
     341  ** mul_2_f32_x_untied:
     342  **	movprfx	z0, z1
     343  **	fmul	z0\.s, p0/m, z0\.s, #2\.0
     344  **	ret
     345  */
     346  TEST_UNIFORM_Z (mul_2_f32_x_untied, svfloat32_t,
     347  		z0 = svmul_n_f32_x (p0, z1, 2),
     348  		z0 = svmul_x (p0, z1, 2))
     349  
     350  /*
     351  ** ptrue_mul_f32_x_tied1:
     352  **	fmul	z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
     353  **	ret
     354  */
     355  TEST_UNIFORM_Z (ptrue_mul_f32_x_tied1, svfloat32_t,
     356  		z0 = svmul_f32_x (svptrue_b32 (), z0, z1),
     357  		z0 = svmul_x (svptrue_b32 (), z0, z1))
     358  
     359  /*
     360  ** ptrue_mul_f32_x_tied2:
     361  **	fmul	z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
     362  **	ret
     363  */
     364  TEST_UNIFORM_Z (ptrue_mul_f32_x_tied2, svfloat32_t,
     365  		z0 = svmul_f32_x (svptrue_b32 (), z1, z0),
     366  		z0 = svmul_x (svptrue_b32 (), z1, z0))
     367  
     368  /*
     369  ** ptrue_mul_f32_x_untied:
     370  **	fmul	z0\.s, (z1\.s, z2\.s|z2\.s, z1\.s)
     371  **	ret
     372  */
     373  TEST_UNIFORM_Z (ptrue_mul_f32_x_untied, svfloat32_t,
     374  		z0 = svmul_f32_x (svptrue_b32 (), z1, z2),
     375  		z0 = svmul_x (svptrue_b32 (), z1, z2))
     376  
     377  /*
     378  ** ptrue_mul_1_f32_x_tied1:
     379  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     380  **	fmul	z0\.s, (z0\.s, \1|\1, z0\.s)
     381  **	ret
     382  */
     383  TEST_UNIFORM_Z (ptrue_mul_1_f32_x_tied1, svfloat32_t,
     384  		z0 = svmul_n_f32_x (svptrue_b32 (), z0, 1),
     385  		z0 = svmul_x (svptrue_b32 (), z0, 1))
     386  
     387  /*
     388  ** ptrue_mul_1_f32_x_untied:
     389  **	fmov	(z[0-9]+\.s), #1\.0(?:e\+0)?
     390  **	fmul	z0\.s, (z1\.s, \1|\1, z1\.s)
     391  **	ret
     392  */
     393  TEST_UNIFORM_Z (ptrue_mul_1_f32_x_untied, svfloat32_t,
     394  		z0 = svmul_n_f32_x (svptrue_b32 (), z1, 1),
     395  		z0 = svmul_x (svptrue_b32 (), z1, 1))
     396  
     397  /*
     398  ** ptrue_mul_0p5_f32_x_tied1:
     399  **	...
     400  **	ptrue	p[0-9]+\.b[^\n]*
     401  **	...
     402  **	ret
     403  */
     404  TEST_UNIFORM_Z (ptrue_mul_0p5_f32_x_tied1, svfloat32_t,
     405  		z0 = svmul_n_f32_x (svptrue_b32 (), z0, 0.5),
     406  		z0 = svmul_x (svptrue_b32 (), z0, 0.5))
     407  
     408  /*
     409  ** ptrue_mul_0p5_f32_x_untied:
     410  **	...
     411  **	ptrue	p[0-9]+\.b[^\n]*
     412  **	...
     413  **	ret
     414  */
     415  TEST_UNIFORM_Z (ptrue_mul_0p5_f32_x_untied, svfloat32_t,
     416  		z0 = svmul_n_f32_x (svptrue_b32 (), z1, 0.5),
     417  		z0 = svmul_x (svptrue_b32 (), z1, 0.5))
     418  
     419  /*
     420  ** ptrue_mul_2_f32_x_tied1:
     421  **	...
     422  **	ptrue	p[0-9]+\.b[^\n]*
     423  **	...
     424  **	ret
     425  */
     426  TEST_UNIFORM_Z (ptrue_mul_2_f32_x_tied1, svfloat32_t,
     427  		z0 = svmul_n_f32_x (svptrue_b32 (), z0, 2),
     428  		z0 = svmul_x (svptrue_b32 (), z0, 2))
     429  
     430  /*
     431  ** ptrue_mul_2_f32_x_untied:
     432  **	...
     433  **	ptrue	p[0-9]+\.b[^\n]*
     434  **	...
     435  **	ret
     436  */
     437  TEST_UNIFORM_Z (ptrue_mul_2_f32_x_untied, svfloat32_t,
     438  		z0 = svmul_n_f32_x (svptrue_b32 (), z1, 2),
     439  		z0 = svmul_x (svptrue_b32 (), z1, 2))