Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(321)

Side by Side Diff: unittest/AssemblerX8664/Locked.cpp

Issue 1616103002: Subzero. X8664. Enables RIP-based addressing mode. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: make presubmit happy. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- subzero/unittest/AssemblerX8664/Locked.cpp -------------------------===// 1 //===- subzero/unittest/AssemblerX8664/Locked.cpp -------------------------===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 #include "AssemblerX8664/TestUtil.h" 9 #include "AssemblerX8664/TestUtil.h"
10 10
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 #undef TestImplSize 197 #undef TestImplSize
198 #undef TestImplAddrReg 198 #undef TestImplAddrReg
199 } 199 }
200 200
201 TEST_F(AssemblerX8664LowLevelTest, Xadd) { 201 TEST_F(AssemblerX8664LowLevelTest, Xadd) {
202 static constexpr bool NotLocked = false; 202 static constexpr bool NotLocked = false;
203 static constexpr bool Locked = true; 203 static constexpr bool Locked = true;
204 204
205 // Ensures that xadd emits a lock prefix accordingly. 205 // Ensures that xadd emits a lock prefix accordingly.
206 { 206 {
207 __ xadd(IceType_i8, Address(0x1FF00, AssemblerFixup::NoFixup), 207 __ xadd(IceType_i8, Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
208 Encoded_GPR_r14(), NotLocked); 208 Encoded_GPR_r14(), NotLocked);
209 static constexpr uint8_t ByteCountNotLocked8 = 10; 209 static constexpr uint8_t ByteCountNotLocked8 = 9;
210 ASSERT_EQ(ByteCountNotLocked8, codeBytesSize()); 210 ASSERT_EQ(ByteCountNotLocked8, codeBytesSize());
211 ASSERT_TRUE(verifyBytes<ByteCountNotLocked8>(codeBytes(), 0x67, 0x44, 0x0F, 211 ASSERT_TRUE(verifyBytes<ByteCountNotLocked8>(
212 0xC0, 0x34, 0x25, 0x00, 0xFF, 212 codeBytes(), 0x67, 0x44, 0x0F, 0xC0, 0x35, 0x00, 0xFF, 0x01, 0x00));
213 0x01, 0x00));
214 reset(); 213 reset();
215 214
216 __ xadd(IceType_i8, Address(0x1FF00, AssemblerFixup::NoFixup), 215 __ xadd(IceType_i8, Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
217 Encoded_GPR_r14(), Locked); 216 Encoded_GPR_r14(), Locked);
218 static constexpr uint8_t ByteCountLocked8 = 1 + ByteCountNotLocked8; 217 static constexpr uint8_t ByteCountLocked8 = 1 + ByteCountNotLocked8;
219 ASSERT_EQ(ByteCountLocked8, codeBytesSize()); 218 ASSERT_EQ(ByteCountLocked8, codeBytesSize());
220 ASSERT_TRUE(verifyBytes<ByteCountLocked8>(codeBytes(), 0xF0, 0x67, 0x44, 219 ASSERT_TRUE(verifyBytes<ByteCountLocked8>(codeBytes(), 0xF0, 0x67, 0x44,
221 0x0F, 0xC0, 0x34, 0x25, 0x00, 220 0x0F, 0xC0, 0x35, 0x00, 0xFF,
222 0xFF, 0x01, 0x00)); 221 0x01, 0x00));
223 reset(); 222 reset();
224 } 223 }
225 224
226 { 225 {
227 __ xadd(IceType_i16, Address(0x1FF00, AssemblerFixup::NoFixup), 226 __ xadd(IceType_i16, Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
228 Encoded_GPR_r14(), NotLocked); 227 Encoded_GPR_r14(), NotLocked);
229 static constexpr uint8_t ByteCountNotLocked16 = 11; 228 static constexpr uint8_t ByteCountNotLocked16 = 10;
230 ASSERT_EQ(ByteCountNotLocked16, codeBytesSize()); 229 ASSERT_EQ(ByteCountNotLocked16, codeBytesSize());
231 ASSERT_TRUE(verifyBytes<ByteCountNotLocked16>(codeBytes(), 0x66, 0x67, 0x44, 230 ASSERT_TRUE(verifyBytes<ByteCountNotLocked16>(codeBytes(), 0x66, 0x67, 0x44,
232 0x0F, 0xC1, 0x34, 0x25, 0x00, 231 0x0F, 0xC1, 0x35, 0x00, 0xFF,
233 0xFF, 0x01, 0x00)); 232 0x01, 0x00));
234 reset(); 233 reset();
235 234
236 __ xadd(IceType_i16, Address(0x1FF00, AssemblerFixup::NoFixup), 235 __ xadd(IceType_i16, Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
237 Encoded_GPR_r14(), Locked); 236 Encoded_GPR_r14(), Locked);
238 static constexpr uint8_t ByteCountLocked16 = 1 + ByteCountNotLocked16; 237 static constexpr uint8_t ByteCountLocked16 = 1 + ByteCountNotLocked16;
239 ASSERT_EQ(ByteCountLocked16, codeBytesSize()); 238 ASSERT_EQ(ByteCountLocked16, codeBytesSize());
240 ASSERT_TRUE(verifyBytes<ByteCountLocked16>(codeBytes(), 0x66, 0xF0, 0x67, 239 ASSERT_TRUE(verifyBytes<ByteCountLocked16>(codeBytes(), 0x66, 0xF0, 0x67,
241 0x44, 0x0F, 0xC1, 0x34, 0x25, 240 0x44, 0x0F, 0xC1, 0x35, 0x00,
242 0x00, 0xFF, 0x01, 0x00)); 241 0xFF, 0x01, 0x00));
243 reset(); 242 reset();
244 } 243 }
245 244
246 { 245 {
247 __ xadd(IceType_i32, Address(0x1FF00, AssemblerFixup::NoFixup), 246 __ xadd(IceType_i32, Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
248 Encoded_GPR_r14(), NotLocked); 247 Encoded_GPR_r14(), NotLocked);
249 static constexpr uint8_t ByteCountNotLocked32 = 10; 248 static constexpr uint8_t ByteCountNotLocked32 = 9;
250 ASSERT_EQ(ByteCountNotLocked32, codeBytesSize()); 249 ASSERT_EQ(ByteCountNotLocked32, codeBytesSize());
251 ASSERT_TRUE(verifyBytes<ByteCountNotLocked32>(codeBytes(), 0x67, 0x44, 0x0F, 250 ASSERT_TRUE(verifyBytes<ByteCountNotLocked32>(
252 0xC1, 0x34, 0x25, 0x00, 0xFF, 251 codeBytes(), 0x67, 0x44, 0x0F, 0xC1, 0x35, 0x00, 0xFF, 0x01, 0x00));
253 0x01, 0x00));
254 reset(); 252 reset();
255 253
256 __ xadd(IceType_i32, Address(0x1FF00, AssemblerFixup::NoFixup), 254 __ xadd(IceType_i32, Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
257 Encoded_GPR_r14(), Locked); 255 Encoded_GPR_r14(), Locked);
258 static constexpr uint8_t ByteCountLocked32 = 1 + ByteCountNotLocked32; 256 static constexpr uint8_t ByteCountLocked32 = 1 + ByteCountNotLocked32;
259 ASSERT_EQ(ByteCountLocked32, codeBytesSize()); 257 ASSERT_EQ(ByteCountLocked32, codeBytesSize());
260 ASSERT_TRUE(verifyBytes<ByteCountLocked32>(codeBytes(), 0xF0, 0x67, 0x44, 258 ASSERT_TRUE(verifyBytes<ByteCountLocked32>(codeBytes(), 0xF0, 0x67, 0x44,
261 0x0F, 0xC1, 0x34, 0x25, 0x00, 259 0x0F, 0xC1, 0x35, 0x00, 0xFF,
262 0xFF, 0x01, 0x00)); 260 0x01, 0x00));
263 reset(); 261 reset();
264 } 262 }
265 } 263 }
266 264
267 TEST_F(AssemblerX8664LowLevelTest, EmitSegmentOverride) { 265 TEST_F(AssemblerX8664LowLevelTest, EmitSegmentOverride) {
268 #define TestImpl(Prefix) \ 266 #define TestImpl(Prefix) \
269 do { \ 267 do { \
270 static constexpr uint8_t ByteCount = 1; \ 268 static constexpr uint8_t ByteCount = 1; \
271 __ emitSegmentOverride(Prefix); \ 269 __ emitSegmentOverride(Prefix); \
272 ASSERT_EQ(ByteCount, codeBytesSize()) << Prefix; \ 270 ASSERT_EQ(ByteCount, codeBytesSize()) << Prefix; \
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 TestImpl(0x98987676543210ull, 0x1, 0x98987676543211ull, Locked); 328 TestImpl(0x98987676543210ull, 0x1, 0x98987676543211ull, Locked);
331 329
332 #undef TestImpl 330 #undef TestImpl
333 } 331 }
334 332
335 TEST_F(AssemblerX8664LowLevelTest, Cmpxchg8b) { 333 TEST_F(AssemblerX8664LowLevelTest, Cmpxchg8b) {
336 static constexpr bool NotLocked = false; 334 static constexpr bool NotLocked = false;
337 static constexpr bool Locked = true; 335 static constexpr bool Locked = true;
338 336
339 // Ensures that cmpxchg8b emits a lock prefix accordingly. 337 // Ensures that cmpxchg8b emits a lock prefix accordingly.
340 __ cmpxchg8b(Address(0x1FF00, AssemblerFixup::NoFixup), NotLocked); 338 __ cmpxchg8b(Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
341 static constexpr uint8_t ByteCountNotLocked = 9; 339 NotLocked);
340 static constexpr uint8_t ByteCountNotLocked = 8;
342 ASSERT_EQ(ByteCountNotLocked, codeBytesSize()); 341 ASSERT_EQ(ByteCountNotLocked, codeBytesSize());
343 ASSERT_TRUE(verifyBytes<ByteCountNotLocked>( 342 ASSERT_TRUE(verifyBytes<ByteCountNotLocked>(codeBytes(), 0x67, 0x0F, 0xC7,
344 codeBytes(), 0x67, 0x0F, 0xC7, 0x0C, 0x25, 0x00, 0xFF, 0x01, 0x00)); 343 0x0D, 0x00, 0xFF, 0x01, 0x00));
345 reset(); 344 reset();
346 345
347 __ cmpxchg8b(Address(0x1FF00, AssemblerFixup::NoFixup), Locked); 346 __ cmpxchg8b(Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup), Locked);
348 static constexpr uint8_t ByteCountLocked = 1 + ByteCountNotLocked; 347 static constexpr uint8_t ByteCountLocked = 1 + ByteCountNotLocked;
349 ASSERT_EQ(ByteCountLocked, codeBytesSize()); 348 ASSERT_EQ(ByteCountLocked, codeBytesSize());
350 ASSERT_TRUE(verifyBytes<ByteCountLocked>(codeBytes(), 0xF0, 0x67, 0x0F, 0xC7, 349 ASSERT_TRUE(verifyBytes<ByteCountLocked>(codeBytes(), 0xF0, 0x67, 0x0F, 0xC7,
351 0x0C, 0x25, 0x00, 0xFF, 0x01, 0x00)); 350 0x0D, 0x00, 0xFF, 0x01, 0x00));
352 reset(); 351 reset();
353 } 352 }
354 353
355 TEST_F(AssemblerX8664Test, Cmpxchg) { 354 TEST_F(AssemblerX8664Test, Cmpxchg) {
356 static constexpr bool NotLocked = false; 355 static constexpr bool NotLocked = false;
357 static constexpr bool Locked = true; 356 static constexpr bool Locked = true;
358 357
359 static constexpr uint32_t Mask8 = 0x000000FF; 358 static constexpr uint32_t Mask8 = 0x000000FF;
360 static constexpr uint32_t Mask16 = 0x0000FFFF; 359 static constexpr uint32_t Mask16 = 0x0000FFFF;
361 static constexpr uint32_t Mask32 = 0xFFFFFFFF; 360 static constexpr uint32_t Mask32 = 0xFFFFFFFF;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 #undef TestImplValue 436 #undef TestImplValue
438 #undef TestImplAddrReg 437 #undef TestImplAddrReg
439 } 438 }
440 439
441 TEST_F(AssemblerX8664LowLevelTest, Cmpxchg) { 440 TEST_F(AssemblerX8664LowLevelTest, Cmpxchg) {
442 static constexpr bool NotLocked = false; 441 static constexpr bool NotLocked = false;
443 static constexpr bool Locked = true; 442 static constexpr bool Locked = true;
444 443
445 // Ensures that cmpxchg emits a lock prefix accordingly. 444 // Ensures that cmpxchg emits a lock prefix accordingly.
446 { 445 {
447 __ cmpxchg(IceType_i8, Address(0x1FF00, AssemblerFixup::NoFixup), 446 __ cmpxchg(IceType_i8,
447 Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
448 Encoded_GPR_r14(), NotLocked); 448 Encoded_GPR_r14(), NotLocked);
449 static constexpr uint8_t ByteCountNotLocked8 = 10; 449 static constexpr uint8_t ByteCountNotLocked8 = 9;
450 ASSERT_EQ(ByteCountNotLocked8, codeBytesSize()); 450 ASSERT_EQ(ByteCountNotLocked8, codeBytesSize());
451 ASSERT_TRUE(verifyBytes<ByteCountNotLocked8>(codeBytes(), 0x67, 0x44, 0x0F, 451 ASSERT_TRUE(verifyBytes<ByteCountNotLocked8>(
452 0xB0, 0x34, 0x25, 0x00, 0xFF, 452 codeBytes(), 0x67, 0x44, 0x0F, 0xB0, 0x35, 0x00, 0xFF, 0x01, 0x00));
453 0x01, 0x00));
454 reset(); 453 reset();
455 454
456 __ cmpxchg(IceType_i8, Address(0x1FF00, AssemblerFixup::NoFixup), 455 __ cmpxchg(IceType_i8,
456 Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
457 Encoded_GPR_r14(), Locked); 457 Encoded_GPR_r14(), Locked);
458 static constexpr uint8_t ByteCountLocked8 = 1 + ByteCountNotLocked8; 458 static constexpr uint8_t ByteCountLocked8 = 1 + ByteCountNotLocked8;
459 ASSERT_EQ(ByteCountLocked8, codeBytesSize()); 459 ASSERT_EQ(ByteCountLocked8, codeBytesSize());
460 ASSERT_TRUE(verifyBytes<ByteCountLocked8>(codeBytes(), 0xF0, 0x67, 0x44, 460 ASSERT_TRUE(verifyBytes<ByteCountLocked8>(codeBytes(), 0xF0, 0x67, 0x44,
461 0x0F, 0xB0, 0x34, 0x25, 0x00, 461 0x0F, 0xB0, 0x35, 0x00, 0xFF,
462 0xFF, 0x01, 0x00)); 462 0x01, 0x00));
463 reset(); 463 reset();
464 } 464 }
465 465
466 { 466 {
467 __ cmpxchg(IceType_i16, Address(0x1FF00, AssemblerFixup::NoFixup), 467 __ cmpxchg(IceType_i16,
468 Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
468 Encoded_GPR_r14(), NotLocked); 469 Encoded_GPR_r14(), NotLocked);
469 static constexpr uint8_t ByteCountNotLocked16 = 11; 470 static constexpr uint8_t ByteCountNotLocked16 = 10;
470 ASSERT_EQ(ByteCountNotLocked16, codeBytesSize()); 471 ASSERT_EQ(ByteCountNotLocked16, codeBytesSize());
471 ASSERT_TRUE(verifyBytes<ByteCountNotLocked16>(codeBytes(), 0x66, 0x67, 0x44, 472 ASSERT_TRUE(verifyBytes<ByteCountNotLocked16>(codeBytes(), 0x66, 0x67, 0x44,
472 0x0F, 0xB1, 0x34, 0x25, 0x00, 473 0x0F, 0xB1, 0x35, 0x00, 0xFF,
473 0xFF, 0x01, 0x00)); 474 0x01, 0x00));
474 reset(); 475 reset();
475 476
476 __ cmpxchg(IceType_i16, Address(0x1FF00, AssemblerFixup::NoFixup), 477 __ cmpxchg(IceType_i16,
478 Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
477 Encoded_GPR_r14(), Locked); 479 Encoded_GPR_r14(), Locked);
478 static constexpr uint8_t ByteCountLocked16 = 1 + ByteCountNotLocked16; 480 static constexpr uint8_t ByteCountLocked16 = 1 + ByteCountNotLocked16;
479 ASSERT_EQ(ByteCountLocked16, codeBytesSize()); 481 ASSERT_EQ(ByteCountLocked16, codeBytesSize());
480 ASSERT_TRUE(verifyBytes<ByteCountLocked16>(codeBytes(), 0x66, 0xF0, 0x67, 482 ASSERT_TRUE(verifyBytes<ByteCountLocked16>(codeBytes(), 0x66, 0xF0, 0x67,
481 0x44, 0x0F, 0xB1, 0x34, 0x25, 483 0x44, 0x0F, 0xB1, 0x35, 0x00,
482 0x00, 0xFF, 0x01, 0x00)); 484 0xFF, 0x01, 0x00));
483 reset(); 485 reset();
484 } 486 }
485 487
486 { 488 {
487 __ cmpxchg(IceType_i32, Address(0x1FF00, AssemblerFixup::NoFixup), 489 __ cmpxchg(IceType_i32,
490 Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
488 Encoded_GPR_r14(), NotLocked); 491 Encoded_GPR_r14(), NotLocked);
489 static constexpr uint8_t ByteCountNotLocked32 = 10; 492 static constexpr uint8_t ByteCountNotLocked32 = 9;
490 ASSERT_EQ(ByteCountNotLocked32, codeBytesSize()); 493 ASSERT_EQ(ByteCountNotLocked32, codeBytesSize());
491 ASSERT_TRUE(verifyBytes<ByteCountNotLocked32>(codeBytes(), 0x67, 0x44, 0x0F, 494 ASSERT_TRUE(verifyBytes<ByteCountNotLocked32>(
492 0xB1, 0x34, 0x25, 0x00, 0xFF, 495 codeBytes(), 0x67, 0x44, 0x0F, 0xB1, 0x35, 0x00, 0xFF, 0x01, 0x00));
493 0x01, 0x00));
494 reset(); 496 reset();
495 497
496 __ cmpxchg(IceType_i32, Address(0x1FF00, AssemblerFixup::NoFixup), 498 __ cmpxchg(IceType_i32,
499 Address::RipRelative(0x1FF00, AssemblerFixup::NoFixup),
497 Encoded_GPR_r14(), Locked); 500 Encoded_GPR_r14(), Locked);
498 static constexpr uint8_t ByteCountLocked32 = 1 + ByteCountNotLocked32; 501 static constexpr uint8_t ByteCountLocked32 = 1 + ByteCountNotLocked32;
499 ASSERT_EQ(ByteCountLocked32, codeBytesSize()); 502 ASSERT_EQ(ByteCountLocked32, codeBytesSize());
500 ASSERT_TRUE(verifyBytes<ByteCountLocked32>(codeBytes(), 0xF0, 0x67, 0x44, 503 ASSERT_TRUE(verifyBytes<ByteCountLocked32>(codeBytes(), 0xF0, 0x67, 0x44,
501 0x0F, 0xB1, 0x34, 0x25, 0x00, 504 0x0F, 0xB1, 0x35, 0x00, 0xFF,
502 0xFF, 0x01, 0x00)); 505 0x01, 0x00));
503 reset(); 506 reset();
504 } 507 }
505 } 508 }
506 509
507 } // end of anonymous namespace 510 } // end of anonymous namespace
508 } // end of namespace Test 511 } // end of namespace Test
509 } // end of namespace X8664 512 } // end of namespace X8664
510 } // end of namespace Ice 513 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698