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