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

Side by Side Diff: src/IceTargetLoweringX8632Traits.h

Issue 1599803002: Subzero: Remove unneeded ScratchRegs. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: More cleanup 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
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | src/IceTargetLoweringX8664.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceTargetLoweringX8632Traits.h - x86-32 traits -*- C++ -*-=// 1 //===- subzero/src/IceTargetLoweringX8632Traits.h - x86-32 traits -*- C++ -*-=//
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 /// 9 ///
10 /// \file 10 /// \file
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 static constexpr std::size_t value = 1; 440 static constexpr std::size_t value = 1;
441 }; 441 };
442 442
443 const std::size_t Size; 443 const std::size_t Size;
444 }; 444 };
445 445
446 public: 446 public:
447 static void initRegisterSet( 447 static void initRegisterSet(
448 const ::Ice::ClFlags & /*Flags*/, 448 const ::Ice::ClFlags & /*Flags*/,
449 std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet, 449 std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet,
450 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases, 450 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases) {
451 llvm::SmallBitVector *ScratchRegs) {
452 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM); 451 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM);
453 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM); 452 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM);
454 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM); 453 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM);
455 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM); 454 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM);
456 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM); 455 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM);
457 llvm::SmallBitVector Trunc64To8Registers(RegisterSet::Reg_NUM); 456 llvm::SmallBitVector Trunc64To8Registers(RegisterSet::Reg_NUM);
458 llvm::SmallBitVector Trunc32To8Registers(RegisterSet::Reg_NUM); 457 llvm::SmallBitVector Trunc32To8Registers(RegisterSet::Reg_NUM);
459 llvm::SmallBitVector Trunc16To8Registers(RegisterSet::Reg_NUM); 458 llvm::SmallBitVector Trunc16To8Registers(RegisterSet::Reg_NUM);
460 llvm::SmallBitVector Trunc8RcvrRegisters(RegisterSet::Reg_NUM); 459 llvm::SmallBitVector Trunc8RcvrRegisters(RegisterSet::Reg_NUM);
461 llvm::SmallBitVector AhRcvrRegisters(RegisterSet::Reg_NUM); 460 llvm::SmallBitVector AhRcvrRegisters(RegisterSet::Reg_NUM);
462 llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM); 461 llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM);
463 ScratchRegs->resize(RegisterSet::Reg_NUM);
464 462
465 static constexpr struct { 463 static constexpr struct {
466 uint16_t Val; 464 uint16_t Val;
467 unsigned Is64 : 1; 465 unsigned Is64 : 1;
468 unsigned Is32 : 1; 466 unsigned Is32 : 1;
469 unsigned Is16 : 1; 467 unsigned Is16 : 1;
470 unsigned Is8 : 1; 468 unsigned Is8 : 1;
471 unsigned IsXmm : 1; 469 unsigned IsXmm : 1;
472 unsigned Is64To8 : 1; 470 unsigned Is64To8 : 1;
473 unsigned Is32To8 : 1; 471 unsigned Is32To8 : 1;
474 unsigned Is16To8 : 1; 472 unsigned Is16To8 : 1;
475 unsigned IsTrunc8Rcvr : 1; 473 unsigned IsTrunc8Rcvr : 1;
476 unsigned IsAhRcvr : 1; 474 unsigned IsAhRcvr : 1;
477 unsigned Scratch : 1;
478 #define NUM_ALIASES_BITS 2 475 #define NUM_ALIASES_BITS 2
479 SizeT NumAliases : (NUM_ALIASES_BITS + 1); 476 SizeT NumAliases : (NUM_ALIASES_BITS + 1);
480 uint16_t Aliases[1 << NUM_ALIASES_BITS]; 477 uint16_t Aliases[1 << NUM_ALIASES_BITS];
481 #undef NUM_ALIASES_BITS 478 #undef NUM_ALIASES_BITS
482 } X8632RegTable[RegisterSet::Reg_NUM] = { 479 } X8632RegTable[RegisterSet::Reg_NUM] = {
483 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ 480 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \
484 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ 481 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \
485 isTrunc8Rcvr, isAhRcvr, aliases) \ 482 isTrunc8Rcvr, isAhRcvr, aliases) \
486 { \ 483 { \
487 RegisterSet::val, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ 484 RegisterSet::val, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \
488 isTrunc8Rcvr, isAhRcvr, scratch, (SizeOf aliases).size(), aliases, \ 485 isTrunc8Rcvr, isAhRcvr, (SizeOf aliases).size(), aliases, \
489 } \ 486 } \
490 , 487 ,
491 REGX8632_TABLE 488 REGX8632_TABLE
492 #undef X 489 #undef X
493 }; 490 };
494 491
495 for (SizeT ii = 0; ii < llvm::array_lengthof(X8632RegTable); ++ii) { 492 for (SizeT ii = 0; ii < llvm::array_lengthof(X8632RegTable); ++ii) {
496 const auto &Entry = X8632RegTable[ii]; 493 const auto &Entry = X8632RegTable[ii];
497 (IntegerRegistersI32)[Entry.Val] = Entry.Is32; 494 (IntegerRegistersI32)[Entry.Val] = Entry.Is32;
498 (IntegerRegistersI16)[Entry.Val] = Entry.Is16; 495 (IntegerRegistersI16)[Entry.Val] = Entry.Is16;
499 (IntegerRegistersI8)[Entry.Val] = Entry.Is8; 496 (IntegerRegistersI8)[Entry.Val] = Entry.Is8;
500 (FloatRegisters)[Entry.Val] = Entry.IsXmm; 497 (FloatRegisters)[Entry.Val] = Entry.IsXmm;
501 (VectorRegisters)[Entry.Val] = Entry.IsXmm; 498 (VectorRegisters)[Entry.Val] = Entry.IsXmm;
502 (Trunc64To8Registers)[Entry.Val] = Entry.Is64To8; 499 (Trunc64To8Registers)[Entry.Val] = Entry.Is64To8;
503 (Trunc32To8Registers)[Entry.Val] = Entry.Is32To8; 500 (Trunc32To8Registers)[Entry.Val] = Entry.Is32To8;
504 (Trunc16To8Registers)[Entry.Val] = Entry.Is16To8; 501 (Trunc16To8Registers)[Entry.Val] = Entry.Is16To8;
505 (Trunc8RcvrRegisters)[Entry.Val] = Entry.IsTrunc8Rcvr; 502 (Trunc8RcvrRegisters)[Entry.Val] = Entry.IsTrunc8Rcvr;
506 (AhRcvrRegisters)[Entry.Val] = Entry.IsAhRcvr; 503 (AhRcvrRegisters)[Entry.Val] = Entry.IsAhRcvr;
507 (*RegisterAliases)[Entry.Val].resize(RegisterSet::Reg_NUM); 504 (*RegisterAliases)[Entry.Val].resize(RegisterSet::Reg_NUM);
508 for (int J = 0; J < Entry.NumAliases; J++) { 505 for (int J = 0; J < Entry.NumAliases; J++) {
509 SizeT Alias = Entry.Aliases[J]; 506 SizeT Alias = Entry.Aliases[J];
510 assert(!(*RegisterAliases)[Entry.Val][Alias] && "Duplicate alias"); 507 assert(!(*RegisterAliases)[Entry.Val][Alias] && "Duplicate alias");
511 (*RegisterAliases)[Entry.Val].set(Alias); 508 (*RegisterAliases)[Entry.Val].set(Alias);
512 } 509 }
513 (*RegisterAliases)[Entry.Val].set(Entry.Val); 510 (*RegisterAliases)[Entry.Val].set(Entry.Val);
514 (*ScratchRegs)[Entry.Val] = Entry.Scratch;
515 } 511 }
516 512
517 (*TypeToRegisterSet)[RC_void] = InvalidRegisters; 513 (*TypeToRegisterSet)[RC_void] = InvalidRegisters;
518 (*TypeToRegisterSet)[RC_i1] = IntegerRegistersI8; 514 (*TypeToRegisterSet)[RC_i1] = IntegerRegistersI8;
519 (*TypeToRegisterSet)[RC_i8] = IntegerRegistersI8; 515 (*TypeToRegisterSet)[RC_i8] = IntegerRegistersI8;
520 (*TypeToRegisterSet)[RC_i16] = IntegerRegistersI16; 516 (*TypeToRegisterSet)[RC_i16] = IntegerRegistersI16;
521 (*TypeToRegisterSet)[RC_i32] = IntegerRegistersI32; 517 (*TypeToRegisterSet)[RC_i32] = IntegerRegistersI32;
522 (*TypeToRegisterSet)[RC_i64] = IntegerRegistersI32; 518 (*TypeToRegisterSet)[RC_i64] = IntegerRegistersI32;
523 (*TypeToRegisterSet)[RC_f32] = FloatRegisters; 519 (*TypeToRegisterSet)[RC_f32] = FloatRegisters;
524 (*TypeToRegisterSet)[RC_f64] = FloatRegisters; 520 (*TypeToRegisterSet)[RC_f64] = FloatRegisters;
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 958
963 static uint8_t InstSegmentPrefixes[]; 959 static uint8_t InstSegmentPrefixes[];
964 }; 960 };
965 961
966 using Traits = ::Ice::X8632::TargetX8632Traits; 962 using Traits = ::Ice::X8632::TargetX8632Traits;
967 } // end of namespace X8632 963 } // end of namespace X8632
968 964
969 } // end of namespace Ice 965 } // end of namespace Ice
970 966
971 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H 967 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H
OLDNEW
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | src/IceTargetLoweringX8664.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698