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

Side by Side Diff: src/IceTargetLoweringX8664Traits.h

Issue 1543573002: Subzero. X8664. Fixes filetype=asm. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: git pull Created 4 years, 12 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/IceTargetLoweringX8664.cpp ('k') | src/IceTargetLoweringX86Base.h » ('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/IceTargetLoweringX8664Traits.h - x86-64 traits -*- C++ -*-=// 1 //===- subzero/src/IceTargetLoweringX8664Traits.h - x86-64 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 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 isTrunc8Rcvr, isAhRcvr, aliases) \ 375 isTrunc8Rcvr, isAhRcvr, aliases) \
376 RegisterSet::base, 376 RegisterSet::base,
377 REGX8664_TABLE 377 REGX8664_TABLE
378 #undef X 378 #undef X
379 }; 379 };
380 assert(RegNum >= 0); 380 assert(RegNum >= 0);
381 assert(RegNum < RegisterSet::Reg_NUM); 381 assert(RegNum < RegisterSet::Reg_NUM);
382 return BaseRegs[RegNum]; 382 return BaseRegs[RegNum];
383 } 383 }
384 384
385 static int32_t getGprForType(Type, int32_t RegNum) { return RegNum; } 385 private:
386 static int32_t getFirstGprForType(Type Ty) {
387 switch (Ty) {
388 default:
389 llvm_unreachable("Invalid type for GPR.");
390 case IceType_i1:
391 case IceType_i8:
392 return RegisterSet::Reg_al;
393 case IceType_i16:
394 return RegisterSet::Reg_ax;
395 case IceType_i32:
396 return RegisterSet::Reg_eax;
397 case IceType_i64:
398 return RegisterSet::Reg_rax;
399 }
400 }
401
402 public:
403 static int32_t getGprForType(Type Ty, int32_t RegNum) {
404 assert(RegNum != Variable::NoRegister);
405
406 if (!isScalarIntegerType(Ty)) {
407 return RegNum;
408 }
409
410 assert(Ty == IceType_i1 || Ty == IceType_i8 || Ty == IceType_i16 ||
411 Ty == IceType_i32 || Ty == IceType_i64);
412
413 if (RegNum == RegisterSet::Reg_ah) {
414 assert(Ty == IceType_i8);
415 return RegNum;
416 }
417
418 assert(RegNum != RegisterSet::Reg_bh);
419 assert(RegNum != RegisterSet::Reg_ch);
420 assert(RegNum != RegisterSet::Reg_dh);
421
422 const int32_t FirstGprForType = getFirstGprForType(Ty);
423
424 switch (RegNum) {
425 default:
426 llvm::report_fatal_error("Unknown register.");
427 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \
428 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \
429 isTrunc8Rcvr, isAhRcvr, aliases) \
430 case RegisterSet::val: { \
431 assert(isGPR); \
432 assert((is64) || (is32) || (is16) || (is8) || \
433 getBaseReg(RegisterSet::val) == RegisterSet::Reg_rsp); \
434 constexpr int32_t FirstGprWithRegNumSize = \
435 ((is64) || RegisterSet::val == RegisterSet::Reg_rsp) \
436 ? RegisterSet::Reg_rax \
437 : (((is32) || RegisterSet::val == RegisterSet::Reg_esp) \
438 ? RegisterSet::Reg_eax \
439 : (((is16) || RegisterSet::val == RegisterSet::Reg_sp) \
440 ? RegisterSet::Reg_ax \
441 : RegisterSet::Reg_al)); \
442 const int32_t NewRegNum = \
443 RegNum - FirstGprWithRegNumSize + FirstGprForType; \
444 assert(getBaseReg(RegNum) == getBaseReg(NewRegNum) && \
445 "Error involving " #val); \
446 return NewRegNum; \
447 }
448 REGX8664_TABLE
449 #undef X
450 }
451 }
386 452
387 static void initRegisterSet( 453 static void initRegisterSet(
388 std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet, 454 std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet,
389 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases, 455 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases,
390 llvm::SmallBitVector *ScratchRegs) { 456 llvm::SmallBitVector *ScratchRegs) {
391 llvm::SmallBitVector IntegerRegistersI64(RegisterSet::Reg_NUM); 457 llvm::SmallBitVector IntegerRegistersI64(RegisterSet::Reg_NUM);
392 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM); 458 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM);
393 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM); 459 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM);
394 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM); 460 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM);
395 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM); 461 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM);
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 917
852 } // end of namespace X86Internal 918 } // end of namespace X86Internal
853 919
854 namespace X8664 { 920 namespace X8664 {
855 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8664>; 921 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8664>;
856 } // end of namespace X8664 922 } // end of namespace X8664
857 923
858 } // end of namespace Ice 924 } // end of namespace Ice
859 925
860 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8664TRAITS_H 926 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8664TRAITS_H
OLDNEW
« no previous file with comments | « src/IceTargetLoweringX8664.cpp ('k') | src/IceTargetLoweringX86Base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698