(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
acle/
asm/
scale_f64.c
       1  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
       2  
       3  #include "test_sve_acle.h"
       4  
       5  /*
       6  ** scale_f64_m_tied1:
       7  **	fscale	z0\.d, p0/m, z0\.d, z4\.d
       8  **	ret
       9  */
      10  TEST_DUAL_Z (scale_f64_m_tied1, svfloat64_t, svint64_t,
      11  	     z0 = svscale_f64_m (p0, z0, z4),
      12  	     z0 = svscale_m (p0, z0, z4))
      13  
      14  /*
      15  ** scale_f64_m_tied2:
      16  **	mov	(z[0-9]+\.d), z0\.d
      17  **	movprfx	z0, z4
      18  **	fscale	z0\.d, p0/m, z0\.d, \1
      19  **	ret
      20  */
      21  TEST_DUAL_Z_REV (scale_f64_m_tied2, svfloat64_t, svint64_t,
      22  		 z0_res = svscale_f64_m (p0, z4, z0),
      23  		 z0_res = svscale_m (p0, z4, z0))
      24  
      25  /*
      26  ** scale_f64_m_untied:
      27  **	movprfx	z0, z1
      28  **	fscale	z0\.d, p0/m, z0\.d, z4\.d
      29  **	ret
      30  */
      31  TEST_DUAL_Z (scale_f64_m_untied, svfloat64_t, svint64_t,
      32  	     z0 = svscale_f64_m (p0, z1, z4),
      33  	     z0 = svscale_m (p0, z1, z4))
      34  
      35  /*
      36  ** scale_x0_f64_m_tied1:
      37  **	mov	(z[0-9]+\.d), x0
      38  **	fscale	z0\.d, p0/m, z0\.d, \1
      39  **	ret
      40  */
      41  TEST_UNIFORM_ZX (scale_x0_f64_m_tied1, svfloat64_t, int64_t,
      42  		 z0 = svscale_n_f64_m (p0, z0, x0),
      43  		 z0 = svscale_m (p0, z0, x0))
      44  
      45  /*
      46  ** scale_x0_f64_m_untied:
      47  **	mov	(z[0-9]+\.d), x0
      48  **	movprfx	z0, z1
      49  **	fscale	z0\.d, p0/m, z0\.d, \1
      50  **	ret
      51  */
      52  TEST_UNIFORM_ZX (scale_x0_f64_m_untied, svfloat64_t, int64_t,
      53  		 z0 = svscale_n_f64_m (p0, z1, x0),
      54  		 z0 = svscale_m (p0, z1, x0))
      55  
      56  /*
      57  ** scale_3_f64_m_tied1:
      58  **	mov	(z[0-9]+\.d), #3
      59  **	fscale	z0\.d, p0/m, z0\.d, \1
      60  **	ret
      61  */
      62  TEST_UNIFORM_Z (scale_3_f64_m_tied1, svfloat64_t,
      63  		z0 = svscale_n_f64_m (p0, z0, 3),
      64  		z0 = svscale_m (p0, z0, 3))
      65  
      66  /*
      67  ** scale_3_f64_m_untied: { xfail *-*-* }
      68  **	mov	(z[0-9]+\.d), #3
      69  **	movprfx	z0, z1
      70  **	fscale	z0\.d, p0/m, z0\.d, \1
      71  **	ret
      72  */
      73  TEST_UNIFORM_Z (scale_3_f64_m_untied, svfloat64_t,
      74  		z0 = svscale_n_f64_m (p0, z1, 3),
      75  		z0 = svscale_m (p0, z1, 3))
      76  
      77  /*
      78  ** scale_m3_f64_m:
      79  **	mov	(z[0-9]+\.d), #-3
      80  **	fscale	z0\.d, p0/m, z0\.d, \1
      81  **	ret
      82  */
      83  TEST_UNIFORM_Z (scale_m3_f64_m, svfloat64_t,
      84  		z0 = svscale_n_f64_m (p0, z0, -3),
      85  		z0 = svscale_m (p0, z0, -3))
      86  
      87  /*
      88  ** scale_f64_z_tied1:
      89  **	movprfx	z0\.d, p0/z, z0\.d
      90  **	fscale	z0\.d, p0/m, z0\.d, z4\.d
      91  **	ret
      92  */
      93  TEST_DUAL_Z (scale_f64_z_tied1, svfloat64_t, svint64_t,
      94  	     z0 = svscale_f64_z (p0, z0, z4),
      95  	     z0 = svscale_z (p0, z0, z4))
      96  
      97  /*
      98  ** scale_f64_z_tied2:
      99  **	mov	(z[0-9]+\.d), z0\.d
     100  **	movprfx	z0\.d, p0/z, z4\.d
     101  **	fscale	z0\.d, p0/m, z0\.d, \1
     102  **	ret
     103  */
     104  TEST_DUAL_Z_REV (scale_f64_z_tied2, svfloat64_t, svint64_t,
     105  		 z0_res = svscale_f64_z (p0, z4, z0),
     106  		 z0_res = svscale_z (p0, z4, z0))
     107  
     108  /*
     109  ** scale_f64_z_untied:
     110  **	movprfx	z0\.d, p0/z, z1\.d
     111  **	fscale	z0\.d, p0/m, z0\.d, z4\.d
     112  **	ret
     113  */
     114  TEST_DUAL_Z (scale_f64_z_untied, svfloat64_t, svint64_t,
     115  	     z0 = svscale_f64_z (p0, z1, z4),
     116  	     z0 = svscale_z (p0, z1, z4))
     117  
     118  /*
     119  ** scale_x0_f64_z_tied1:
     120  **	mov	(z[0-9]+\.d), x0
     121  **	movprfx	z0\.d, p0/z, z0\.d
     122  **	fscale	z0\.d, p0/m, z0\.d, \1
     123  **	ret
     124  */
     125  TEST_UNIFORM_ZX (scale_x0_f64_z_tied1, svfloat64_t, int64_t,
     126  		 z0 = svscale_n_f64_z (p0, z0, x0),
     127  		 z0 = svscale_z (p0, z0, x0))
     128  
     129  /*
     130  ** scale_x0_f64_z_untied: { xfail *-*-* }
     131  **	mov	(z[0-9]+\.d), x0
     132  **	movprfx	z0\.d, p0/z, z1\.d
     133  **	fscale	z0\.d, p0/m, z0\.d, \1
     134  **	ret
     135  */
     136  TEST_UNIFORM_ZX (scale_x0_f64_z_untied, svfloat64_t, int64_t,
     137  		 z0 = svscale_n_f64_z (p0, z1, x0),
     138  		 z0 = svscale_z (p0, z1, x0))
     139  
     140  /*
     141  ** scale_3_f64_z_tied1:
     142  **	mov	(z[0-9]+\.d), #3
     143  **	movprfx	z0\.d, p0/z, z0\.d
     144  **	fscale	z0\.d, p0/m, z0\.d, \1
     145  **	ret
     146  */
     147  TEST_UNIFORM_Z (scale_3_f64_z_tied1, svfloat64_t,
     148  		z0 = svscale_n_f64_z (p0, z0, 3),
     149  		z0 = svscale_z (p0, z0, 3))
     150  
     151  /*
     152  ** scale_3_f64_z_untied: { xfail *-*-* }
     153  **	mov	(z[0-9]+\.d), #3
     154  **	movprfx	z0\.d, p0/z, z1\.d
     155  **	fscale	z0\.d, p0/m, z0\.d, \1
     156  **	ret
     157  */
     158  TEST_UNIFORM_Z (scale_3_f64_z_untied, svfloat64_t,
     159  		z0 = svscale_n_f64_z (p0, z1, 3),
     160  		z0 = svscale_z (p0, z1, 3))
     161  
     162  /*
     163  ** scale_m3_f64_z:
     164  **	mov	(z[0-9]+\.d), #-3
     165  **	movprfx	z0\.d, p0/z, z0\.d
     166  **	fscale	z0\.d, p0/m, z0\.d, \1
     167  **	ret
     168  */
     169  TEST_UNIFORM_Z (scale_m3_f64_z, svfloat64_t,
     170  		z0 = svscale_n_f64_z (p0, z0, -3),
     171  		z0 = svscale_z (p0, z0, -3))
     172  
     173  /*
     174  ** scale_f64_x_tied1:
     175  **	fscale	z0\.d, p0/m, z0\.d, z4\.d
     176  **	ret
     177  */
     178  TEST_DUAL_Z (scale_f64_x_tied1, svfloat64_t, svint64_t,
     179  	     z0 = svscale_f64_x (p0, z0, z4),
     180  	     z0 = svscale_x (p0, z0, z4))
     181  
     182  /*
     183  ** scale_f64_x_tied2:
     184  **	mov	(z[0-9]+\.d), z0\.d
     185  **	movprfx	z0, z4
     186  **	fscale	z0\.d, p0/m, z0\.d, \1
     187  **	ret
     188  */
     189  TEST_DUAL_Z_REV (scale_f64_x_tied2, svfloat64_t, svint64_t,
     190  		 z0_res = svscale_f64_x (p0, z4, z0),
     191  		 z0_res = svscale_x (p0, z4, z0))
     192  
     193  /*
     194  ** scale_f64_x_untied:
     195  **	movprfx	z0, z1
     196  **	fscale	z0\.d, p0/m, z0\.d, z4\.d
     197  **	ret
     198  */
     199  TEST_DUAL_Z (scale_f64_x_untied, svfloat64_t, svint64_t,
     200  	     z0 = svscale_f64_x (p0, z1, z4),
     201  	     z0 = svscale_x (p0, z1, z4))
     202  
     203  /*
     204  ** scale_x0_f64_x_tied1:
     205  **	mov	(z[0-9]+\.d), x0
     206  **	fscale	z0\.d, p0/m, z0\.d, \1
     207  **	ret
     208  */
     209  TEST_UNIFORM_ZX (scale_x0_f64_x_tied1, svfloat64_t, int64_t,
     210  		 z0 = svscale_n_f64_x (p0, z0, x0),
     211  		 z0 = svscale_x (p0, z0, x0))
     212  
     213  /*
     214  ** scale_x0_f64_x_untied:
     215  **	mov	(z[0-9]+\.d), x0
     216  **	movprfx	z0, z1
     217  **	fscale	z0\.d, p0/m, z0\.d, \1
     218  **	ret
     219  */
     220  TEST_UNIFORM_ZX (scale_x0_f64_x_untied, svfloat64_t, int64_t,
     221  		 z0 = svscale_n_f64_x (p0, z1, x0),
     222  		 z0 = svscale_x (p0, z1, x0))
     223  
     224  /*
     225  ** scale_3_f64_x_tied1:
     226  **	mov	(z[0-9]+\.d), #3
     227  **	fscale	z0\.d, p0/m, z0\.d, \1
     228  **	ret
     229  */
     230  TEST_UNIFORM_Z (scale_3_f64_x_tied1, svfloat64_t,
     231  		z0 = svscale_n_f64_x (p0, z0, 3),
     232  		z0 = svscale_x (p0, z0, 3))
     233  
     234  /*
     235  ** scale_3_f64_x_untied: { xfail *-*-* }
     236  **	mov	(z[0-9]+\.d), #3
     237  **	movprfx	z0, z1
     238  **	fscale	z0\.d, p0/m, z0\.d, \1
     239  **	ret
     240  */
     241  TEST_UNIFORM_Z (scale_3_f64_x_untied, svfloat64_t,
     242  		z0 = svscale_n_f64_x (p0, z1, 3),
     243  		z0 = svscale_x (p0, z1, 3))
     244  
     245  /*
     246  ** scale_m3_f64_x:
     247  **	mov	(z[0-9]+\.d), #-3
     248  **	fscale	z0\.d, p0/m, z0\.d, \1
     249  **	ret
     250  */
     251  TEST_UNIFORM_Z (scale_m3_f64_x, svfloat64_t,
     252  		z0 = svscale_n_f64_x (p0, z0, -3),
     253  		z0 = svscale_x (p0, z0, -3))
     254  
     255  /*
     256  ** ptrue_scale_f64_x_tied1:
     257  **	...
     258  **	ptrue	p[0-9]+\.b[^\n]*
     259  **	...
     260  **	ret
     261  */
     262  TEST_DUAL_Z (ptrue_scale_f64_x_tied1, svfloat64_t, svint64_t,
     263  	     z0 = svscale_f64_x (svptrue_b64 (), z0, z4),
     264  	     z0 = svscale_x (svptrue_b64 (), z0, z4))
     265  
     266  /*
     267  ** ptrue_scale_f64_x_tied2:
     268  **	...
     269  **	ptrue	p[0-9]+\.b[^\n]*
     270  **	...
     271  **	ret
     272  */
     273  TEST_DUAL_Z_REV (ptrue_scale_f64_x_tied2, svfloat64_t, svint64_t,
     274  		 z0_res = svscale_f64_x (svptrue_b64 (), z4, z0),
     275  		 z0_res = svscale_x (svptrue_b64 (), z4, z0))
     276  
     277  /*
     278  ** ptrue_scale_f64_x_untied:
     279  **	...
     280  **	ptrue	p[0-9]+\.b[^\n]*
     281  **	...
     282  **	ret
     283  */
     284  TEST_DUAL_Z (ptrue_scale_f64_x_untied, svfloat64_t, svint64_t,
     285  	     z0 = svscale_f64_x (svptrue_b64 (), z1, z4),
     286  	     z0 = svscale_x (svptrue_b64 (), z1, z4))
     287  
     288  /*
     289  ** ptrue_scale_3_f64_x_tied1:
     290  **	...
     291  **	ptrue	p[0-9]+\.b[^\n]*
     292  **	...
     293  **	ret
     294  */
     295  TEST_UNIFORM_Z (ptrue_scale_3_f64_x_tied1, svfloat64_t,
     296  		z0 = svscale_n_f64_x (svptrue_b64 (), z0, 3),
     297  		z0 = svscale_x (svptrue_b64 (), z0, 3))
     298  
     299  /*
     300  ** ptrue_scale_3_f64_x_untied:
     301  **	...
     302  **	ptrue	p[0-9]+\.b[^\n]*
     303  **	...
     304  **	ret
     305  */
     306  TEST_UNIFORM_Z (ptrue_scale_3_f64_x_untied, svfloat64_t,
     307  		z0 = svscale_n_f64_x (svptrue_b64 (), z1, 3),
     308  		z0 = svscale_x (svptrue_b64 (), z1, 3))
     309  
     310  /*
     311  ** ptrue_scale_m3_f64_x_tied1:
     312  **	...
     313  **	ptrue	p[0-9]+\.b[^\n]*
     314  **	...
     315  **	ret
     316  */
     317  TEST_UNIFORM_Z (ptrue_scale_m3_f64_x_tied1, svfloat64_t,
     318  		z0 = svscale_n_f64_x (svptrue_b64 (), z0, -3),
     319  		z0 = svscale_x (svptrue_b64 (), z0, -3))
     320  
     321  /*
     322  ** ptrue_scale_m3_f64_x_untied:
     323  **	...
     324  **	ptrue	p[0-9]+\.b[^\n]*
     325  **	...
     326  **	ret
     327  */
     328  TEST_UNIFORM_Z (ptrue_scale_m3_f64_x_untied, svfloat64_t,
     329  		z0 = svscale_n_f64_x (svptrue_b64 (), z1, -3),
     330  		z0 = svscale_x (svptrue_b64 (), z1, -3))