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