(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
movtf_2.c
       1  /* { dg-do assemble } */
       2  /* { dg-require-effective-target large_long_double } */
       3  /* { dg-options "-O -mtune=neoverse-v1 --save-temps" } */
       4  /* { dg-final { check-function-bodies "**" "" "" } } */
       5  
       6  #pragma GCC target "+nothing+nosimd+fp"
       7  
       8  /*
       9  ** fpr_to_fpr:
      10  **	sub	sp, sp, #16
      11  **	str	q1, \[sp\]
      12  **	ldr	q0, \[sp\]
      13  **	add	sp, sp, #?16
      14  **	ret
      15  */
      16  long double
      17  fpr_to_fpr (long double q0, long double q1)
      18  {
      19    return q1;
      20  }
      21  
      22  /*
      23  ** gpr_to_fpr:	{ target aarch64_little_endian }
      24  **	fmov	d0, x0
      25  **	fmov	v0.d\[1\], x1
      26  **	ret
      27  */
      28  /*
      29  ** gpr_to_fpr:	{ target aarch64_big_endian }
      30  **	fmov	d0, x1
      31  **	fmov	v0.d\[1\], x0
      32  **	ret
      33  */
      34  long double
      35  gpr_to_fpr ()
      36  {
      37    register long double x0 asm ("x0");
      38    asm volatile ("" : "=r" (x0));
      39    return x0;
      40  }
      41  
      42  /*
      43  ** zero_to_fpr:
      44  **	fmov	s0, wzr
      45  **	ret
      46  */
      47  long double
      48  zero_to_fpr ()
      49  {
      50    return 0;
      51  }
      52  
      53  /*
      54  ** fpr_to_gpr:	{ target aarch64_little_endian }
      55  ** (
      56  **	fmov	x0, d0
      57  **	fmov	x1, v0.d\[1\]
      58  ** |
      59  **	fmov	x1, v0.d\[1\]
      60  **	fmov	x0, d0
      61  ** )
      62  **	ret
      63  */
      64  /*
      65  ** fpr_to_gpr:	{ target aarch64_big_endian }
      66  ** (
      67  **	fmov	x1, d0
      68  **	fmov	x0, v0.d\[1\]
      69  ** |
      70  **	fmov	x0, v0.d\[1\]
      71  **	fmov	x1, d0
      72  ** )
      73  **	ret
      74  */
      75  void
      76  fpr_to_gpr (long double q0)
      77  {
      78    register long double x0 asm ("x0");
      79    x0 = q0;
      80    asm volatile ("" :: "r" (x0));
      81  }