1fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko/*
2fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * Copyright (C) 2014 The Android Open Source Project
3fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko *
4fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * Licensed under the Apache License, Version 2.0 (the "License");
5fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * you may not use this file except in compliance with the License.
6fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * You may obtain a copy of the License at
7fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko *
8fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko *      http://www.apache.org/licenses/LICENSE-2.0
9fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko *
10fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * Unless required by applicable law or agreed to in writing, software
11fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * distributed under the License is distributed on an "AS IS" BASIS,
12fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * See the License for the specific language governing permissions and
14fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * limitations under the License.
15fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko */
16fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
17fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko#include "globals.h"
18fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko#include "managed_register_x86_64.h"
19fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko#include "gtest/gtest.h"
20fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
21fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenkonamespace art {
22fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenkonamespace x86_64 {
23fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
24fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, NoRegister) {
25fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg = ManagedRegister::NoRegister().AsX86();
26fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsNoRegister());
27fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(reg));
28fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
29fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
30fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, CpuRegister) {
31fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg = X86_64ManagedRegister::FromCpuRegister(RAX);
32fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
33fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsCpuRegister());
34fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
35fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
36fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
37fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RAX, reg.AsCpuRegister());
38fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
39fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromCpuRegister(RBX);
40fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
41fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsCpuRegister());
42fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
43fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
44fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
45fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RBX, reg.AsCpuRegister());
46fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
47fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromCpuRegister(RCX);
48fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
49fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsCpuRegister());
50fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
51fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
52fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
53fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RCX, reg.AsCpuRegister());
54fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
55fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromCpuRegister(RDI);
56fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
57fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsCpuRegister());
58fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
59fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
60fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
61fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDI, reg.AsCpuRegister());
62fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
63fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
64fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, XmmRegister) {
65fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg = X86_64ManagedRegister::FromXmmRegister(XMM0);
66fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
67fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
68fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsXmmRegister());
69fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
70fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
71fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(XMM0, reg.AsXmmRegister());
72fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
73fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromXmmRegister(XMM1);
74fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
75fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
76fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsXmmRegister());
77fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
78fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
79fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(XMM1, reg.AsXmmRegister());
80fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
81fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromXmmRegister(XMM7);
82fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
83fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
84fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsXmmRegister());
85fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
86fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
87fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(XMM7, reg.AsXmmRegister());
88fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
89fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
90fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, X87Register) {
91fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg = X86_64ManagedRegister::FromX87Register(ST0);
92fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
93fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
94fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
95fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsX87Register());
96fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
97fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(ST0, reg.AsX87Register());
98fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
99fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromX87Register(ST1);
100fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
101fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
102fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
103fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsX87Register());
104fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
105fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(ST1, reg.AsX87Register());
106fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
107fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromX87Register(ST7);
108fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
109fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
110fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
111fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsX87Register());
112fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsRegisterPair());
113fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(ST7, reg.AsX87Register());
114fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
115fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
116fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, RegisterPair) {
117fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDX);
118fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
119fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
120fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
121fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
122fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
123fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RAX, reg.AsRegisterPairLow());
124fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDX, reg.AsRegisterPairHigh());
125fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
126fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EAX_ECX);
127fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
128fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
129fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
130fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
131fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
132fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RAX, reg.AsRegisterPairLow());
133fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RCX, reg.AsRegisterPairHigh());
134fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
135fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EAX_EBX);
136fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
137fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
138fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
139fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
140fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
141fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RAX, reg.AsRegisterPairLow());
142fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RBX, reg.AsRegisterPairHigh());
143fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
144fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDI);
145fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
146fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
147fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
148fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
149fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
150fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RAX, reg.AsRegisterPairLow());
151fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
152fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
153fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EDX_ECX);
154fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
155fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
156fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
157fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
158fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
159fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDX, reg.AsRegisterPairLow());
160fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RCX, reg.AsRegisterPairHigh());
161fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
162fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EDX_EBX);
163fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
164fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
165fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
166fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
167fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
168fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDX, reg.AsRegisterPairLow());
169fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RBX, reg.AsRegisterPairHigh());
170fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
171fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EDX_EDI);
172fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
173fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
174fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
175fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
176fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
177fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDX, reg.AsRegisterPairLow());
178fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
179fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
180fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(ECX_EBX);
181fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
182fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
183fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
184fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
185fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
186fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RCX, reg.AsRegisterPairLow());
187fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RBX, reg.AsRegisterPairHigh());
188fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
189fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(ECX_EDI);
190fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
191fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
192fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
193fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
194fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
195fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RCX, reg.AsRegisterPairLow());
196fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
197fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
198fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EBX_EDI);
199fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsNoRegister());
200fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsCpuRegister());
201fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsXmmRegister());
202fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.IsX87Register());
203fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.IsRegisterPair());
204fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RBX, reg.AsRegisterPairLow());
205fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
206fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
207fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
208fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, Equals) {
209fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg_eax = X86_64ManagedRegister::FromCpuRegister(RAX);
210fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
211fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
212fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
213fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
214fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
215fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
216fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
217fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
218fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
219fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
220fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg_xmm0 = X86_64ManagedRegister::FromXmmRegister(XMM0);
221fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
222fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
223fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
224fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg_xmm0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
225fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
226fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
227fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
228fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
229fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
230fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
231fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg_st0 = X86_64ManagedRegister::FromX87Register(ST0);
232fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
233fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
234fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
235fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
236fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
237fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg_st0.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
238fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
239fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
240fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
241fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
242fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg_pair = X86_64ManagedRegister::FromRegisterPair(EAX_EDX);
243fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
244fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
245fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
246fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
247fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
248fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
249fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
250fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg_pair.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
251fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
252fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
253fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
254fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, Overlaps) {
255fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  X86_64ManagedRegister reg = X86_64ManagedRegister::FromCpuRegister(RAX);
256fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
257fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
258fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
259fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
260fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
261fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
262fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
263fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
264fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
265fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
266fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromCpuRegister(RDX);
267fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
268fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
269fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
270fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
271fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
272fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
273fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
274fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
275fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
276fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
277fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromCpuRegister(RDI);
278fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
279fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
280fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
281fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
282fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
283fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
284fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
285fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
286fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
287fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
288fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromCpuRegister(RBX);
289fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
290fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
291fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
292fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
293fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
294fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
295fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
296fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
297fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
298fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
299fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromXmmRegister(XMM0);
300fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
301fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
302fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
303fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
304fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
305fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
306fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
307fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
308fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
309fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
310fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromX87Register(ST0);
311fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
312fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
313fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
314fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
315fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
316fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
317fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
318fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
319fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
320fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
321fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDX);
322fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
323fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
324fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
325fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
326fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
327fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
328fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
329fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
330fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_ECX)));
331fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
332fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
333fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EBX_EDI);
334fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
335fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
336fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
337fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
338fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
339fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
340fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
341fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
342fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
343fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_EBX)));
344fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
345fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  reg = X86_64ManagedRegister::FromRegisterPair(EDX_ECX);
346fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
347fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
348fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
349fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
350fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
351fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
352fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
353fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
354fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
355fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko  EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_EBX)));
356fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}
357fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko
358fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}  // namespace x86_64
359fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko}  // namespace art
360