]>
Commit | Line | Data |
---|---|---|
52e14b96 | 1 | /* { dg-do compile { target { powerpc*-*-* } } } */ |
4f4b0ab8 | 2 | /* { dg-skip-if "" { powerpc*-*-darwin* } } */ |
52e14b96 MM |
3 | /* { dg-require-effective-target powerpc_p8vector_ok } */ |
4 | /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ | |
5 | /* { dg-options "-mcpu=power8 -O2" } */ | |
6 | ||
7 | /* Make sure that STXSSPX is generated for float scalars in Altivec registers | |
8 | on power7 instead of moving the value to a FPR register and doing a X-FORM | |
9 | store. */ | |
10 | ||
11 | #ifndef TYPE | |
12 | #define TYPE float | |
13 | #endif | |
14 | ||
15 | #ifndef TYPE_IN | |
16 | #define TYPE_IN TYPE | |
17 | #endif | |
18 | ||
19 | #ifndef TYPE_OUT | |
20 | #define TYPE_OUT TYPE | |
21 | #endif | |
22 | ||
23 | #ifndef ITYPE | |
24 | #define ITYPE long | |
25 | #endif | |
26 | ||
27 | #ifdef DO_CALL | |
28 | extern ITYPE get_bits (ITYPE); | |
29 | ||
30 | #else | |
31 | #define get_bits(X) (X) | |
32 | #endif | |
33 | ||
34 | void test (ITYPE *bits, ITYPE n, TYPE one, TYPE_IN *p, TYPE_OUT *q) | |
35 | { | |
36 | TYPE x_00 = p[ 0]; | |
37 | TYPE x_01 = p[ 1]; | |
38 | TYPE x_02 = p[ 2]; | |
39 | TYPE x_03 = p[ 3]; | |
40 | TYPE x_04 = p[ 4]; | |
41 | TYPE x_05 = p[ 5]; | |
42 | TYPE x_06 = p[ 6]; | |
43 | TYPE x_07 = p[ 7]; | |
44 | TYPE x_08 = p[ 8]; | |
45 | TYPE x_09 = p[ 9]; | |
46 | ||
47 | TYPE x_10 = p[10]; | |
48 | TYPE x_11 = p[11]; | |
49 | TYPE x_12 = p[12]; | |
50 | TYPE x_13 = p[13]; | |
51 | TYPE x_14 = p[14]; | |
52 | TYPE x_15 = p[15]; | |
53 | TYPE x_16 = p[16]; | |
54 | TYPE x_17 = p[17]; | |
55 | TYPE x_18 = p[18]; | |
56 | TYPE x_19 = p[19]; | |
57 | ||
58 | TYPE x_20 = p[20]; | |
59 | TYPE x_21 = p[21]; | |
60 | TYPE x_22 = p[22]; | |
61 | TYPE x_23 = p[23]; | |
62 | TYPE x_24 = p[24]; | |
63 | TYPE x_25 = p[25]; | |
64 | TYPE x_26 = p[26]; | |
65 | TYPE x_27 = p[27]; | |
66 | TYPE x_28 = p[28]; | |
67 | TYPE x_29 = p[29]; | |
68 | ||
69 | TYPE x_30 = p[30]; | |
70 | TYPE x_31 = p[31]; | |
71 | TYPE x_32 = p[32]; | |
72 | TYPE x_33 = p[33]; | |
73 | TYPE x_34 = p[34]; | |
74 | TYPE x_35 = p[35]; | |
75 | TYPE x_36 = p[36]; | |
76 | TYPE x_37 = p[37]; | |
77 | TYPE x_38 = p[38]; | |
78 | TYPE x_39 = p[39]; | |
79 | ||
80 | TYPE x_40 = p[40]; | |
81 | TYPE x_41 = p[41]; | |
82 | TYPE x_42 = p[42]; | |
83 | TYPE x_43 = p[43]; | |
84 | TYPE x_44 = p[44]; | |
85 | TYPE x_45 = p[45]; | |
86 | TYPE x_46 = p[46]; | |
87 | TYPE x_47 = p[47]; | |
88 | TYPE x_48 = p[48]; | |
89 | TYPE x_49 = p[49]; | |
90 | ||
91 | ITYPE i; | |
92 | ||
93 | for (i = 0; i < n; i++) | |
94 | { | |
95 | ITYPE bit = get_bits (bits[i]); | |
96 | ||
97 | if ((bit & ((ITYPE)1) << 0) != 0) x_00 += one; | |
98 | if ((bit & ((ITYPE)1) << 1) != 0) x_01 += one; | |
99 | if ((bit & ((ITYPE)1) << 2) != 0) x_02 += one; | |
100 | if ((bit & ((ITYPE)1) << 3) != 0) x_03 += one; | |
101 | if ((bit & ((ITYPE)1) << 4) != 0) x_04 += one; | |
102 | if ((bit & ((ITYPE)1) << 5) != 0) x_05 += one; | |
103 | if ((bit & ((ITYPE)1) << 6) != 0) x_06 += one; | |
104 | if ((bit & ((ITYPE)1) << 7) != 0) x_07 += one; | |
105 | if ((bit & ((ITYPE)1) << 8) != 0) x_08 += one; | |
106 | if ((bit & ((ITYPE)1) << 9) != 0) x_09 += one; | |
107 | ||
108 | if ((bit & ((ITYPE)1) << 10) != 0) x_10 += one; | |
109 | if ((bit & ((ITYPE)1) << 11) != 0) x_11 += one; | |
110 | if ((bit & ((ITYPE)1) << 12) != 0) x_12 += one; | |
111 | if ((bit & ((ITYPE)1) << 13) != 0) x_13 += one; | |
112 | if ((bit & ((ITYPE)1) << 14) != 0) x_14 += one; | |
113 | if ((bit & ((ITYPE)1) << 15) != 0) x_15 += one; | |
114 | if ((bit & ((ITYPE)1) << 16) != 0) x_16 += one; | |
115 | if ((bit & ((ITYPE)1) << 17) != 0) x_17 += one; | |
116 | if ((bit & ((ITYPE)1) << 18) != 0) x_18 += one; | |
117 | if ((bit & ((ITYPE)1) << 19) != 0) x_19 += one; | |
118 | ||
119 | if ((bit & ((ITYPE)1) << 20) != 0) x_20 += one; | |
120 | if ((bit & ((ITYPE)1) << 21) != 0) x_21 += one; | |
121 | if ((bit & ((ITYPE)1) << 22) != 0) x_22 += one; | |
122 | if ((bit & ((ITYPE)1) << 23) != 0) x_23 += one; | |
123 | if ((bit & ((ITYPE)1) << 24) != 0) x_24 += one; | |
124 | if ((bit & ((ITYPE)1) << 25) != 0) x_25 += one; | |
125 | if ((bit & ((ITYPE)1) << 26) != 0) x_26 += one; | |
126 | if ((bit & ((ITYPE)1) << 27) != 0) x_27 += one; | |
127 | if ((bit & ((ITYPE)1) << 28) != 0) x_28 += one; | |
128 | if ((bit & ((ITYPE)1) << 29) != 0) x_29 += one; | |
129 | ||
130 | if ((bit & ((ITYPE)1) << 30) != 0) x_30 += one; | |
131 | if ((bit & ((ITYPE)1) << 31) != 0) x_31 += one; | |
132 | if ((bit & ((ITYPE)1) << 32) != 0) x_32 += one; | |
133 | if ((bit & ((ITYPE)1) << 33) != 0) x_33 += one; | |
134 | if ((bit & ((ITYPE)1) << 34) != 0) x_34 += one; | |
135 | if ((bit & ((ITYPE)1) << 35) != 0) x_35 += one; | |
136 | if ((bit & ((ITYPE)1) << 36) != 0) x_36 += one; | |
137 | if ((bit & ((ITYPE)1) << 37) != 0) x_37 += one; | |
138 | if ((bit & ((ITYPE)1) << 38) != 0) x_38 += one; | |
139 | if ((bit & ((ITYPE)1) << 39) != 0) x_39 += one; | |
140 | ||
141 | if ((bit & ((ITYPE)1) << 40) != 0) x_40 += one; | |
142 | if ((bit & ((ITYPE)1) << 41) != 0) x_41 += one; | |
143 | if ((bit & ((ITYPE)1) << 42) != 0) x_42 += one; | |
144 | if ((bit & ((ITYPE)1) << 43) != 0) x_43 += one; | |
145 | if ((bit & ((ITYPE)1) << 44) != 0) x_44 += one; | |
146 | if ((bit & ((ITYPE)1) << 45) != 0) x_45 += one; | |
147 | if ((bit & ((ITYPE)1) << 46) != 0) x_46 += one; | |
148 | if ((bit & ((ITYPE)1) << 47) != 0) x_47 += one; | |
149 | if ((bit & ((ITYPE)1) << 48) != 0) x_48 += one; | |
150 | if ((bit & ((ITYPE)1) << 49) != 0) x_49 += one; | |
151 | } | |
152 | ||
153 | q[ 0] = x_00; | |
154 | q[ 1] = x_01; | |
155 | q[ 2] = x_02; | |
156 | q[ 3] = x_03; | |
157 | q[ 4] = x_04; | |
158 | q[ 5] = x_05; | |
159 | q[ 6] = x_06; | |
160 | q[ 7] = x_07; | |
161 | q[ 8] = x_08; | |
162 | q[ 9] = x_09; | |
163 | ||
164 | q[10] = x_10; | |
165 | q[11] = x_11; | |
166 | q[12] = x_12; | |
167 | q[13] = x_13; | |
168 | q[14] = x_14; | |
169 | q[15] = x_15; | |
170 | q[16] = x_16; | |
171 | q[17] = x_17; | |
172 | q[18] = x_18; | |
173 | q[19] = x_19; | |
174 | ||
175 | q[20] = x_20; | |
176 | q[21] = x_21; | |
177 | q[22] = x_22; | |
178 | q[23] = x_23; | |
179 | q[24] = x_24; | |
180 | q[25] = x_25; | |
181 | q[26] = x_26; | |
182 | q[27] = x_27; | |
183 | q[28] = x_28; | |
184 | q[29] = x_29; | |
185 | ||
186 | q[30] = x_30; | |
187 | q[31] = x_31; | |
188 | q[32] = x_32; | |
189 | q[33] = x_33; | |
190 | q[34] = x_34; | |
191 | q[35] = x_35; | |
192 | q[36] = x_36; | |
193 | q[37] = x_37; | |
194 | q[38] = x_38; | |
195 | q[39] = x_39; | |
196 | ||
197 | q[40] = x_40; | |
198 | q[41] = x_41; | |
199 | q[42] = x_42; | |
200 | q[43] = x_43; | |
201 | q[44] = x_44; | |
202 | q[45] = x_45; | |
203 | q[46] = x_46; | |
204 | q[47] = x_47; | |
205 | q[48] = x_48; | |
206 | q[49] = x_49; | |
207 | } | |
208 | ||
209 | /* { dg-final { scan-assembler {\mxsaddsp\M} } } */ | |
210 | /* { dg-final { scan-assembler {\mstxsspx\M} } } */ | |
211 | /* { dg-final { scan-assembler-not {\mmfvsrd\M} } } */ | |
212 | /* { dg-final { scan-assembler-not {\mmfvsrwz\M} } } */ |