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