(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
acle/
asm/
nmad_f16.c
       1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** nmad_f16_m_tied1:
       7  **	fnmad	z0\.h, p0/m, z1\.h, z2\.h
       8  **	ret
       9  */
      10  TEST_UNIFORM_Z (nmad_f16_m_tied1, svfloat16_t,
      11  		z0 = svnmad_f16_m (p0, z0, z1, z2),
      12  		z0 = svnmad_m (p0, z0, z1, z2))
      13  
      14  /*
      15  ** nmad_f16_m_tied2:
      16  **	mov	(z[0-9]+)\.d, z0\.d
      17  **	movprfx	z0, z1
      18  **	fnmad	z0\.h, p0/m, \1\.h, z2\.h
      19  **	ret
      20  */
      21  TEST_UNIFORM_Z (nmad_f16_m_tied2, svfloat16_t,
      22  		z0 = svnmad_f16_m (p0, z1, z0, z2),
      23  		z0 = svnmad_m (p0, z1, z0, z2))
      24  
      25  /*
      26  ** nmad_f16_m_tied3:
      27  **	mov	(z[0-9]+)\.d, z0\.d
      28  **	movprfx	z0, z1
      29  **	fnmad	z0\.h, p0/m, z2\.h, \1\.h
      30  **	ret
      31  */
      32  TEST_UNIFORM_Z (nmad_f16_m_tied3, svfloat16_t,
      33  		z0 = svnmad_f16_m (p0, z1, z2, z0),
      34  		z0 = svnmad_m (p0, z1, z2, z0))
      35  
      36  /*
      37  ** nmad_f16_m_untied:
      38  **	movprfx	z0, z1
      39  **	fnmad	z0\.h, p0/m, z2\.h, z3\.h
      40  **	ret
      41  */
      42  TEST_UNIFORM_Z (nmad_f16_m_untied, svfloat16_t,
      43  		z0 = svnmad_f16_m (p0, z1, z2, z3),
      44  		z0 = svnmad_m (p0, z1, z2, z3))
      45  
      46  /*
      47  ** nmad_h4_f16_m_tied1:
      48  **	mov	(z[0-9]+\.h), h4
      49  **	fnmad	z0\.h, p0/m, z1\.h, \1
      50  **	ret
      51  */
      52  TEST_UNIFORM_ZD (nmad_h4_f16_m_tied1, svfloat16_t, __fp16,
      53  		 z0 = svnmad_n_f16_m (p0, z0, z1, d4),
      54  		 z0 = svnmad_m (p0, z0, z1, d4))
      55  
      56  /*
      57  ** nmad_h4_f16_m_untied:
      58  **	mov	(z[0-9]+\.h), h4
      59  **	movprfx	z0, z1
      60  **	fnmad	z0\.h, p0/m, z2\.h, \1
      61  **	ret
      62  */
      63  TEST_UNIFORM_ZD (nmad_h4_f16_m_untied, svfloat16_t, __fp16,
      64  		 z0 = svnmad_n_f16_m (p0, z1, z2, d4),
      65  		 z0 = svnmad_m (p0, z1, z2, d4))
      66  
      67  /*
      68  ** nmad_2_f16_m_tied1:
      69  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
      70  **	fnmad	z0\.h, p0/m, z1\.h, \1
      71  **	ret
      72  */
      73  TEST_UNIFORM_Z (nmad_2_f16_m_tied1, svfloat16_t,
      74  		z0 = svnmad_n_f16_m (p0, z0, z1, 2),
      75  		z0 = svnmad_m (p0, z0, z1, 2))
      76  
      77  /*
      78  ** nmad_2_f16_m_untied: { xfail *-*-* }
      79  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
      80  **	movprfx	z0, z1
      81  **	fnmad	z0\.h, p0/m, z2\.h, \1
      82  **	ret
      83  */
      84  TEST_UNIFORM_Z (nmad_2_f16_m_untied, svfloat16_t,
      85  		z0 = svnmad_n_f16_m (p0, z1, z2, 2),
      86  		z0 = svnmad_m (p0, z1, z2, 2))
      87  
      88  /*
      89  ** nmad_f16_z_tied1:
      90  **	movprfx	z0\.h, p0/z, z0\.h
      91  **	fnmad	z0\.h, p0/m, z1\.h, z2\.h
      92  **	ret
      93  */
      94  TEST_UNIFORM_Z (nmad_f16_z_tied1, svfloat16_t,
      95  		z0 = svnmad_f16_z (p0, z0, z1, z2),
      96  		z0 = svnmad_z (p0, z0, z1, z2))
      97  
      98  /*
      99  ** nmad_f16_z_tied2:
     100  **	movprfx	z0\.h, p0/z, z0\.h
     101  **	fnmad	z0\.h, p0/m, z1\.h, z2\.h
     102  **	ret
     103  */
     104  TEST_UNIFORM_Z (nmad_f16_z_tied2, svfloat16_t,
     105  		z0 = svnmad_f16_z (p0, z1, z0, z2),
     106  		z0 = svnmad_z (p0, z1, z0, z2))
     107  
     108  /*
     109  ** nmad_f16_z_tied3:
     110  **	movprfx	z0\.h, p0/z, z0\.h
     111  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     112  **	ret
     113  */
     114  TEST_UNIFORM_Z (nmad_f16_z_tied3, svfloat16_t,
     115  		z0 = svnmad_f16_z (p0, z1, z2, z0),
     116  		z0 = svnmad_z (p0, z1, z2, z0))
     117  
     118  /*
     119  ** nmad_f16_z_untied:
     120  ** (
     121  **	movprfx	z0\.h, p0/z, z1\.h
     122  **	fnmad	z0\.h, p0/m, z2\.h, z3\.h
     123  ** |
     124  **	movprfx	z0\.h, p0/z, z2\.h
     125  **	fnmad	z0\.h, p0/m, z1\.h, z3\.h
     126  ** |
     127  **	movprfx	z0\.h, p0/z, z3\.h
     128  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     129  ** )
     130  **	ret
     131  */
     132  TEST_UNIFORM_Z (nmad_f16_z_untied, svfloat16_t,
     133  		z0 = svnmad_f16_z (p0, z1, z2, z3),
     134  		z0 = svnmad_z (p0, z1, z2, z3))
     135  
     136  /*
     137  ** nmad_h4_f16_z_tied1:
     138  **	mov	(z[0-9]+\.h), h4
     139  **	movprfx	z0\.h, p0/z, z0\.h
     140  **	fnmad	z0\.h, p0/m, z1\.h, \1
     141  **	ret
     142  */
     143  TEST_UNIFORM_ZD (nmad_h4_f16_z_tied1, svfloat16_t, __fp16,
     144  		 z0 = svnmad_n_f16_z (p0, z0, z1, d4),
     145  		 z0 = svnmad_z (p0, z0, z1, d4))
     146  
     147  /*
     148  ** nmad_h4_f16_z_tied2:
     149  **	mov	(z[0-9]+\.h), h4
     150  **	movprfx	z0\.h, p0/z, z0\.h
     151  **	fnmad	z0\.h, p0/m, z1\.h, \1
     152  **	ret
     153  */
     154  TEST_UNIFORM_ZD (nmad_h4_f16_z_tied2, svfloat16_t, __fp16,
     155  		 z0 = svnmad_n_f16_z (p0, z1, z0, d4),
     156  		 z0 = svnmad_z (p0, z1, z0, d4))
     157  
     158  /*
     159  ** nmad_h4_f16_z_untied:
     160  **	mov	(z[0-9]+\.h), h4
     161  ** (
     162  **	movprfx	z0\.h, p0/z, z1\.h
     163  **	fnmad	z0\.h, p0/m, z2\.h, \1
     164  ** |
     165  **	movprfx	z0\.h, p0/z, z2\.h
     166  **	fnmad	z0\.h, p0/m, z1\.h, \1
     167  ** |
     168  **	movprfx	z0\.h, p0/z, \1
     169  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     170  ** )
     171  **	ret
     172  */
     173  TEST_UNIFORM_ZD (nmad_h4_f16_z_untied, svfloat16_t, __fp16,
     174  		 z0 = svnmad_n_f16_z (p0, z1, z2, d4),
     175  		 z0 = svnmad_z (p0, z1, z2, d4))
     176  
     177  /*
     178  ** nmad_2_f16_z_tied1:
     179  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
     180  **	movprfx	z0\.h, p0/z, z0\.h
     181  **	fnmad	z0\.h, p0/m, z1\.h, \1
     182  **	ret
     183  */
     184  TEST_UNIFORM_Z (nmad_2_f16_z_tied1, svfloat16_t,
     185  		z0 = svnmad_n_f16_z (p0, z0, z1, 2),
     186  		z0 = svnmad_z (p0, z0, z1, 2))
     187  
     188  /*
     189  ** nmad_2_f16_z_tied2:
     190  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
     191  **	movprfx	z0\.h, p0/z, z0\.h
     192  **	fnmad	z0\.h, p0/m, z1\.h, \1
     193  **	ret
     194  */
     195  TEST_UNIFORM_Z (nmad_2_f16_z_tied2, svfloat16_t,
     196  		z0 = svnmad_n_f16_z (p0, z1, z0, 2),
     197  		z0 = svnmad_z (p0, z1, z0, 2))
     198  
     199  /*
     200  ** nmad_2_f16_z_untied:
     201  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
     202  ** (
     203  **	movprfx	z0\.h, p0/z, z1\.h
     204  **	fnmad	z0\.h, p0/m, z2\.h, \1
     205  ** |
     206  **	movprfx	z0\.h, p0/z, z2\.h
     207  **	fnmad	z0\.h, p0/m, z1\.h, \1
     208  ** |
     209  **	movprfx	z0\.h, p0/z, \1
     210  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     211  ** )
     212  **	ret
     213  */
     214  TEST_UNIFORM_Z (nmad_2_f16_z_untied, svfloat16_t,
     215  		z0 = svnmad_n_f16_z (p0, z1, z2, 2),
     216  		z0 = svnmad_z (p0, z1, z2, 2))
     217  
     218  /*
     219  ** nmad_f16_x_tied1:
     220  **	fnmad	z0\.h, p0/m, z1\.h, z2\.h
     221  **	ret
     222  */
     223  TEST_UNIFORM_Z (nmad_f16_x_tied1, svfloat16_t,
     224  		z0 = svnmad_f16_x (p0, z0, z1, z2),
     225  		z0 = svnmad_x (p0, z0, z1, z2))
     226  
     227  /*
     228  ** nmad_f16_x_tied2:
     229  **	fnmad	z0\.h, p0/m, z1\.h, z2\.h
     230  **	ret
     231  */
     232  TEST_UNIFORM_Z (nmad_f16_x_tied2, svfloat16_t,
     233  		z0 = svnmad_f16_x (p0, z1, z0, z2),
     234  		z0 = svnmad_x (p0, z1, z0, z2))
     235  
     236  /*
     237  ** nmad_f16_x_tied3:
     238  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     239  **	ret
     240  */
     241  TEST_UNIFORM_Z (nmad_f16_x_tied3, svfloat16_t,
     242  		z0 = svnmad_f16_x (p0, z1, z2, z0),
     243  		z0 = svnmad_x (p0, z1, z2, z0))
     244  
     245  /*
     246  ** nmad_f16_x_untied:
     247  ** (
     248  **	movprfx	z0, z1
     249  **	fnmad	z0\.h, p0/m, z2\.h, z3\.h
     250  ** |
     251  **	movprfx	z0, z2
     252  **	fnmad	z0\.h, p0/m, z1\.h, z3\.h
     253  ** |
     254  **	movprfx	z0, z3
     255  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     256  ** )
     257  **	ret
     258  */
     259  TEST_UNIFORM_Z (nmad_f16_x_untied, svfloat16_t,
     260  		z0 = svnmad_f16_x (p0, z1, z2, z3),
     261  		z0 = svnmad_x (p0, z1, z2, z3))
     262  
     263  /*
     264  ** nmad_h4_f16_x_tied1:
     265  **	mov	(z[0-9]+\.h), h4
     266  **	fnmad	z0\.h, p0/m, z1\.h, \1
     267  **	ret
     268  */
     269  TEST_UNIFORM_ZD (nmad_h4_f16_x_tied1, svfloat16_t, __fp16,
     270  		 z0 = svnmad_n_f16_x (p0, z0, z1, d4),
     271  		 z0 = svnmad_x (p0, z0, z1, d4))
     272  
     273  /*
     274  ** nmad_h4_f16_x_tied2:
     275  **	mov	(z[0-9]+\.h), h4
     276  **	fnmad	z0\.h, p0/m, z1\.h, \1
     277  **	ret
     278  */
     279  TEST_UNIFORM_ZD (nmad_h4_f16_x_tied2, svfloat16_t, __fp16,
     280  		 z0 = svnmad_n_f16_x (p0, z1, z0, d4),
     281  		 z0 = svnmad_x (p0, z1, z0, d4))
     282  
     283  /*
     284  ** nmad_h4_f16_x_untied:
     285  **	mov	z0\.h, h4
     286  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     287  **	ret
     288  */
     289  TEST_UNIFORM_ZD (nmad_h4_f16_x_untied, svfloat16_t, __fp16,
     290  		 z0 = svnmad_n_f16_x (p0, z1, z2, d4),
     291  		 z0 = svnmad_x (p0, z1, z2, d4))
     292  
     293  /*
     294  ** nmad_2_f16_x_tied1:
     295  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
     296  **	fnmad	z0\.h, p0/m, z1\.h, \1
     297  **	ret
     298  */
     299  TEST_UNIFORM_Z (nmad_2_f16_x_tied1, svfloat16_t,
     300  		z0 = svnmad_n_f16_x (p0, z0, z1, 2),
     301  		z0 = svnmad_x (p0, z0, z1, 2))
     302  
     303  /*
     304  ** nmad_2_f16_x_tied2:
     305  **	fmov	(z[0-9]+\.h), #2\.0(?:e\+0)?
     306  **	fnmad	z0\.h, p0/m, z1\.h, \1
     307  **	ret
     308  */
     309  TEST_UNIFORM_Z (nmad_2_f16_x_tied2, svfloat16_t,
     310  		z0 = svnmad_n_f16_x (p0, z1, z0, 2),
     311  		z0 = svnmad_x (p0, z1, z0, 2))
     312  
     313  /*
     314  ** nmad_2_f16_x_untied:
     315  **	fmov	z0\.h, #2\.0(?:e\+0)?
     316  **	fnmla	z0\.h, p0/m, z1\.h, z2\.h
     317  **	ret
     318  */
     319  TEST_UNIFORM_Z (nmad_2_f16_x_untied, svfloat16_t,
     320  		z0 = svnmad_n_f16_x (p0, z1, z2, 2),
     321  		z0 = svnmad_x (p0, z1, z2, 2))
     322  
     323  /*
     324  ** ptrue_nmad_f16_x_tied1:
     325  **	...
     326  **	ptrue	p[0-9]+\.b[^\n]*
     327  **	...
     328  **	ret
     329  */
     330  TEST_UNIFORM_Z (ptrue_nmad_f16_x_tied1, svfloat16_t,
     331  		z0 = svnmad_f16_x (svptrue_b16 (), z0, z1, z2),
     332  		z0 = svnmad_x (svptrue_b16 (), z0, z1, z2))
     333  
     334  /*
     335  ** ptrue_nmad_f16_x_tied2:
     336  **	...
     337  **	ptrue	p[0-9]+\.b[^\n]*
     338  **	...
     339  **	ret
     340  */
     341  TEST_UNIFORM_Z (ptrue_nmad_f16_x_tied2, svfloat16_t,
     342  		z0 = svnmad_f16_x (svptrue_b16 (), z1, z0, z2),
     343  		z0 = svnmad_x (svptrue_b16 (), z1, z0, z2))
     344  
     345  /*
     346  ** ptrue_nmad_f16_x_tied3:
     347  **	...
     348  **	ptrue	p[0-9]+\.b[^\n]*
     349  **	...
     350  **	ret
     351  */
     352  TEST_UNIFORM_Z (ptrue_nmad_f16_x_tied3, svfloat16_t,
     353  		z0 = svnmad_f16_x (svptrue_b16 (), z1, z2, z0),
     354  		z0 = svnmad_x (svptrue_b16 (), z1, z2, z0))
     355  
     356  /*
     357  ** ptrue_nmad_f16_x_untied:
     358  **	...
     359  **	ptrue	p[0-9]+\.b[^\n]*
     360  **	...
     361  **	ret
     362  */
     363  TEST_UNIFORM_Z (ptrue_nmad_f16_x_untied, svfloat16_t,
     364  		z0 = svnmad_f16_x (svptrue_b16 (), z1, z2, z3),
     365  		z0 = svnmad_x (svptrue_b16 (), z1, z2, z3))
     366  
     367  /*
     368  ** ptrue_nmad_2_f16_x_tied1:
     369  **	...
     370  **	ptrue	p[0-9]+\.b[^\n]*
     371  **	...
     372  **	ret
     373  */
     374  TEST_UNIFORM_Z (ptrue_nmad_2_f16_x_tied1, svfloat16_t,
     375  		z0 = svnmad_n_f16_x (svptrue_b16 (), z0, z1, 2),
     376  		z0 = svnmad_x (svptrue_b16 (), z0, z1, 2))
     377  
     378  /*
     379  ** ptrue_nmad_2_f16_x_tied2:
     380  **	...
     381  **	ptrue	p[0-9]+\.b[^\n]*
     382  **	...
     383  **	ret
     384  */
     385  TEST_UNIFORM_Z (ptrue_nmad_2_f16_x_tied2, svfloat16_t,
     386  		z0 = svnmad_n_f16_x (svptrue_b16 (), z1, z0, 2),
     387  		z0 = svnmad_x (svptrue_b16 (), z1, z0, 2))
     388  
     389  /*
     390  ** ptrue_nmad_2_f16_x_untied:
     391  **	...
     392  **	ptrue	p[0-9]+\.b[^\n]*
     393  **	...
     394  **	ret
     395  */
     396  TEST_UNIFORM_Z (ptrue_nmad_2_f16_x_untied, svfloat16_t,
     397  		z0 = svnmad_n_f16_x (svptrue_b16 (), z1, z2, 2),
     398  		z0 = svnmad_x (svptrue_b16 (), z1, z2, 2))