12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/*
22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2011 The Android Open Source Project
32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License.
62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at
72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software
112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and
142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License.
152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */
16b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
17578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "globals.h"
18578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "managed_register_arm.h"
19b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#include "gtest/gtest.h"
20b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
21b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogersnamespace art {
222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersnamespace arm {
23b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
242c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, NoRegister) {
252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg = ManagedRegister::NoRegister().AsArm();
26b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsNoRegister());
27b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.Overlaps(reg));
28b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
29b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
302c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, CoreRegister) {
312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg = ArmManagedRegister::FromCoreRegister(R0);
32b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
33b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsCoreRegister());
34b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
35b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
36b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
37b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R0, reg.AsCoreRegister());
38b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromCoreRegister(R1);
40b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
41b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsCoreRegister());
42b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
43b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
44b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
45b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
46b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R1, reg.AsCoreRegister());
47b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromCoreRegister(R8);
49b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
50b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsCoreRegister());
51b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
52b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
53b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
54b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
55b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R8, reg.AsCoreRegister());
56b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromCoreRegister(R15);
58b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
59b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsCoreRegister());
60b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
61b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
62b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
63b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
64b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R15, reg.AsCoreRegister());
65b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
66b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
67b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
682c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, SRegister) {
692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg = ArmManagedRegister::FromSRegister(S0);
70b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
71b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
72b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsSRegister());
73b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
74b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
75b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
76b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S0, reg.AsSRegister());
77b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
782c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S1);
79b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
80b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
81b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsSRegister());
82b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
83b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
84b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
85b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S1, reg.AsSRegister());
86b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
872c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S3);
88b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
89b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
90b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsSRegister());
91b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
92b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
93b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
94b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S3, reg.AsSRegister());
95b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S15);
97b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
98b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
99b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsSRegister());
100b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
101b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
102b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
103b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S15, reg.AsSRegister());
104b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S30);
106b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
107b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
108b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsSRegister());
109b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
110b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
111b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
112b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S30, reg.AsSRegister());
113b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S31);
115b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
116b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
117b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsSRegister());
118b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
119b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
120b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
121b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S31, reg.AsSRegister());
122b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
123b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
124b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1252c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, DRegister) {
1262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg = ArmManagedRegister::FromDRegister(D0);
127b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
128b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
129b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
130b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
131b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsOverlappingDRegister());
132b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
133b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D0, reg.AsDRegister());
134b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S0, reg.AsOverlappingDRegisterLow());
135b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S1, reg.AsOverlappingDRegisterHigh());
1362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S0)));
137b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D1);
139b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
140b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
141b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
142b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
143b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsOverlappingDRegister());
144b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
145b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D1, reg.AsDRegister());
146b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S2, reg.AsOverlappingDRegisterLow());
147b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S3, reg.AsOverlappingDRegisterHigh());
1482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S2)));
149b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1502c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D6);
151b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
152b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
153b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
154b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
155b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsOverlappingDRegister());
156b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
157b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D6, reg.AsDRegister());
158b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S12, reg.AsOverlappingDRegisterLow());
159b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S13, reg.AsOverlappingDRegisterHigh());
1602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S12)));
161b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D14);
163b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
164b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
165b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
166b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
167b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsOverlappingDRegister());
168b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
169b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D14, reg.AsDRegister());
170b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S28, reg.AsOverlappingDRegisterLow());
171b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S29, reg.AsOverlappingDRegisterHigh());
1722c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S28)));
173b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1742c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D15);
175b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
176b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
177b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
178b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
179b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsOverlappingDRegister());
180b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
181b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D15, reg.AsDRegister());
182b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S30, reg.AsOverlappingDRegisterLow());
183b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(S31, reg.AsOverlappingDRegisterHigh());
1842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S30)));
185b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
186b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
1872c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D16);
188b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
189b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
190b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
191b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
192b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
193b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
194b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D16, reg.AsDRegister());
195b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
1962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D18);
197b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
198b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
199b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
200b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
201b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
202b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
203b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D18, reg.AsDRegister());
204b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D30);
206b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
207b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
208b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
209b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
210b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
211b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
212b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D30, reg.AsDRegister());
213b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D31);
215b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
216b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
217b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
218b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsDRegister());
219b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
220b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsRegisterPair());
221b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(D31, reg.AsDRegister());
222b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
223b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
224b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
225b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2262c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, Pair) {
2272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg = ArmManagedRegister::FromRegisterPair(R0_R1);
228b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
229b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
230b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
231b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
232b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
233b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsRegisterPair());
234b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R0_R1, reg.AsRegisterPair());
235b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R0, reg.AsRegisterPairLow());
236b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R1, reg.AsRegisterPairHigh());
2372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R0)));
238b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromRegisterPair(R1_R2);
2407a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
2417a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
2427a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
2437a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
2447a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
2457a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_TRUE(reg.IsRegisterPair());
2467a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_EQ(R1_R2, reg.AsRegisterPair());
2477a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_EQ(R1, reg.AsRegisterPairLow());
2487a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers  EXPECT_EQ(R2, reg.AsRegisterPairHigh());
2492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R1)));
2507a99c11d220ec68c208b507570e3a78c2c18a7a1Ian Rogers
2512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromRegisterPair(R2_R3);
252b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
253b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
254b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
255b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
256b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
257b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsRegisterPair());
258b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R2_R3, reg.AsRegisterPair());
259b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R2, reg.AsRegisterPairLow());
260b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R3, reg.AsRegisterPairHigh());
2612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R2)));
262b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromRegisterPair(R4_R5);
264b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
265b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
266b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
267b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
268b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
269b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsRegisterPair());
270b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R4_R5, reg.AsRegisterPair());
271b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R4, reg.AsRegisterPairLow());
272b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R5, reg.AsRegisterPairHigh());
2732c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R4)));
274b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2752c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromRegisterPair(R6_R7);
276b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsNoRegister());
277b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsCoreRegister());
278b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsSRegister());
279b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsDRegister());
280b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(!reg.IsOverlappingDRegister());
281b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_TRUE(reg.IsRegisterPair());
282b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R6_R7, reg.AsRegisterPair());
283b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R6, reg.AsRegisterPairLow());
284b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  EXPECT_EQ(R7, reg.AsRegisterPairHigh());
2852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R6)));
286b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
287b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
288b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
2892c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, Equals) {
290b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers  ManagedRegister no_reg = ManagedRegister::NoRegister();
2912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(no_reg.Equals(ArmManagedRegister::NoRegister()));
2922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromCoreRegister(R0)));
2932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromCoreRegister(R1)));
2942c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromSRegister(S0)));
2952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromDRegister(D0)));
2962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
2972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
2982c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_R0 = ArmManagedRegister::FromCoreRegister(R0);
2992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::NoRegister()));
3002c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_R0.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromSRegister(S0)));
3032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromDRegister(D0)));
3042c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_R1 = ArmManagedRegister::FromCoreRegister(R1);
3072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::NoRegister()));
3082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_R1.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3102c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromSRegister(S0)));
3112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromDRegister(D0)));
3122c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromSRegister(S1)));
3132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromDRegister(D1)));
3142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3152c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_R8 = ArmManagedRegister::FromCoreRegister(R8);
3172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::NoRegister()));
3182c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3192c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_R8.Equals(ArmManagedRegister::FromCoreRegister(R8)));
3202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromSRegister(S0)));
3212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromDRegister(D0)));
3222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromSRegister(S1)));
3232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromDRegister(D1)));
3242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_S0 = ArmManagedRegister::FromSRegister(S0);
3272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::NoRegister()));
3282c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3292c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_S0.Equals(ArmManagedRegister::FromSRegister(S0)));
3312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromSRegister(S1)));
3322c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromDRegister(D0)));
3332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromDRegister(D1)));
3342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_S1 = ArmManagedRegister::FromSRegister(S1);
3372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::NoRegister()));
3382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3402c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromSRegister(S0)));
3412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_S1.Equals(ArmManagedRegister::FromSRegister(S1)));
3422c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromDRegister(D0)));
3432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromDRegister(D1)));
3442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3462c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_S31 = ArmManagedRegister::FromSRegister(S31);
3472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::NoRegister()));
3482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3502c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromSRegister(S0)));
3512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_S31.Equals(ArmManagedRegister::FromSRegister(S31)));
3522c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromDRegister(D0)));
3532c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromDRegister(D1)));
3542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3552c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3562c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_D0 = ArmManagedRegister::FromDRegister(D0);
3572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::NoRegister()));
3582c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3592c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromSRegister(S0)));
3612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromSRegister(S31)));
3622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_D0.Equals(ArmManagedRegister::FromDRegister(D0)));
3632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromDRegister(D1)));
3642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3652c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3662c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_D15 = ArmManagedRegister::FromDRegister(D15);
3672c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::NoRegister()));
3682c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3702c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromSRegister(S0)));
3712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromSRegister(S31)));
3722c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromDRegister(D0)));
3732c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromDRegister(D1)));
3742c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_D15.Equals(ArmManagedRegister::FromDRegister(D15)));
3752c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
376b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
377b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
3782c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_D16 = ArmManagedRegister::FromDRegister(D16);
3792c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::NoRegister()));
3802c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3812c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3822c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromSRegister(S0)));
3832c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromSRegister(S31)));
3842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D0)));
3852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D1)));
3862c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D15)));
3872c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_D16.Equals(ArmManagedRegister::FromDRegister(D16)));
3882c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
3892c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
3902c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_D30 = ArmManagedRegister::FromDRegister(D30);
3912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::NoRegister()));
3922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromCoreRegister(R0)));
3932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromCoreRegister(R1)));
3942c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromSRegister(S0)));
3952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromSRegister(S31)));
3962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D0)));
3972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D1)));
3982c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D15)));
3992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D16)));
4002c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_D30.Equals(ArmManagedRegister::FromDRegister(D30)));
4012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
4022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
4032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_D31 = ArmManagedRegister::FromDRegister(D30);
4042c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::NoRegister()));
4052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromCoreRegister(R0)));
4062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromCoreRegister(R1)));
4072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromSRegister(S0)));
4082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromSRegister(S31)));
4092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D0)));
4102c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D1)));
4112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D15)));
4122c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D16)));
4132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D30)));
4142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_D31.Equals(ArmManagedRegister::FromDRegister(D31)));
4152c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
416b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
417b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
4182c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_R0R1 = ArmManagedRegister::FromRegisterPair(R0_R1);
4192c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::NoRegister()));
4202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromCoreRegister(R0)));
4212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromCoreRegister(R1)));
4222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromSRegister(S0)));
4232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromSRegister(S31)));
4242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D0)));
4252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D1)));
4262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D15)));
4272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_R0R1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
4282c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromRegisterPair(R2_R3)));
4292c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
4302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_R4R5 = ArmManagedRegister::FromRegisterPair(R4_R5);
4312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::NoRegister()));
4322c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromCoreRegister(R0)));
4332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromCoreRegister(R1)));
4342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromSRegister(S0)));
4352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromSRegister(S31)));
4362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D0)));
4372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D1)));
4382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D15)));
4392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
4402c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R4_R5)));
4412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R6_R7)));
4422c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
4432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg_R6R7 = ArmManagedRegister::FromRegisterPair(R6_R7);
4442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::NoRegister()));
4452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromCoreRegister(R0)));
4462c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromCoreRegister(R1)));
4472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromSRegister(S0)));
4482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromSRegister(S31)));
4492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D0)));
4502c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D1)));
4512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D15)));
4522c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R0_R1)));
4532c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R4_R5)));
4542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R6_R7)));
455b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
456b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
457b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
4582c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersTEST(ArmManagedRegister, Overlaps) {
4592c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  ArmManagedRegister reg = ArmManagedRegister::FromCoreRegister(R0);
4602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
4612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
4622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
4632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
4642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
4652c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
4662c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
4672c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
4682c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
4692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
4702c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
4712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
4722c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
4732c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
474b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
4752c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
4762c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
477b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
4782c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
4792c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
4802c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
4812c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromCoreRegister(R1);
4822c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
4832c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
4842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
4852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
4862c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
4872c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
4882c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
4892c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
4902c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
4912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
4922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
4932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
4942c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
4952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
496b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
4972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
4982c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
499b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
5002c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
5012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
5022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
5032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromCoreRegister(R7);
5042c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
5052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
5062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
5072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
5082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
5092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
5102c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
5112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
5122c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
5132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
5142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
5152c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
5162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
5172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
518b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
5192c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
5202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
521b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
5222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
5232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
5242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
5252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S0);
5262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
5272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
5282c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
5292c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
5302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
5312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
5322c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
5332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
5342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
5352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
5362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
5372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
5382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
5392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
540b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
5412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
5422c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
543b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
5442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
5452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
5462c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
5472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S1);
5482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
5492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
5502c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
5512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
5522c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
5532c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
5542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
5552c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
5562c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
5572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
5582c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
5592c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
5602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
5612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
562b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
5632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
5642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
565b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
5662c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
5672c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
5682c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
5692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S15);
5702c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
5712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
5722c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
5732c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
5742c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
5752c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
5762c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
5772c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
5782c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
5792c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
5802c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
5812c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
5822c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
5832c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
584b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
5852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
5862c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
587b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
5882c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
5892c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
5902c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
5912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromSRegister(S31);
5922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
5932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
5942c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
5952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
5962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
5972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
5982c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
5992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
6002c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
6012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
6022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
6032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
6042c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
6052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
606b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
6072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
6082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
609b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
6102c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
6112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
6122c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
6132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D0);
6142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
6152c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
6162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
6172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
6182c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
6192c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
6202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
6212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
6222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
6232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
6242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
6252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
6262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
6272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
628b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
6292c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
6302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
631b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
6322c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
6332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
6342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
6352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D7);
6362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
6372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
6382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
6392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
6402c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
6412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
6422c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
6432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
6442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
6452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
6462c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
6472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
6482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
6492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
650b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
6512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
6522c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
653b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
6542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
6552c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
6562c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
6572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D15);
6582c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
6592c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
6602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
6612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
6622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
6632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
6642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
6652c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
6662c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
6672c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
6682c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
6692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
6702c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
6712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
672b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
6732c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
6742c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
675b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
6762c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
6772c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
678b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
679b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
6802c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D16);
6812c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
6822c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
6832c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
6842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
6852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
6862c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
6872c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
6882c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
6892c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
6902c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
6912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
6922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
6932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
6942c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
6952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
6962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
6972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
6982c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
6992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
7002c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromDRegister(D31);
7012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
7022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
7032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
7042c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
7052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
7062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
7072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
7082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
7092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
7102c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
7112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
7122c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
7132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
7142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
7152c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
7162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
7172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
7182c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
719b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
720b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
7212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromRegisterPair(R0_R1);
7222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
7232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
7242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
7252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
7262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
7272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
7282c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
7292c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
7302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
7312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
7322c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
7332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
7342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
7352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
736b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
7372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
7382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
739b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
7402c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
7412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
7422c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers
7432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  reg = ArmManagedRegister::FromRegisterPair(R4_R5);
7442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0)));
7452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1)));
7462c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7)));
7472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8)));
7482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0)));
7492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1)));
7502c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2)));
7512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15)));
7522c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30)));
7532c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31)));
7542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0)));
7552c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1)));
7562c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7)));
7572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15)));
758b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#ifdef VFPv3_D32
7592c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16)));
7602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31)));
761b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers#endif  // VFPv3_D32
7622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1)));
7632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers  EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5)));
764b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}
765b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
7662c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers}  // namespace arm
767b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers}  // namespace art
768