1 /* { dg-options "-O2 -fno-tree-loop-distribute-patterns" } */
2 /* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */
3
4 #include "ldp_stp_14.h"
5
6 /*
7 ** const_2_float_0:
8 ** str xzr, \[x0\]
9 ** ret
10 */
11 CONST_FN (2, float, 0);
12
13 /*
14 ** const_4_float_0:
15 ** stp xzr, xzr, \[x0\]
16 ** ret
17 */
18 CONST_FN (4, float, 0);
19
20 /* No preference between vectorizing or not vectorizing here. */
21 CONST_FN (8, float, 0);
22
23 /*
24 ** const_16_float_0:
25 ** movi v([0-9]+)\.4s, .*
26 ** stp q\1, q\1, \[x0\]
27 ** stp q\1, q\1, \[x0, #?32\]
28 ** ret
29 */
30 CONST_FN (16, float, 0);
31
32 /*
33 ** const_2_float_1:
34 ** fmov v([0-9]+)\.2s, .*
35 ** str d\1, \[x0\]
36 ** ret
37 */
38 CONST_FN (2, float, 1);
39
40 /*
41 ** const_4_float_1:
42 ** fmov v([0-9]+)\.4s, .*
43 ** str q\1, \[x0\]
44 ** ret
45 */
46 CONST_FN (4, float, 1);
47
48 /*
49 ** dup_2_float:
50 ** stp s0, s0, \[x0\]
51 ** ret
52 */
53 DUP_FN (2, float);
54
55 /* No preference between vectorizing or not vectorizing here. */
56 DUP_FN (4, float);
57
58 /*
59 ** dup_8_float:
60 ** dup v([0-9]+)\.4s, v0.s\[0\]
61 ** stp q\1, q\1, \[x0\]
62 ** ret
63 */
64 DUP_FN (8, float);
65
66 /*
67 ** cons2_1_float:
68 ** stp s0, s1, \[x0\]
69 ** ret
70 */
71 CONS2_FN (1, float);
72
73 /*
74 ** cons2_2_float:
75 ** stp s0, s1, \[x0\]
76 ** stp s0, s1, \[x0, #?8\]
77 ** ret
78 */
79 CONS2_FN (2, float);
80
81 /*
82 ** cons2_4_float: { target aarch64_little_endian }
83 ** ins v0.s\[1\], v1.s\[0\]
84 ** stp d0, d0, \[x0\]
85 ** stp d0, d0, \[x0, #?16\]
86 ** ret
87 */
88 /*
89 ** cons2_4_float: { target aarch64_big_endian }
90 ** ins v1.s\[1\], v0.s\[0\]
91 ** stp d1, d1, \[x0\]
92 ** stp d1, d1, \[x0, #?16\]
93 ** ret
94 */
95 CONS2_FN (4, float);
96
97 /*
98 ** cons2_8_float:
99 ** dup v([0-9]+)\.4s, .*
100 ** ...
101 ** stp q\1, q\1, \[x0\]
102 ** stp q\1, q\1, \[x0, #?32\]
103 ** ret
104 */
105 CONS2_FN (8, float);
106
107 /*
108 ** cons4_1_float:
109 ** stp s0, s1, \[x0\]
110 ** stp s2, s3, \[x0, #?8\]
111 ** ret
112 */
113 CONS4_FN (1, float);
114
115 /*
116 ** cons4_2_float:
117 ** stp s0, s1, \[x0\]
118 ** stp s2, s3, \[x0, #?8\]
119 ** stp s0, s1, \[x0, #?16\]
120 ** stp s2, s3, \[x0, #?24\]
121 ** ret
122 */
123 CONS4_FN (2, float);
124
125 /*
126 ** cons4_4_float:
127 ** ins v([0-9]+)\.s.*
128 ** ...
129 ** stp q\1, q\1, \[x0\]
130 ** stp q\1, q\1, \[x0, #?32\]
131 ** ret
132 */
133 CONS4_FN (4, float);