blob: 6121e263f859e98a95f3d0bcafa6fd1d5dfb918c [file] [log] [blame]
Ian Rogersb033c752011-07-20 12:22:35 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
Brian Carlstrom578bbdc2011-07-21 14:07:47 -07003#include "globals.h"
Ian Rogers2c8f6532011-09-02 17:16:34 -07004#include "managed_register_x86.h"
Ian Rogersb033c752011-07-20 12:22:35 -07005#include "gtest/gtest.h"
6
7namespace art {
Ian Rogers2c8f6532011-09-02 17:16:34 -07008namespace x86 {
Ian Rogersb033c752011-07-20 12:22:35 -07009
Ian Rogers2c8f6532011-09-02 17:16:34 -070010TEST(X86ManagedRegister, NoRegister) {
11 X86ManagedRegister reg = ManagedRegister::NoRegister().AsX86();
Ian Rogersb033c752011-07-20 12:22:35 -070012 EXPECT_TRUE(reg.IsNoRegister());
13 EXPECT_TRUE(!reg.Overlaps(reg));
14}
15
Ian Rogers2c8f6532011-09-02 17:16:34 -070016TEST(X86ManagedRegister, CpuRegister) {
17 X86ManagedRegister reg = X86ManagedRegister::FromCpuRegister(EAX);
Ian Rogersb033c752011-07-20 12:22:35 -070018 EXPECT_TRUE(!reg.IsNoRegister());
19 EXPECT_TRUE(reg.IsCpuRegister());
20 EXPECT_TRUE(!reg.IsXmmRegister());
21 EXPECT_TRUE(!reg.IsX87Register());
22 EXPECT_TRUE(!reg.IsRegisterPair());
23 EXPECT_EQ(EAX, reg.AsCpuRegister());
24
Ian Rogers2c8f6532011-09-02 17:16:34 -070025 reg = X86ManagedRegister::FromCpuRegister(EBX);
Ian Rogersb033c752011-07-20 12:22:35 -070026 EXPECT_TRUE(!reg.IsNoRegister());
27 EXPECT_TRUE(reg.IsCpuRegister());
28 EXPECT_TRUE(!reg.IsXmmRegister());
29 EXPECT_TRUE(!reg.IsX87Register());
30 EXPECT_TRUE(!reg.IsRegisterPair());
31 EXPECT_EQ(EBX, reg.AsCpuRegister());
32
Ian Rogers2c8f6532011-09-02 17:16:34 -070033 reg = X86ManagedRegister::FromCpuRegister(ECX);
Ian Rogersb033c752011-07-20 12:22:35 -070034 EXPECT_TRUE(!reg.IsNoRegister());
35 EXPECT_TRUE(reg.IsCpuRegister());
36 EXPECT_TRUE(!reg.IsXmmRegister());
37 EXPECT_TRUE(!reg.IsX87Register());
38 EXPECT_TRUE(!reg.IsRegisterPair());
39 EXPECT_EQ(ECX, reg.AsCpuRegister());
40
Ian Rogers2c8f6532011-09-02 17:16:34 -070041 reg = X86ManagedRegister::FromCpuRegister(EDI);
Ian Rogersb033c752011-07-20 12:22:35 -070042 EXPECT_TRUE(!reg.IsNoRegister());
43 EXPECT_TRUE(reg.IsCpuRegister());
44 EXPECT_TRUE(!reg.IsXmmRegister());
45 EXPECT_TRUE(!reg.IsX87Register());
46 EXPECT_TRUE(!reg.IsRegisterPair());
47 EXPECT_EQ(EDI, reg.AsCpuRegister());
48}
49
Ian Rogers2c8f6532011-09-02 17:16:34 -070050TEST(X86ManagedRegister, XmmRegister) {
51 X86ManagedRegister reg = X86ManagedRegister::FromXmmRegister(XMM0);
Ian Rogersb033c752011-07-20 12:22:35 -070052 EXPECT_TRUE(!reg.IsNoRegister());
53 EXPECT_TRUE(!reg.IsCpuRegister());
54 EXPECT_TRUE(reg.IsXmmRegister());
55 EXPECT_TRUE(!reg.IsX87Register());
56 EXPECT_TRUE(!reg.IsRegisterPair());
57 EXPECT_EQ(XMM0, reg.AsXmmRegister());
58
Ian Rogers2c8f6532011-09-02 17:16:34 -070059 reg = X86ManagedRegister::FromXmmRegister(XMM1);
Ian Rogersb033c752011-07-20 12:22:35 -070060 EXPECT_TRUE(!reg.IsNoRegister());
61 EXPECT_TRUE(!reg.IsCpuRegister());
62 EXPECT_TRUE(reg.IsXmmRegister());
63 EXPECT_TRUE(!reg.IsX87Register());
64 EXPECT_TRUE(!reg.IsRegisterPair());
65 EXPECT_EQ(XMM1, reg.AsXmmRegister());
66
Ian Rogers2c8f6532011-09-02 17:16:34 -070067 reg = X86ManagedRegister::FromXmmRegister(XMM7);
Ian Rogersb033c752011-07-20 12:22:35 -070068 EXPECT_TRUE(!reg.IsNoRegister());
69 EXPECT_TRUE(!reg.IsCpuRegister());
70 EXPECT_TRUE(reg.IsXmmRegister());
71 EXPECT_TRUE(!reg.IsX87Register());
72 EXPECT_TRUE(!reg.IsRegisterPair());
73 EXPECT_EQ(XMM7, reg.AsXmmRegister());
74}
75
Ian Rogers2c8f6532011-09-02 17:16:34 -070076TEST(X86ManagedRegister, X87Register) {
77 X86ManagedRegister reg = X86ManagedRegister::FromX87Register(ST0);
Ian Rogersb033c752011-07-20 12:22:35 -070078 EXPECT_TRUE(!reg.IsNoRegister());
79 EXPECT_TRUE(!reg.IsCpuRegister());
80 EXPECT_TRUE(!reg.IsXmmRegister());
81 EXPECT_TRUE(reg.IsX87Register());
82 EXPECT_TRUE(!reg.IsRegisterPair());
83 EXPECT_EQ(ST0, reg.AsX87Register());
84
Ian Rogers2c8f6532011-09-02 17:16:34 -070085 reg = X86ManagedRegister::FromX87Register(ST1);
Ian Rogersb033c752011-07-20 12:22:35 -070086 EXPECT_TRUE(!reg.IsNoRegister());
87 EXPECT_TRUE(!reg.IsCpuRegister());
88 EXPECT_TRUE(!reg.IsXmmRegister());
89 EXPECT_TRUE(reg.IsX87Register());
90 EXPECT_TRUE(!reg.IsRegisterPair());
91 EXPECT_EQ(ST1, reg.AsX87Register());
92
Ian Rogers2c8f6532011-09-02 17:16:34 -070093 reg = X86ManagedRegister::FromX87Register(ST7);
Ian Rogersb033c752011-07-20 12:22:35 -070094 EXPECT_TRUE(!reg.IsNoRegister());
95 EXPECT_TRUE(!reg.IsCpuRegister());
96 EXPECT_TRUE(!reg.IsXmmRegister());
97 EXPECT_TRUE(reg.IsX87Register());
98 EXPECT_TRUE(!reg.IsRegisterPair());
99 EXPECT_EQ(ST7, reg.AsX87Register());
100}
101
Ian Rogers2c8f6532011-09-02 17:16:34 -0700102TEST(X86ManagedRegister, RegisterPair) {
103 X86ManagedRegister reg = X86ManagedRegister::FromRegisterPair(EAX_EDX);
Ian Rogersb033c752011-07-20 12:22:35 -0700104 EXPECT_TRUE(!reg.IsNoRegister());
105 EXPECT_TRUE(!reg.IsCpuRegister());
106 EXPECT_TRUE(!reg.IsXmmRegister());
107 EXPECT_TRUE(!reg.IsX87Register());
108 EXPECT_TRUE(reg.IsRegisterPair());
109 EXPECT_EQ(EAX, reg.AsRegisterPairLow());
110 EXPECT_EQ(EDX, reg.AsRegisterPairHigh());
111
Ian Rogers2c8f6532011-09-02 17:16:34 -0700112 reg = X86ManagedRegister::FromRegisterPair(EAX_ECX);
Ian Rogersb033c752011-07-20 12:22:35 -0700113 EXPECT_TRUE(!reg.IsNoRegister());
114 EXPECT_TRUE(!reg.IsCpuRegister());
115 EXPECT_TRUE(!reg.IsXmmRegister());
116 EXPECT_TRUE(!reg.IsX87Register());
117 EXPECT_TRUE(reg.IsRegisterPair());
118 EXPECT_EQ(EAX, reg.AsRegisterPairLow());
119 EXPECT_EQ(ECX, reg.AsRegisterPairHigh());
120
Ian Rogers2c8f6532011-09-02 17:16:34 -0700121 reg = X86ManagedRegister::FromRegisterPair(EAX_EBX);
Ian Rogersb033c752011-07-20 12:22:35 -0700122 EXPECT_TRUE(!reg.IsNoRegister());
123 EXPECT_TRUE(!reg.IsCpuRegister());
124 EXPECT_TRUE(!reg.IsXmmRegister());
125 EXPECT_TRUE(!reg.IsX87Register());
126 EXPECT_TRUE(reg.IsRegisterPair());
127 EXPECT_EQ(EAX, reg.AsRegisterPairLow());
128 EXPECT_EQ(EBX, reg.AsRegisterPairHigh());
129
Ian Rogers2c8f6532011-09-02 17:16:34 -0700130 reg = X86ManagedRegister::FromRegisterPair(EAX_EDI);
Ian Rogersb033c752011-07-20 12:22:35 -0700131 EXPECT_TRUE(!reg.IsNoRegister());
132 EXPECT_TRUE(!reg.IsCpuRegister());
133 EXPECT_TRUE(!reg.IsXmmRegister());
134 EXPECT_TRUE(!reg.IsX87Register());
135 EXPECT_TRUE(reg.IsRegisterPair());
136 EXPECT_EQ(EAX, reg.AsRegisterPairLow());
137 EXPECT_EQ(EDI, reg.AsRegisterPairHigh());
138
Ian Rogers2c8f6532011-09-02 17:16:34 -0700139 reg = X86ManagedRegister::FromRegisterPair(EDX_ECX);
Ian Rogersb033c752011-07-20 12:22:35 -0700140 EXPECT_TRUE(!reg.IsNoRegister());
141 EXPECT_TRUE(!reg.IsCpuRegister());
142 EXPECT_TRUE(!reg.IsXmmRegister());
143 EXPECT_TRUE(!reg.IsX87Register());
144 EXPECT_TRUE(reg.IsRegisterPair());
145 EXPECT_EQ(EDX, reg.AsRegisterPairLow());
146 EXPECT_EQ(ECX, reg.AsRegisterPairHigh());
147
Ian Rogers2c8f6532011-09-02 17:16:34 -0700148 reg = X86ManagedRegister::FromRegisterPair(EDX_EBX);
Ian Rogersb033c752011-07-20 12:22:35 -0700149 EXPECT_TRUE(!reg.IsNoRegister());
150 EXPECT_TRUE(!reg.IsCpuRegister());
151 EXPECT_TRUE(!reg.IsXmmRegister());
152 EXPECT_TRUE(!reg.IsX87Register());
153 EXPECT_TRUE(reg.IsRegisterPair());
154 EXPECT_EQ(EDX, reg.AsRegisterPairLow());
155 EXPECT_EQ(EBX, reg.AsRegisterPairHigh());
156
Ian Rogers2c8f6532011-09-02 17:16:34 -0700157 reg = X86ManagedRegister::FromRegisterPair(EDX_EDI);
Ian Rogersb033c752011-07-20 12:22:35 -0700158 EXPECT_TRUE(!reg.IsNoRegister());
159 EXPECT_TRUE(!reg.IsCpuRegister());
160 EXPECT_TRUE(!reg.IsXmmRegister());
161 EXPECT_TRUE(!reg.IsX87Register());
162 EXPECT_TRUE(reg.IsRegisterPair());
163 EXPECT_EQ(EDX, reg.AsRegisterPairLow());
164 EXPECT_EQ(EDI, reg.AsRegisterPairHigh());
165
Ian Rogers2c8f6532011-09-02 17:16:34 -0700166 reg = X86ManagedRegister::FromRegisterPair(ECX_EBX);
Ian Rogersb033c752011-07-20 12:22:35 -0700167 EXPECT_TRUE(!reg.IsNoRegister());
168 EXPECT_TRUE(!reg.IsCpuRegister());
169 EXPECT_TRUE(!reg.IsXmmRegister());
170 EXPECT_TRUE(!reg.IsX87Register());
171 EXPECT_TRUE(reg.IsRegisterPair());
172 EXPECT_EQ(ECX, reg.AsRegisterPairLow());
173 EXPECT_EQ(EBX, reg.AsRegisterPairHigh());
174
Ian Rogers2c8f6532011-09-02 17:16:34 -0700175 reg = X86ManagedRegister::FromRegisterPair(ECX_EDI);
Ian Rogersb033c752011-07-20 12:22:35 -0700176 EXPECT_TRUE(!reg.IsNoRegister());
177 EXPECT_TRUE(!reg.IsCpuRegister());
178 EXPECT_TRUE(!reg.IsXmmRegister());
179 EXPECT_TRUE(!reg.IsX87Register());
180 EXPECT_TRUE(reg.IsRegisterPair());
181 EXPECT_EQ(ECX, reg.AsRegisterPairLow());
182 EXPECT_EQ(EDI, reg.AsRegisterPairHigh());
183
Ian Rogers2c8f6532011-09-02 17:16:34 -0700184 reg = X86ManagedRegister::FromRegisterPair(EBX_EDI);
Ian Rogersb033c752011-07-20 12:22:35 -0700185 EXPECT_TRUE(!reg.IsNoRegister());
186 EXPECT_TRUE(!reg.IsCpuRegister());
187 EXPECT_TRUE(!reg.IsXmmRegister());
188 EXPECT_TRUE(!reg.IsX87Register());
189 EXPECT_TRUE(reg.IsRegisterPair());
190 EXPECT_EQ(EBX, reg.AsRegisterPairLow());
191 EXPECT_EQ(EDI, reg.AsRegisterPairHigh());
192}
193
Ian Rogers2c8f6532011-09-02 17:16:34 -0700194TEST(X86ManagedRegister, Equals) {
195 X86ManagedRegister reg_eax = X86ManagedRegister::FromCpuRegister(EAX);
196 EXPECT_TRUE(reg_eax.Equals(X86ManagedRegister::FromCpuRegister(EAX)));
197 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromCpuRegister(EBX)));
198 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromCpuRegister(EDI)));
199 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromXmmRegister(XMM0)));
200 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromXmmRegister(XMM7)));
201 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromX87Register(ST0)));
202 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromX87Register(ST7)));
203 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
204 EXPECT_TRUE(!reg_eax.Equals(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700205
Ian Rogers2c8f6532011-09-02 17:16:34 -0700206 X86ManagedRegister reg_xmm0 = X86ManagedRegister::FromXmmRegister(XMM0);
207 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromCpuRegister(EAX)));
208 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromCpuRegister(EBX)));
209 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromCpuRegister(EDI)));
210 EXPECT_TRUE(reg_xmm0.Equals(X86ManagedRegister::FromXmmRegister(XMM0)));
211 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromXmmRegister(XMM7)));
212 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromX87Register(ST0)));
213 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromX87Register(ST7)));
214 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
215 EXPECT_TRUE(!reg_xmm0.Equals(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700216
Ian Rogers2c8f6532011-09-02 17:16:34 -0700217 X86ManagedRegister reg_st0 = X86ManagedRegister::FromX87Register(ST0);
218 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromCpuRegister(EAX)));
219 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromCpuRegister(EBX)));
220 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromCpuRegister(EDI)));
221 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromXmmRegister(XMM0)));
222 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromXmmRegister(XMM7)));
223 EXPECT_TRUE(reg_st0.Equals(X86ManagedRegister::FromX87Register(ST0)));
224 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromX87Register(ST7)));
225 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
226 EXPECT_TRUE(!reg_st0.Equals(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700227
Ian Rogers2c8f6532011-09-02 17:16:34 -0700228 X86ManagedRegister reg_pair = X86ManagedRegister::FromRegisterPair(EAX_EDX);
229 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromCpuRegister(EAX)));
230 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromCpuRegister(EBX)));
231 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromCpuRegister(EDI)));
232 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromXmmRegister(XMM0)));
233 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromXmmRegister(XMM7)));
234 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromX87Register(ST0)));
235 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromX87Register(ST7)));
236 EXPECT_TRUE(reg_pair.Equals(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
237 EXPECT_TRUE(!reg_pair.Equals(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700238}
239
Ian Rogers2c8f6532011-09-02 17:16:34 -0700240TEST(X86ManagedRegister, Overlaps) {
241 X86ManagedRegister reg = X86ManagedRegister::FromCpuRegister(EAX);
242 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
243 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
244 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
245 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
246 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
247 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
248 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
249 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
250 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700251
Ian Rogers2c8f6532011-09-02 17:16:34 -0700252 reg = X86ManagedRegister::FromCpuRegister(EDX);
253 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
254 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
255 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
256 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
257 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
258 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
259 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
260 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
261 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700262
Ian Rogers2c8f6532011-09-02 17:16:34 -0700263 reg = X86ManagedRegister::FromCpuRegister(EDI);
264 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
265 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
266 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
267 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
268 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
269 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
270 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
271 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
272 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700273
Ian Rogers2c8f6532011-09-02 17:16:34 -0700274 reg = X86ManagedRegister::FromCpuRegister(EBX);
275 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
276 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
277 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
278 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
279 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
280 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
281 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
282 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
283 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700284
Ian Rogers2c8f6532011-09-02 17:16:34 -0700285 reg = X86ManagedRegister::FromXmmRegister(XMM0);
286 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
287 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
288 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
289 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
290 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
291 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
292 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
293 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
294 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700295
Ian Rogers2c8f6532011-09-02 17:16:34 -0700296 reg = X86ManagedRegister::FromX87Register(ST0);
297 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
298 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
299 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
300 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
301 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
302 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
303 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
304 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
305 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700306
Ian Rogers2c8f6532011-09-02 17:16:34 -0700307 reg = X86ManagedRegister::FromRegisterPair(EAX_EDX);
308 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
309 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
310 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
311 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
312 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
313 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
314 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
315 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
316 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EDX_ECX)));
317 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
Ian Rogersb033c752011-07-20 12:22:35 -0700318
Ian Rogers2c8f6532011-09-02 17:16:34 -0700319 reg = X86ManagedRegister::FromRegisterPair(EBX_EDI);
320 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
321 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
322 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
323 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
324 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
325 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
326 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
327 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
328 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
329 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EDX_EBX)));
Ian Rogersb033c752011-07-20 12:22:35 -0700330
Ian Rogers2c8f6532011-09-02 17:16:34 -0700331 reg = X86ManagedRegister::FromRegisterPair(EDX_ECX);
332 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EAX)));
333 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EBX)));
334 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromCpuRegister(EDI)));
335 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM0)));
336 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromXmmRegister(XMM7)));
337 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST0)));
338 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromX87Register(ST7)));
339 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EAX_EDX)));
340 EXPECT_TRUE(!reg.Overlaps(X86ManagedRegister::FromRegisterPair(EBX_EDI)));
341 EXPECT_TRUE(reg.Overlaps(X86ManagedRegister::FromRegisterPair(EDX_EBX)));
Ian Rogersb033c752011-07-20 12:22:35 -0700342}
343
Ian Rogers2c8f6532011-09-02 17:16:34 -0700344} // namespace x86
Ian Rogersb033c752011-07-20 12:22:35 -0700345} // namespace art