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