managed_register_arm64_test.cc revision 91690f6166f007699770f9a52be2b1a23e513307
1/*
2 * Copyright (C) 2014 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 "globals.h"
18#include "managed_register_arm64.h"
19#include "gtest/gtest.h"
20
21namespace art {
22namespace arm64 {
23
24TEST(Arm64ManagedRegister, NoRegister) {
25  Arm64ManagedRegister reg = ManagedRegister::NoRegister().AsArm64();
26  EXPECT_TRUE(reg.IsNoRegister());
27  EXPECT_TRUE(!reg.Overlaps(reg));
28}
29
30// X Register test.
31TEST(Arm64ManagedRegister, CoreRegister) {
32  Arm64ManagedRegister reg = Arm64ManagedRegister::FromCoreRegister(X0);
33  Arm64ManagedRegister wreg = Arm64ManagedRegister::FromWRegister(W0);
34  EXPECT_TRUE(!reg.IsNoRegister());
35  EXPECT_TRUE(reg.IsCoreRegister());
36  EXPECT_TRUE(!reg.IsWRegister());
37  EXPECT_TRUE(!reg.IsDRegister());
38  EXPECT_TRUE(!reg.IsSRegister());
39  EXPECT_TRUE(reg.Overlaps(wreg));
40  EXPECT_EQ(X0, reg.AsCoreRegister());
41
42  reg = Arm64ManagedRegister::FromCoreRegister(X1);
43  wreg = Arm64ManagedRegister::FromWRegister(W1);
44  EXPECT_TRUE(!reg.IsNoRegister());
45  EXPECT_TRUE(reg.IsCoreRegister());
46  EXPECT_TRUE(!reg.IsWRegister());
47  EXPECT_TRUE(!reg.IsDRegister());
48  EXPECT_TRUE(!reg.IsSRegister());
49  EXPECT_TRUE(reg.Overlaps(wreg));
50  EXPECT_EQ(X1, reg.AsCoreRegister());
51
52  reg = Arm64ManagedRegister::FromCoreRegister(X7);
53  wreg = Arm64ManagedRegister::FromWRegister(W7);
54  EXPECT_TRUE(!reg.IsNoRegister());
55  EXPECT_TRUE(reg.IsCoreRegister());
56  EXPECT_TRUE(!reg.IsWRegister());
57  EXPECT_TRUE(!reg.IsDRegister());
58  EXPECT_TRUE(!reg.IsSRegister());
59  EXPECT_TRUE(reg.Overlaps(wreg));
60  EXPECT_EQ(X7, reg.AsCoreRegister());
61
62  reg = Arm64ManagedRegister::FromCoreRegister(X15);
63  wreg = Arm64ManagedRegister::FromWRegister(W15);
64  EXPECT_TRUE(!reg.IsNoRegister());
65  EXPECT_TRUE(reg.IsCoreRegister());
66  EXPECT_TRUE(!reg.IsWRegister());
67  EXPECT_TRUE(!reg.IsDRegister());
68  EXPECT_TRUE(!reg.IsSRegister());
69  EXPECT_TRUE(reg.Overlaps(wreg));
70  EXPECT_EQ(X15, reg.AsCoreRegister());
71
72  reg = Arm64ManagedRegister::FromCoreRegister(X19);
73  wreg = Arm64ManagedRegister::FromWRegister(W19);
74  EXPECT_TRUE(!reg.IsNoRegister());
75  EXPECT_TRUE(reg.IsCoreRegister());
76  EXPECT_TRUE(!reg.IsWRegister());
77  EXPECT_TRUE(!reg.IsDRegister());
78  EXPECT_TRUE(!reg.IsSRegister());
79  EXPECT_TRUE(reg.Overlaps(wreg));
80  EXPECT_EQ(X19, reg.AsCoreRegister());
81
82  reg = Arm64ManagedRegister::FromCoreRegister(X16);
83  wreg = Arm64ManagedRegister::FromWRegister(W16);
84  EXPECT_TRUE(!reg.IsNoRegister());
85  EXPECT_TRUE(reg.IsCoreRegister());
86  EXPECT_TRUE(!reg.IsWRegister());
87  EXPECT_TRUE(!reg.IsDRegister());
88  EXPECT_TRUE(!reg.IsSRegister());
89  EXPECT_TRUE(reg.Overlaps(wreg));
90  EXPECT_EQ(IP0, reg.AsCoreRegister());
91
92  reg = Arm64ManagedRegister::FromCoreRegister(SP);
93  wreg = Arm64ManagedRegister::FromWRegister(WZR);
94  EXPECT_TRUE(!reg.IsNoRegister());
95  EXPECT_TRUE(reg.IsCoreRegister());
96  EXPECT_TRUE(!reg.IsWRegister());
97  EXPECT_TRUE(!reg.IsDRegister());
98  EXPECT_TRUE(!reg.IsSRegister());
99  EXPECT_TRUE(reg.Overlaps(wreg));
100  EXPECT_EQ(SP, reg.AsCoreRegister());
101}
102
103// W register test.
104TEST(Arm64ManagedRegister, WRegister) {
105  Arm64ManagedRegister reg = Arm64ManagedRegister::FromWRegister(W0);
106  Arm64ManagedRegister xreg = Arm64ManagedRegister::FromCoreRegister(X0);
107  EXPECT_TRUE(!reg.IsNoRegister());
108  EXPECT_TRUE(!reg.IsCoreRegister());
109  EXPECT_TRUE(reg.IsWRegister());
110  EXPECT_TRUE(!reg.IsDRegister());
111  EXPECT_TRUE(!reg.IsSRegister());
112  EXPECT_TRUE(reg.Overlaps(xreg));
113  EXPECT_EQ(W0, reg.AsWRegister());
114
115  reg = Arm64ManagedRegister::FromWRegister(W5);
116  xreg = Arm64ManagedRegister::FromCoreRegister(X5);
117  EXPECT_TRUE(!reg.IsNoRegister());
118  EXPECT_TRUE(!reg.IsCoreRegister());
119  EXPECT_TRUE(reg.IsWRegister());
120  EXPECT_TRUE(!reg.IsDRegister());
121  EXPECT_TRUE(!reg.IsSRegister());
122  EXPECT_TRUE(reg.Overlaps(xreg));
123  EXPECT_EQ(W5, reg.AsWRegister());
124
125  reg = Arm64ManagedRegister::FromWRegister(W6);
126  xreg = Arm64ManagedRegister::FromCoreRegister(X6);
127  EXPECT_TRUE(!reg.IsNoRegister());
128  EXPECT_TRUE(!reg.IsCoreRegister());
129  EXPECT_TRUE(reg.IsWRegister());
130  EXPECT_TRUE(!reg.IsDRegister());
131  EXPECT_TRUE(!reg.IsSRegister());
132  EXPECT_TRUE(reg.Overlaps(xreg));
133  EXPECT_EQ(W6, reg.AsWRegister());
134
135  reg = Arm64ManagedRegister::FromWRegister(W18);
136  xreg = Arm64ManagedRegister::FromCoreRegister(X18);
137  EXPECT_TRUE(!reg.IsNoRegister());
138  EXPECT_TRUE(!reg.IsCoreRegister());
139  EXPECT_TRUE(reg.IsWRegister());
140  EXPECT_TRUE(!reg.IsDRegister());
141  EXPECT_TRUE(!reg.IsSRegister());
142  EXPECT_TRUE(reg.Overlaps(xreg));
143  EXPECT_EQ(W18, reg.AsWRegister());
144
145  reg = Arm64ManagedRegister::FromWRegister(W29);
146  xreg = Arm64ManagedRegister::FromCoreRegister(FP);
147  EXPECT_TRUE(!reg.IsNoRegister());
148  EXPECT_TRUE(!reg.IsCoreRegister());
149  EXPECT_TRUE(reg.IsWRegister());
150  EXPECT_TRUE(!reg.IsDRegister());
151  EXPECT_TRUE(!reg.IsSRegister());
152  EXPECT_TRUE(reg.Overlaps(xreg));
153  EXPECT_EQ(W29, reg.AsWRegister());
154
155  reg = Arm64ManagedRegister::FromWRegister(WZR);
156  xreg = Arm64ManagedRegister::FromCoreRegister(SP);
157  EXPECT_TRUE(!reg.IsNoRegister());
158  EXPECT_TRUE(!reg.IsCoreRegister());
159  EXPECT_TRUE(reg.IsWRegister());
160  EXPECT_TRUE(!reg.IsDRegister());
161  EXPECT_TRUE(!reg.IsSRegister());
162  EXPECT_TRUE(reg.Overlaps(xreg));
163  EXPECT_EQ(W31, reg.AsWRegister());
164}
165
166// D Register test.
167TEST(Arm64ManagedRegister, DRegister) {
168  Arm64ManagedRegister reg = Arm64ManagedRegister::FromDRegister(D0);
169  Arm64ManagedRegister sreg = Arm64ManagedRegister::FromSRegister(S0);
170  EXPECT_TRUE(!reg.IsNoRegister());
171  EXPECT_TRUE(!reg.IsCoreRegister());
172  EXPECT_TRUE(!reg.IsWRegister());
173  EXPECT_TRUE(reg.IsDRegister());
174  EXPECT_TRUE(!reg.IsSRegister());
175  EXPECT_TRUE(reg.Overlaps(sreg));
176  EXPECT_EQ(D0, reg.AsDRegister());
177  EXPECT_EQ(S0, reg.AsOverlappingDRegisterLow());
178  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D0)));
179
180  reg = Arm64ManagedRegister::FromDRegister(D1);
181  sreg = Arm64ManagedRegister::FromSRegister(S1);
182  EXPECT_TRUE(!reg.IsNoRegister());
183  EXPECT_TRUE(!reg.IsCoreRegister());
184  EXPECT_TRUE(!reg.IsWRegister());
185  EXPECT_TRUE(reg.IsDRegister());
186  EXPECT_TRUE(!reg.IsSRegister());
187  EXPECT_TRUE(reg.Overlaps(sreg));
188  EXPECT_EQ(D1, reg.AsDRegister());
189  EXPECT_EQ(S1, reg.AsOverlappingDRegisterLow());
190  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D1)));
191
192  reg = Arm64ManagedRegister::FromDRegister(D20);
193  sreg = Arm64ManagedRegister::FromSRegister(S20);
194  EXPECT_TRUE(!reg.IsNoRegister());
195  EXPECT_TRUE(!reg.IsCoreRegister());
196  EXPECT_TRUE(!reg.IsWRegister());
197  EXPECT_TRUE(reg.IsDRegister());
198  EXPECT_TRUE(!reg.IsSRegister());
199  EXPECT_TRUE(reg.Overlaps(sreg));
200  EXPECT_EQ(D20, reg.AsDRegister());
201  EXPECT_EQ(S20, reg.AsOverlappingDRegisterLow());
202  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D20)));
203
204  reg = Arm64ManagedRegister::FromDRegister(D31);
205  sreg = Arm64ManagedRegister::FromSRegister(S31);
206  EXPECT_TRUE(!reg.IsNoRegister());
207  EXPECT_TRUE(!reg.IsCoreRegister());
208  EXPECT_TRUE(!reg.IsWRegister());
209  EXPECT_TRUE(reg.IsDRegister());
210  EXPECT_TRUE(!reg.IsSRegister());
211  EXPECT_TRUE(reg.Overlaps(sreg));
212  EXPECT_EQ(D31, reg.AsDRegister());
213  EXPECT_EQ(S31, reg.AsOverlappingDRegisterLow());
214  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D31)));
215}
216
217// S Register test.
218TEST(Arm64ManagedRegister, SRegister) {
219  Arm64ManagedRegister reg = Arm64ManagedRegister::FromSRegister(S0);
220  Arm64ManagedRegister dreg = Arm64ManagedRegister::FromDRegister(D0);
221  EXPECT_TRUE(!reg.IsNoRegister());
222  EXPECT_TRUE(!reg.IsCoreRegister());
223  EXPECT_TRUE(!reg.IsWRegister());
224  EXPECT_TRUE(reg.IsSRegister());
225  EXPECT_TRUE(!reg.IsDRegister());
226  EXPECT_TRUE(reg.Overlaps(dreg));
227  EXPECT_EQ(S0, reg.AsSRegister());
228  EXPECT_EQ(D0, reg.AsOverlappingSRegisterD());
229  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S0)));
230
231  reg = Arm64ManagedRegister::FromSRegister(S5);
232  dreg = Arm64ManagedRegister::FromDRegister(D5);
233  EXPECT_TRUE(!reg.IsNoRegister());
234  EXPECT_TRUE(!reg.IsCoreRegister());
235  EXPECT_TRUE(!reg.IsWRegister());
236  EXPECT_TRUE(reg.IsSRegister());
237  EXPECT_TRUE(!reg.IsDRegister());
238  EXPECT_TRUE(reg.Overlaps(dreg));
239  EXPECT_EQ(S5, reg.AsSRegister());
240  EXPECT_EQ(D5, reg.AsOverlappingSRegisterD());
241  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S5)));
242
243  reg = Arm64ManagedRegister::FromSRegister(S7);
244  dreg = Arm64ManagedRegister::FromDRegister(D7);
245  EXPECT_TRUE(!reg.IsNoRegister());
246  EXPECT_TRUE(!reg.IsCoreRegister());
247  EXPECT_TRUE(!reg.IsWRegister());
248  EXPECT_TRUE(reg.IsSRegister());
249  EXPECT_TRUE(!reg.IsDRegister());
250  EXPECT_TRUE(reg.Overlaps(dreg));
251  EXPECT_EQ(S7, reg.AsSRegister());
252  EXPECT_EQ(D7, reg.AsOverlappingSRegisterD());
253  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S7)));
254
255  reg = Arm64ManagedRegister::FromSRegister(S31);
256  dreg = Arm64ManagedRegister::FromDRegister(D31);
257  EXPECT_TRUE(!reg.IsNoRegister());
258  EXPECT_TRUE(!reg.IsCoreRegister());
259  EXPECT_TRUE(!reg.IsWRegister());
260  EXPECT_TRUE(reg.IsSRegister());
261  EXPECT_TRUE(!reg.IsDRegister());
262  EXPECT_TRUE(reg.Overlaps(dreg));
263  EXPECT_EQ(S31, reg.AsSRegister());
264  EXPECT_EQ(D31, reg.AsOverlappingSRegisterD());
265  EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S31)));
266}
267
268TEST(Arm64ManagedRegister, Equals) {
269  ManagedRegister no_reg = ManagedRegister::NoRegister();
270  EXPECT_TRUE(no_reg.Equals(Arm64ManagedRegister::NoRegister()));
271  EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
272  EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
273  EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromWRegister(W0)));
274  EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromWRegister(W1)));
275  EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromDRegister(D0)));
276  EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromSRegister(S0)));
277
278  Arm64ManagedRegister reg_X0 = Arm64ManagedRegister::FromCoreRegister(X0);
279  EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::NoRegister()));
280  EXPECT_TRUE(reg_X0.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
281  EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
282  EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromWRegister(W0)));
283  EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromSRegister(S0)));
284  EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromDRegister(D0)));
285
286  Arm64ManagedRegister reg_X1 = Arm64ManagedRegister::FromCoreRegister(X1);
287  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::NoRegister()));
288  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
289  EXPECT_TRUE(reg_X1.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
290  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromWRegister(W1)));
291  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromDRegister(D0)));
292  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromSRegister(S0)));
293  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromDRegister(D1)));
294  EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromSRegister(S1)));
295
296  Arm64ManagedRegister reg_X31 = Arm64ManagedRegister::FromCoreRegister(X31);
297  EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::NoRegister()));
298  // TODO: Fix the infrastructure, then re-enable.
299  // EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromCoreRegister(SP)));
300  // EXPECT_TRUE(reg_X31.Equals(Arm64ManagedRegister::FromCoreRegister(XZR)));
301  EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromWRegister(W31)));
302  EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromWRegister(WZR)));
303  EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromSRegister(S0)));
304  EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromDRegister(D0)));
305
306  Arm64ManagedRegister reg_SP = Arm64ManagedRegister::FromCoreRegister(SP);
307  EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::NoRegister()));
308  // TODO: We expect these to pass - SP has a different semantic than X31/XZR.
309  // EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromCoreRegister(X31)));
310  EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromCoreRegister(XZR)));
311  EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromWRegister(W31)));
312  EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromSRegister(S0)));
313  EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromDRegister(D0)));
314
315  Arm64ManagedRegister reg_W8 = Arm64ManagedRegister::FromWRegister(W8);
316  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::NoRegister()));
317  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
318  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromCoreRegister(X8)));
319  EXPECT_TRUE(reg_W8.Equals(Arm64ManagedRegister::FromWRegister(W8)));
320  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromDRegister(D0)));
321  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromSRegister(S0)));
322  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromDRegister(D1)));
323  EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromSRegister(S1)));
324
325  Arm64ManagedRegister reg_W12 = Arm64ManagedRegister::FromWRegister(W12);
326  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::NoRegister()));
327  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
328  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromCoreRegister(X8)));
329  EXPECT_TRUE(reg_W12.Equals(Arm64ManagedRegister::FromWRegister(W12)));
330  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromDRegister(D0)));
331  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromSRegister(S0)));
332  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromDRegister(D1)));
333  EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromSRegister(S1)));
334
335  Arm64ManagedRegister reg_S0 = Arm64ManagedRegister::FromSRegister(S0);
336  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::NoRegister()));
337  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
338  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
339  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromWRegister(W0)));
340  EXPECT_TRUE(reg_S0.Equals(Arm64ManagedRegister::FromSRegister(S0)));
341  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromSRegister(S1)));
342  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromDRegister(D0)));
343  EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromDRegister(D1)));
344
345  Arm64ManagedRegister reg_S1 = Arm64ManagedRegister::FromSRegister(S1);
346  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::NoRegister()));
347  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
348  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
349  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromWRegister(W0)));
350  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromSRegister(S0)));
351  EXPECT_TRUE(reg_S1.Equals(Arm64ManagedRegister::FromSRegister(S1)));
352  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromDRegister(D0)));
353  EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromDRegister(D1)));
354
355  Arm64ManagedRegister reg_S31 = Arm64ManagedRegister::FromSRegister(S31);
356  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::NoRegister()));
357  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
358  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
359  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromWRegister(W0)));
360  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromSRegister(S0)));
361  EXPECT_TRUE(reg_S31.Equals(Arm64ManagedRegister::FromSRegister(S31)));
362  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromDRegister(D0)));
363  EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromDRegister(D1)));
364
365  Arm64ManagedRegister reg_D0 = Arm64ManagedRegister::FromDRegister(D0);
366  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::NoRegister()));
367  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
368  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromWRegister(W1)));
369  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S0)));
370  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S0)));
371  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S31)));
372  EXPECT_TRUE(reg_D0.Equals(Arm64ManagedRegister::FromDRegister(D0)));
373  EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromDRegister(D1)));
374
375  Arm64ManagedRegister reg_D15 = Arm64ManagedRegister::FromDRegister(D15);
376  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::NoRegister()));
377  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromCoreRegister(X0)));
378  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromCoreRegister(X1)));
379  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromWRegister(W0)));
380  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromSRegister(S0)));
381  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromSRegister(S31)));
382  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D0)));
383  EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D1)));
384  EXPECT_TRUE(reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D15)));
385}
386
387TEST(Arm64ManagedRegister, Overlaps) {
388  Arm64ManagedRegister reg = Arm64ManagedRegister::FromCoreRegister(X0);
389  Arm64ManagedRegister reg_o = Arm64ManagedRegister::FromWRegister(W0);
390  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X0)));
391  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
392  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP)));
393  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W0)));
394  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
395  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
396  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
397  EXPECT_EQ(X0, reg_o.AsOverlappingWRegisterCore());
398  EXPECT_EQ(W0, reg.AsOverlappingCoreRegisterLow());
399  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
400  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
401  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
402  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
403  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
404  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
405  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
406  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
407  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
408  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
409
410  reg = Arm64ManagedRegister::FromCoreRegister(X10);
411  reg_o = Arm64ManagedRegister::FromWRegister(W10);
412  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X10)));
413  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
414  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP)));
415  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W10)));
416  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
417  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
418  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
419  EXPECT_EQ(X10, reg_o.AsOverlappingWRegisterCore());
420  EXPECT_EQ(W10, reg.AsOverlappingCoreRegisterLow());
421  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
422  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
423  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
424  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
425  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
426  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
427  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
428  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
429  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
430  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
431
432  reg = Arm64ManagedRegister::FromCoreRegister(IP1);
433  reg_o = Arm64ManagedRegister::FromWRegister(W17);
434  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X17)));
435  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
436  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP)));
437  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W17)));
438  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
439  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
440  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
441  EXPECT_EQ(X17, reg_o.AsOverlappingWRegisterCore());
442  EXPECT_EQ(W17, reg.AsOverlappingCoreRegisterLow());
443  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
444  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
445  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
446  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
447  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
448  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
449  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
450  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
451  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
452  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
453
454  reg = Arm64ManagedRegister::FromCoreRegister(XZR);
455  reg_o = Arm64ManagedRegister::FromWRegister(WZR);
456  // TODO: Overlap not implemented, yet
457  // EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31)));
458  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
459  // EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP)));
460  // EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
461  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
462  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
463  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W19)));
464  EXPECT_EQ(X31, reg_o.AsOverlappingWRegisterCore());
465  // TODO: XZR is not a core register right now.
466  // EXPECT_EQ(W31, reg.AsOverlappingCoreRegisterLow());
467  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
468  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
469  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
470  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
471  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
472  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
473  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
474  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
475  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
476  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
477
478  reg = Arm64ManagedRegister::FromCoreRegister(SP);
479  reg_o = Arm64ManagedRegister::FromWRegister(WZR);
480  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31)));
481  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
482  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15)));
483  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
484  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
485  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
486  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
487  EXPECT_EQ(X31, reg_o.AsOverlappingWRegisterCore());
488  EXPECT_EQ(W31, reg.AsOverlappingCoreRegisterLow());
489  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
490  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
491  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
492  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
493  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
494  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
495  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
496  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
497  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
498  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
499
500  reg = Arm64ManagedRegister::FromWRegister(W1);
501  reg_o = Arm64ManagedRegister::FromCoreRegister(X1);
502  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
503  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
504  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15)));
505  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
506  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
507  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
508  EXPECT_EQ(W1, reg_o.AsOverlappingCoreRegisterLow());
509  EXPECT_EQ(X1, reg.AsOverlappingWRegisterCore());
510  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
511  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
512  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
513  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
514  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
515  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
516  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
517  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
518  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
519  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
520
521  reg = Arm64ManagedRegister::FromWRegister(W21);
522  reg_o = Arm64ManagedRegister::FromCoreRegister(X21);
523  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W21)));
524  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X21)));
525  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15)));
526  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
527  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
528  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
529  EXPECT_EQ(W21, reg_o.AsOverlappingCoreRegisterLow());
530  EXPECT_EQ(X21, reg.AsOverlappingWRegisterCore());
531  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
532  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
533  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
534  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
535  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
536  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
537  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
538  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
539  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
540  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
541
542
543  reg = Arm64ManagedRegister::FromSRegister(S1);
544  reg_o = Arm64ManagedRegister::FromDRegister(D1);
545  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31)));
546  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
547  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15)));
548  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
549  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
550  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
551  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
552  EXPECT_EQ(S1, reg_o.AsOverlappingDRegisterLow());
553  EXPECT_EQ(D1, reg.AsOverlappingSRegisterD());
554  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
555  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1)));
556  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
557  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
558  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30)));
559  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
560  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0)));
561  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1)));
562  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2)));
563  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7)));
564  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
565
566  reg = Arm64ManagedRegister::FromSRegister(S15);
567  reg_o = Arm64ManagedRegister::FromDRegister(D15);
568  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31)));
569  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
570  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15)));
571  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
572  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
573  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
574  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
575  EXPECT_EQ(S15, reg_o.AsOverlappingDRegisterLow());
576  EXPECT_EQ(D15, reg.AsOverlappingSRegisterD());
577  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
578  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
579  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
580  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S17)));
581  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S16)));
582  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
583  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D16)));
584  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
585  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2)));
586  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D17)));
587  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D20)));
588
589  reg = Arm64ManagedRegister::FromDRegister(D15);
590  reg_o = Arm64ManagedRegister::FromSRegister(S15);
591  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31)));
592  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1)));
593  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15)));
594  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR)));
595  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1)));
596  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12)));
597  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31)));
598  EXPECT_EQ(S15, reg.AsOverlappingDRegisterLow());
599  EXPECT_EQ(D15, reg_o.AsOverlappingSRegisterD());
600  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0)));
601  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15)));
602  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2)));
603  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S17)));
604  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S16)));
605  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31)));
606  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D16)));
607  EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15)));
608  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2)));
609  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D17)));
610  EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D20)));
611}
612
613}  // namespace arm64
614}  // namespace art
615