1 /*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "managed_register_arm.h"
18 #include "base/globals.h"
19 #include "base/macros.h"
20 #include "gtest/gtest.h"
21
22 namespace art HIDDEN {
23 namespace arm {
24
TEST(ArmManagedRegister,NoRegister)25 TEST(ArmManagedRegister, NoRegister) {
26 ArmManagedRegister reg = ManagedRegister::NoRegister().AsArm();
27 EXPECT_TRUE(reg.IsNoRegister());
28 EXPECT_TRUE(!reg.Overlaps(reg));
29 }
30
TEST(ArmManagedRegister,CoreRegister)31 TEST(ArmManagedRegister, CoreRegister) {
32 ArmManagedRegister reg = ArmManagedRegister::FromCoreRegister(R0);
33 EXPECT_TRUE(!reg.IsNoRegister());
34 EXPECT_TRUE(reg.IsCoreRegister());
35 EXPECT_TRUE(!reg.IsSRegister());
36 EXPECT_TRUE(!reg.IsDRegister());
37 EXPECT_TRUE(!reg.IsRegisterPair());
38 EXPECT_EQ(R0, reg.AsCoreRegister());
39
40 reg = ArmManagedRegister::FromCoreRegister(R1);
41 EXPECT_TRUE(!reg.IsNoRegister());
42 EXPECT_TRUE(reg.IsCoreRegister());
43 EXPECT_TRUE(!reg.IsSRegister());
44 EXPECT_TRUE(!reg.IsDRegister());
45 EXPECT_TRUE(!reg.IsOverlappingDRegister());
46 EXPECT_TRUE(!reg.IsRegisterPair());
47 EXPECT_EQ(R1, reg.AsCoreRegister());
48
49 reg = ArmManagedRegister::FromCoreRegister(R8);
50 EXPECT_TRUE(!reg.IsNoRegister());
51 EXPECT_TRUE(reg.IsCoreRegister());
52 EXPECT_TRUE(!reg.IsSRegister());
53 EXPECT_TRUE(!reg.IsDRegister());
54 EXPECT_TRUE(!reg.IsOverlappingDRegister());
55 EXPECT_TRUE(!reg.IsRegisterPair());
56 EXPECT_EQ(R8, reg.AsCoreRegister());
57
58 reg = ArmManagedRegister::FromCoreRegister(R15);
59 EXPECT_TRUE(!reg.IsNoRegister());
60 EXPECT_TRUE(reg.IsCoreRegister());
61 EXPECT_TRUE(!reg.IsSRegister());
62 EXPECT_TRUE(!reg.IsDRegister());
63 EXPECT_TRUE(!reg.IsOverlappingDRegister());
64 EXPECT_TRUE(!reg.IsRegisterPair());
65 EXPECT_EQ(R15, reg.AsCoreRegister());
66 }
67
68
TEST(ArmManagedRegister,SRegister)69 TEST(ArmManagedRegister, SRegister) {
70 ArmManagedRegister reg = ArmManagedRegister::FromSRegister(S0);
71 EXPECT_TRUE(!reg.IsNoRegister());
72 EXPECT_TRUE(!reg.IsCoreRegister());
73 EXPECT_TRUE(reg.IsSRegister());
74 EXPECT_TRUE(!reg.IsDRegister());
75 EXPECT_TRUE(!reg.IsOverlappingDRegister());
76 EXPECT_TRUE(!reg.IsRegisterPair());
77 EXPECT_EQ(S0, reg.AsSRegister());
78
79 reg = ArmManagedRegister::FromSRegister(S1);
80 EXPECT_TRUE(!reg.IsNoRegister());
81 EXPECT_TRUE(!reg.IsCoreRegister());
82 EXPECT_TRUE(reg.IsSRegister());
83 EXPECT_TRUE(!reg.IsDRegister());
84 EXPECT_TRUE(!reg.IsOverlappingDRegister());
85 EXPECT_TRUE(!reg.IsRegisterPair());
86 EXPECT_EQ(S1, reg.AsSRegister());
87
88 reg = ArmManagedRegister::FromSRegister(S3);
89 EXPECT_TRUE(!reg.IsNoRegister());
90 EXPECT_TRUE(!reg.IsCoreRegister());
91 EXPECT_TRUE(reg.IsSRegister());
92 EXPECT_TRUE(!reg.IsDRegister());
93 EXPECT_TRUE(!reg.IsOverlappingDRegister());
94 EXPECT_TRUE(!reg.IsRegisterPair());
95 EXPECT_EQ(S3, reg.AsSRegister());
96
97 reg = ArmManagedRegister::FromSRegister(S15);
98 EXPECT_TRUE(!reg.IsNoRegister());
99 EXPECT_TRUE(!reg.IsCoreRegister());
100 EXPECT_TRUE(reg.IsSRegister());
101 EXPECT_TRUE(!reg.IsDRegister());
102 EXPECT_TRUE(!reg.IsOverlappingDRegister());
103 EXPECT_TRUE(!reg.IsRegisterPair());
104 EXPECT_EQ(S15, reg.AsSRegister());
105
106 reg = ArmManagedRegister::FromSRegister(S30);
107 EXPECT_TRUE(!reg.IsNoRegister());
108 EXPECT_TRUE(!reg.IsCoreRegister());
109 EXPECT_TRUE(reg.IsSRegister());
110 EXPECT_TRUE(!reg.IsDRegister());
111 EXPECT_TRUE(!reg.IsOverlappingDRegister());
112 EXPECT_TRUE(!reg.IsRegisterPair());
113 EXPECT_EQ(S30, reg.AsSRegister());
114
115 reg = ArmManagedRegister::FromSRegister(S31);
116 EXPECT_TRUE(!reg.IsNoRegister());
117 EXPECT_TRUE(!reg.IsCoreRegister());
118 EXPECT_TRUE(reg.IsSRegister());
119 EXPECT_TRUE(!reg.IsDRegister());
120 EXPECT_TRUE(!reg.IsOverlappingDRegister());
121 EXPECT_TRUE(!reg.IsRegisterPair());
122 EXPECT_EQ(S31, reg.AsSRegister());
123 }
124
125
TEST(ArmManagedRegister,DRegister)126 TEST(ArmManagedRegister, DRegister) {
127 ArmManagedRegister reg = ArmManagedRegister::FromDRegister(D0);
128 EXPECT_TRUE(!reg.IsNoRegister());
129 EXPECT_TRUE(!reg.IsCoreRegister());
130 EXPECT_TRUE(!reg.IsSRegister());
131 EXPECT_TRUE(reg.IsDRegister());
132 EXPECT_TRUE(reg.IsOverlappingDRegister());
133 EXPECT_TRUE(!reg.IsRegisterPair());
134 EXPECT_EQ(D0, reg.AsDRegister());
135 EXPECT_EQ(S0, reg.AsOverlappingDRegisterLow());
136 EXPECT_EQ(S1, reg.AsOverlappingDRegisterHigh());
137 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S0)));
138
139 reg = ArmManagedRegister::FromDRegister(D1);
140 EXPECT_TRUE(!reg.IsNoRegister());
141 EXPECT_TRUE(!reg.IsCoreRegister());
142 EXPECT_TRUE(!reg.IsSRegister());
143 EXPECT_TRUE(reg.IsDRegister());
144 EXPECT_TRUE(reg.IsOverlappingDRegister());
145 EXPECT_TRUE(!reg.IsRegisterPair());
146 EXPECT_EQ(D1, reg.AsDRegister());
147 EXPECT_EQ(S2, reg.AsOverlappingDRegisterLow());
148 EXPECT_EQ(S3, reg.AsOverlappingDRegisterHigh());
149 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S2)));
150
151 reg = ArmManagedRegister::FromDRegister(D6);
152 EXPECT_TRUE(!reg.IsNoRegister());
153 EXPECT_TRUE(!reg.IsCoreRegister());
154 EXPECT_TRUE(!reg.IsSRegister());
155 EXPECT_TRUE(reg.IsDRegister());
156 EXPECT_TRUE(reg.IsOverlappingDRegister());
157 EXPECT_TRUE(!reg.IsRegisterPair());
158 EXPECT_EQ(D6, reg.AsDRegister());
159 EXPECT_EQ(S12, reg.AsOverlappingDRegisterLow());
160 EXPECT_EQ(S13, reg.AsOverlappingDRegisterHigh());
161 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S12)));
162
163 reg = ArmManagedRegister::FromDRegister(D14);
164 EXPECT_TRUE(!reg.IsNoRegister());
165 EXPECT_TRUE(!reg.IsCoreRegister());
166 EXPECT_TRUE(!reg.IsSRegister());
167 EXPECT_TRUE(reg.IsDRegister());
168 EXPECT_TRUE(reg.IsOverlappingDRegister());
169 EXPECT_TRUE(!reg.IsRegisterPair());
170 EXPECT_EQ(D14, reg.AsDRegister());
171 EXPECT_EQ(S28, reg.AsOverlappingDRegisterLow());
172 EXPECT_EQ(S29, reg.AsOverlappingDRegisterHigh());
173 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S28)));
174
175 reg = ArmManagedRegister::FromDRegister(D15);
176 EXPECT_TRUE(!reg.IsNoRegister());
177 EXPECT_TRUE(!reg.IsCoreRegister());
178 EXPECT_TRUE(!reg.IsSRegister());
179 EXPECT_TRUE(reg.IsDRegister());
180 EXPECT_TRUE(reg.IsOverlappingDRegister());
181 EXPECT_TRUE(!reg.IsRegisterPair());
182 EXPECT_EQ(D15, reg.AsDRegister());
183 EXPECT_EQ(S30, reg.AsOverlappingDRegisterLow());
184 EXPECT_EQ(S31, reg.AsOverlappingDRegisterHigh());
185 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S30)));
186
187 #ifdef VFPv3_D32
188 reg = ArmManagedRegister::FromDRegister(D16);
189 EXPECT_TRUE(!reg.IsNoRegister());
190 EXPECT_TRUE(!reg.IsCoreRegister());
191 EXPECT_TRUE(!reg.IsSRegister());
192 EXPECT_TRUE(reg.IsDRegister());
193 EXPECT_TRUE(!reg.IsOverlappingDRegister());
194 EXPECT_TRUE(!reg.IsRegisterPair());
195 EXPECT_EQ(D16, reg.AsDRegister());
196
197 reg = ArmManagedRegister::FromDRegister(D18);
198 EXPECT_TRUE(!reg.IsNoRegister());
199 EXPECT_TRUE(!reg.IsCoreRegister());
200 EXPECT_TRUE(!reg.IsSRegister());
201 EXPECT_TRUE(reg.IsDRegister());
202 EXPECT_TRUE(!reg.IsOverlappingDRegister());
203 EXPECT_TRUE(!reg.IsRegisterPair());
204 EXPECT_EQ(D18, reg.AsDRegister());
205
206 reg = ArmManagedRegister::FromDRegister(D30);
207 EXPECT_TRUE(!reg.IsNoRegister());
208 EXPECT_TRUE(!reg.IsCoreRegister());
209 EXPECT_TRUE(!reg.IsSRegister());
210 EXPECT_TRUE(reg.IsDRegister());
211 EXPECT_TRUE(!reg.IsOverlappingDRegister());
212 EXPECT_TRUE(!reg.IsRegisterPair());
213 EXPECT_EQ(D30, reg.AsDRegister());
214
215 reg = ArmManagedRegister::FromDRegister(D31);
216 EXPECT_TRUE(!reg.IsNoRegister());
217 EXPECT_TRUE(!reg.IsCoreRegister());
218 EXPECT_TRUE(!reg.IsSRegister());
219 EXPECT_TRUE(reg.IsDRegister());
220 EXPECT_TRUE(!reg.IsOverlappingDRegister());
221 EXPECT_TRUE(!reg.IsRegisterPair());
222 EXPECT_EQ(D31, reg.AsDRegister());
223 #endif // VFPv3_D32
224 }
225
226
TEST(ArmManagedRegister,Pair)227 TEST(ArmManagedRegister, Pair) {
228 ArmManagedRegister reg = ArmManagedRegister::FromRegisterPair(R0_R1);
229 EXPECT_TRUE(!reg.IsNoRegister());
230 EXPECT_TRUE(!reg.IsCoreRegister());
231 EXPECT_TRUE(!reg.IsSRegister());
232 EXPECT_TRUE(!reg.IsDRegister());
233 EXPECT_TRUE(!reg.IsOverlappingDRegister());
234 EXPECT_TRUE(reg.IsRegisterPair());
235 EXPECT_EQ(R0_R1, reg.AsRegisterPair());
236 EXPECT_EQ(R0, reg.AsRegisterPairLow());
237 EXPECT_EQ(R1, reg.AsRegisterPairHigh());
238 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R0)));
239
240 reg = ArmManagedRegister::FromRegisterPair(R1_R2);
241 EXPECT_TRUE(!reg.IsNoRegister());
242 EXPECT_TRUE(!reg.IsCoreRegister());
243 EXPECT_TRUE(!reg.IsSRegister());
244 EXPECT_TRUE(!reg.IsDRegister());
245 EXPECT_TRUE(!reg.IsOverlappingDRegister());
246 EXPECT_TRUE(reg.IsRegisterPair());
247 EXPECT_EQ(R1_R2, reg.AsRegisterPair());
248 EXPECT_EQ(R1, reg.AsRegisterPairLow());
249 EXPECT_EQ(R2, reg.AsRegisterPairHigh());
250 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R1)));
251
252 reg = ArmManagedRegister::FromRegisterPair(R2_R3);
253 EXPECT_TRUE(!reg.IsNoRegister());
254 EXPECT_TRUE(!reg.IsCoreRegister());
255 EXPECT_TRUE(!reg.IsSRegister());
256 EXPECT_TRUE(!reg.IsDRegister());
257 EXPECT_TRUE(!reg.IsOverlappingDRegister());
258 EXPECT_TRUE(reg.IsRegisterPair());
259 EXPECT_EQ(R2_R3, reg.AsRegisterPair());
260 EXPECT_EQ(R2, reg.AsRegisterPairLow());
261 EXPECT_EQ(R3, reg.AsRegisterPairHigh());
262 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R2)));
263
264 reg = ArmManagedRegister::FromRegisterPair(R4_R5);
265 EXPECT_TRUE(!reg.IsNoRegister());
266 EXPECT_TRUE(!reg.IsCoreRegister());
267 EXPECT_TRUE(!reg.IsSRegister());
268 EXPECT_TRUE(!reg.IsDRegister());
269 EXPECT_TRUE(!reg.IsOverlappingDRegister());
270 EXPECT_TRUE(reg.IsRegisterPair());
271 EXPECT_EQ(R4_R5, reg.AsRegisterPair());
272 EXPECT_EQ(R4, reg.AsRegisterPairLow());
273 EXPECT_EQ(R5, reg.AsRegisterPairHigh());
274 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R4)));
275
276 reg = ArmManagedRegister::FromRegisterPair(R6_R7);
277 EXPECT_TRUE(!reg.IsNoRegister());
278 EXPECT_TRUE(!reg.IsCoreRegister());
279 EXPECT_TRUE(!reg.IsSRegister());
280 EXPECT_TRUE(!reg.IsDRegister());
281 EXPECT_TRUE(!reg.IsOverlappingDRegister());
282 EXPECT_TRUE(reg.IsRegisterPair());
283 EXPECT_EQ(R6_R7, reg.AsRegisterPair());
284 EXPECT_EQ(R6, reg.AsRegisterPairLow());
285 EXPECT_EQ(R7, reg.AsRegisterPairHigh());
286 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R6)));
287 }
288
289
TEST(ArmManagedRegister,Equals)290 TEST(ArmManagedRegister, Equals) {
291 ManagedRegister no_reg = ManagedRegister::NoRegister();
292 EXPECT_TRUE(no_reg.Equals(ArmManagedRegister::NoRegister()));
293 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromCoreRegister(R0)));
294 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromCoreRegister(R1)));
295 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromSRegister(S0)));
296 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromDRegister(D0)));
297 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
298
299 ArmManagedRegister reg_R0 = ArmManagedRegister::FromCoreRegister(R0);
300 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::NoRegister()));
301 EXPECT_TRUE(reg_R0.Equals(ArmManagedRegister::FromCoreRegister(R0)));
302 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromCoreRegister(R1)));
303 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromSRegister(S0)));
304 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromDRegister(D0)));
305 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
306
307 ArmManagedRegister reg_R1 = ArmManagedRegister::FromCoreRegister(R1);
308 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::NoRegister()));
309 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromCoreRegister(R0)));
310 EXPECT_TRUE(reg_R1.Equals(ArmManagedRegister::FromCoreRegister(R1)));
311 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromSRegister(S0)));
312 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromDRegister(D0)));
313 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromSRegister(S1)));
314 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromDRegister(D1)));
315 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
316
317 ArmManagedRegister reg_R8 = ArmManagedRegister::FromCoreRegister(R8);
318 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::NoRegister()));
319 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromCoreRegister(R0)));
320 EXPECT_TRUE(reg_R8.Equals(ArmManagedRegister::FromCoreRegister(R8)));
321 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromSRegister(S0)));
322 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromDRegister(D0)));
323 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromSRegister(S1)));
324 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromDRegister(D1)));
325 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
326
327 ArmManagedRegister reg_S0 = ArmManagedRegister::FromSRegister(S0);
328 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::NoRegister()));
329 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromCoreRegister(R0)));
330 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromCoreRegister(R1)));
331 EXPECT_TRUE(reg_S0.Equals(ArmManagedRegister::FromSRegister(S0)));
332 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromSRegister(S1)));
333 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromDRegister(D0)));
334 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromDRegister(D1)));
335 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
336
337 ArmManagedRegister reg_S1 = ArmManagedRegister::FromSRegister(S1);
338 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::NoRegister()));
339 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromCoreRegister(R0)));
340 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromCoreRegister(R1)));
341 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromSRegister(S0)));
342 EXPECT_TRUE(reg_S1.Equals(ArmManagedRegister::FromSRegister(S1)));
343 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromDRegister(D0)));
344 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromDRegister(D1)));
345 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
346
347 ArmManagedRegister reg_S31 = ArmManagedRegister::FromSRegister(S31);
348 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::NoRegister()));
349 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromCoreRegister(R0)));
350 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromCoreRegister(R1)));
351 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromSRegister(S0)));
352 EXPECT_TRUE(reg_S31.Equals(ArmManagedRegister::FromSRegister(S31)));
353 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromDRegister(D0)));
354 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromDRegister(D1)));
355 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
356
357 ArmManagedRegister reg_D0 = ArmManagedRegister::FromDRegister(D0);
358 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::NoRegister()));
359 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromCoreRegister(R0)));
360 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromCoreRegister(R1)));
361 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromSRegister(S0)));
362 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromSRegister(S31)));
363 EXPECT_TRUE(reg_D0.Equals(ArmManagedRegister::FromDRegister(D0)));
364 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromDRegister(D1)));
365 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
366
367 ArmManagedRegister reg_D15 = ArmManagedRegister::FromDRegister(D15);
368 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::NoRegister()));
369 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromCoreRegister(R0)));
370 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromCoreRegister(R1)));
371 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromSRegister(S0)));
372 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromSRegister(S31)));
373 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromDRegister(D0)));
374 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromDRegister(D1)));
375 EXPECT_TRUE(reg_D15.Equals(ArmManagedRegister::FromDRegister(D15)));
376 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
377
378 #ifdef VFPv3_D32
379 ArmManagedRegister reg_D16 = ArmManagedRegister::FromDRegister(D16);
380 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::NoRegister()));
381 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromCoreRegister(R0)));
382 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromCoreRegister(R1)));
383 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromSRegister(S0)));
384 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromSRegister(S31)));
385 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D0)));
386 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D1)));
387 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D15)));
388 EXPECT_TRUE(reg_D16.Equals(ArmManagedRegister::FromDRegister(D16)));
389 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
390
391 ArmManagedRegister reg_D30 = ArmManagedRegister::FromDRegister(D30);
392 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::NoRegister()));
393 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromCoreRegister(R0)));
394 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromCoreRegister(R1)));
395 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromSRegister(S0)));
396 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromSRegister(S31)));
397 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D0)));
398 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D1)));
399 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D15)));
400 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D16)));
401 EXPECT_TRUE(reg_D30.Equals(ArmManagedRegister::FromDRegister(D30)));
402 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
403
404 ArmManagedRegister reg_D31 = ArmManagedRegister::FromDRegister(D30);
405 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::NoRegister()));
406 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromCoreRegister(R0)));
407 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromCoreRegister(R1)));
408 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromSRegister(S0)));
409 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromSRegister(S31)));
410 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D0)));
411 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D1)));
412 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D15)));
413 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D16)));
414 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D30)));
415 EXPECT_TRUE(reg_D31.Equals(ArmManagedRegister::FromDRegister(D31)));
416 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
417 #endif // VFPv3_D32
418
419 ArmManagedRegister reg_R0R1 = ArmManagedRegister::FromRegisterPair(R0_R1);
420 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::NoRegister()));
421 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromCoreRegister(R0)));
422 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromCoreRegister(R1)));
423 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromSRegister(S0)));
424 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromSRegister(S31)));
425 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D0)));
426 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D1)));
427 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D15)));
428 EXPECT_TRUE(reg_R0R1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
429 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromRegisterPair(R2_R3)));
430
431 ArmManagedRegister reg_R4R5 = ArmManagedRegister::FromRegisterPair(R4_R5);
432 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::NoRegister()));
433 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromCoreRegister(R0)));
434 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromCoreRegister(R1)));
435 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromSRegister(S0)));
436 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromSRegister(S31)));
437 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D0)));
438 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D1)));
439 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D15)));
440 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
441 EXPECT_TRUE(reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R4_R5)));
442 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R6_R7)));
443
444 ArmManagedRegister reg_R6R7 = ArmManagedRegister::FromRegisterPair(R6_R7);
445 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::NoRegister()));
446 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromCoreRegister(R0)));
447 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromCoreRegister(R1)));
448 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromSRegister(S0)));
449 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromSRegister(S31)));
450 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D0)));
451 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D1)));
452 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D15)));
453 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
454 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R4_R5)));
455 EXPECT_TRUE(reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R6_R7)));
456 }
457
458
TEST(ArmManagedRegister,Overlaps)459 TEST(ArmManagedRegister, Overlaps) {
460 ArmManagedRegister reg = ArmManagedRegister::FromCoreRegister(R0);
461 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
462 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
463 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
464 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
465 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
466 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
467 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
468 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
469 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
470 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
471 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
472 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
473 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
474 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
475 #ifdef VFPv3_D32
476 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
477 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
478 #endif // VFPv3_D32
479 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
480 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
481
482 reg = ArmManagedRegister::FromCoreRegister(R1);
483 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
484 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
485 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
486 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
487 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
488 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
489 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
490 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
491 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
492 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
493 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
494 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
495 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
496 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
497 #ifdef VFPv3_D32
498 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
499 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
500 #endif // VFPv3_D32
501 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
502 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
503
504 reg = ArmManagedRegister::FromCoreRegister(R7);
505 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
506 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
507 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
508 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
509 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
510 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
511 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
512 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
513 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
514 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
515 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
516 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
517 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
518 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
519 #ifdef VFPv3_D32
520 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
521 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
522 #endif // VFPv3_D32
523 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
524 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
525
526 reg = ArmManagedRegister::FromSRegister(S0);
527 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
528 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
529 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
530 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
531 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
532 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
533 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
534 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
535 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
536 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
537 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
538 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
539 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
540 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
541 #ifdef VFPv3_D32
542 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
543 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
544 #endif // VFPv3_D32
545 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
546 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
547
548 reg = ArmManagedRegister::FromSRegister(S1);
549 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
550 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
551 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
552 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
553 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
554 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
555 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
556 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
557 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
558 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
559 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
560 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
561 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
562 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
563 #ifdef VFPv3_D32
564 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
565 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
566 #endif // VFPv3_D32
567 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
568 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
569
570 reg = ArmManagedRegister::FromSRegister(S15);
571 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
572 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
573 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
574 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
575 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
576 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
577 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
578 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
579 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
580 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
581 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
582 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
583 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
584 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
585 #ifdef VFPv3_D32
586 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
587 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
588 #endif // VFPv3_D32
589 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
590 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
591
592 reg = ArmManagedRegister::FromSRegister(S31);
593 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
594 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
595 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
596 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
597 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
598 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
599 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
600 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
601 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
602 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
603 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
604 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
605 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
606 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
607 #ifdef VFPv3_D32
608 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
609 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
610 #endif // VFPv3_D32
611 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
612 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
613
614 reg = ArmManagedRegister::FromDRegister(D0);
615 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
616 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
617 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
618 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
619 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
620 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
621 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
622 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
623 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
624 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
625 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
626 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
627 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
628 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
629 #ifdef VFPv3_D32
630 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
631 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
632 #endif // VFPv3_D32
633 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
634 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
635
636 reg = ArmManagedRegister::FromDRegister(D7);
637 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
638 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
639 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
640 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
641 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
642 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
643 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
644 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
645 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
646 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
647 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
648 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
649 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
650 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
651 #ifdef VFPv3_D32
652 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
653 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
654 #endif // VFPv3_D32
655 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
656 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
657
658 reg = ArmManagedRegister::FromDRegister(D15);
659 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
660 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
661 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
662 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
663 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
664 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
665 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
666 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
667 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
668 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
669 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
670 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
671 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
672 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
673 #ifdef VFPv3_D32
674 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
675 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
676 #endif // VFPv3_D32
677 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
678 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
679
680 #ifdef VFPv3_D32
681 reg = ArmManagedRegister::FromDRegister(D16);
682 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
683 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
684 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
685 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
686 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
687 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
688 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
689 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
690 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
691 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
692 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
693 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
694 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
695 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
696 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
697 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
698 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
699 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
700
701 reg = ArmManagedRegister::FromDRegister(D31);
702 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
703 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
704 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
705 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
706 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
707 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
708 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
709 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
710 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
711 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
712 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
713 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
714 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
715 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
716 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
717 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
718 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
719 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
720 #endif // VFPv3_D32
721
722 reg = ArmManagedRegister::FromRegisterPair(R0_R1);
723 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
724 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
725 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
726 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
727 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
728 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
729 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
730 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
731 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
732 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
733 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
734 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
735 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
736 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
737 #ifdef VFPv3_D32
738 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
739 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
740 #endif // VFPv3_D32
741 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
742 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
743
744 reg = ArmManagedRegister::FromRegisterPair(R4_R5);
745 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
746 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
747 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
748 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
749 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
750 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
751 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
752 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
753 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
754 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
755 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
756 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
757 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
758 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
759 #ifdef VFPv3_D32
760 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
761 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
762 #endif // VFPv3_D32
763 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
764 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
765 }
766
767 } // namespace arm
768 } // namespace art
769