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

Side by Side Diff: src/IceTargetLoweringX8632Traits.h

Issue 1559243002: Suzero. X8664. NaCl Sandboxing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. 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/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 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 427
428 template <typename T> struct __length<T> { 428 template <typename T> struct __length<T> {
429 static constexpr std::size_t value = 1; 429 static constexpr std::size_t value = 1;
430 }; 430 };
431 431
432 const std::size_t Size; 432 const std::size_t Size;
433 }; 433 };
434 434
435 public: 435 public:
436 static void initRegisterSet( 436 static void initRegisterSet(
437 const ::Ice::ClFlags & /*Flags*/,
437 std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet, 438 std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet,
438 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases, 439 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases,
439 llvm::SmallBitVector *ScratchRegs) { 440 llvm::SmallBitVector *ScratchRegs) {
440 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM); 441 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM);
441 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM); 442 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM);
442 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM); 443 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM);
443 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM); 444 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM);
444 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM); 445 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM);
445 llvm::SmallBitVector Trunc64To8Registers(RegisterSet::Reg_NUM); 446 llvm::SmallBitVector Trunc64To8Registers(RegisterSet::Reg_NUM);
446 llvm::SmallBitVector Trunc32To8Registers(RegisterSet::Reg_NUM); 447 llvm::SmallBitVector Trunc32To8Registers(RegisterSet::Reg_NUM);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 (*TypeToRegisterSet)[RC_v4i32] = VectorRegisters; 519 (*TypeToRegisterSet)[RC_v4i32] = VectorRegisters;
519 (*TypeToRegisterSet)[RC_v4f32] = VectorRegisters; 520 (*TypeToRegisterSet)[RC_v4f32] = VectorRegisters;
520 (*TypeToRegisterSet)[RCX86_Is64To8] = Trunc64To8Registers; 521 (*TypeToRegisterSet)[RCX86_Is64To8] = Trunc64To8Registers;
521 (*TypeToRegisterSet)[RCX86_Is32To8] = Trunc32To8Registers; 522 (*TypeToRegisterSet)[RCX86_Is32To8] = Trunc32To8Registers;
522 (*TypeToRegisterSet)[RCX86_Is16To8] = Trunc16To8Registers; 523 (*TypeToRegisterSet)[RCX86_Is16To8] = Trunc16To8Registers;
523 (*TypeToRegisterSet)[RCX86_IsTrunc8Rcvr] = Trunc8RcvrRegisters; 524 (*TypeToRegisterSet)[RCX86_IsTrunc8Rcvr] = Trunc8RcvrRegisters;
524 (*TypeToRegisterSet)[RCX86_IsAhRcvr] = AhRcvrRegisters; 525 (*TypeToRegisterSet)[RCX86_IsAhRcvr] = AhRcvrRegisters;
525 } 526 }
526 527
527 static llvm::SmallBitVector 528 static llvm::SmallBitVector
528 getRegisterSet(TargetLowering::RegSetMask Include, 529 getRegisterSet(const ::Ice::ClFlags & /*Flags*/,
530 TargetLowering::RegSetMask Include,
529 TargetLowering::RegSetMask Exclude) { 531 TargetLowering::RegSetMask Exclude) {
530 llvm::SmallBitVector Registers(RegisterSet::Reg_NUM); 532 llvm::SmallBitVector Registers(RegisterSet::Reg_NUM);
531 533
532 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ 534 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \
533 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ 535 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \
534 isTrunc8Rcvr, isAhRcvr, aliases) \ 536 isTrunc8Rcvr, isAhRcvr, aliases) \
535 if (scratch && (Include & ::Ice::TargetLowering::RegSet_CallerSave)) \ 537 if (scratch && (Include & ::Ice::TargetLowering::RegSet_CallerSave)) \
536 Registers[RegisterSet::val] = true; \ 538 Registers[RegisterSet::val] = true; \
537 if (preserved && (Include & ::Ice::TargetLowering::RegSet_CalleeSave)) \ 539 if (preserved && (Include & ::Ice::TargetLowering::RegSet_CalleeSave)) \
538 Registers[RegisterSet::val] = true; \ 540 Registers[RegisterSet::val] = true; \
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 DefaultSegment = -1, 797 DefaultSegment = -1,
796 #define X(val, name, prefix) val, 798 #define X(val, name, prefix) val,
797 SEG_REGX8632_TABLE 799 SEG_REGX8632_TABLE
798 #undef X 800 #undef X
799 SegReg_NUM 801 SegReg_NUM
800 }; 802 };
801 static X86OperandMem *create(Cfg *Func, Type Ty, Variable *Base, 803 static X86OperandMem *create(Cfg *Func, Type Ty, Variable *Base,
802 Constant *Offset, Variable *Index = nullptr, 804 Constant *Offset, Variable *Index = nullptr,
803 uint16_t Shift = 0, 805 uint16_t Shift = 0,
804 SegmentRegisters SegmentReg = DefaultSegment, 806 SegmentRegisters SegmentReg = DefaultSegment,
805 bool IsPIC = false) { 807 bool IsRebased = false) {
806 return new (Func->allocate<X86OperandMem>()) X86OperandMem( 808 return new (Func->allocate<X86OperandMem>()) X86OperandMem(
807 Func, Ty, Base, Offset, Index, Shift, SegmentReg, IsPIC); 809 Func, Ty, Base, Offset, Index, Shift, SegmentReg, IsRebased);
810 }
811 static X86OperandMem *create(Cfg *Func, Type Ty, Variable *Base,
812 Constant *Offset, bool IsRebased) {
813 constexpr Variable *NoIndex = nullptr;
814 constexpr uint16_t NoShift = 0;
815 return new (Func->allocate<X86OperandMem>()) X86OperandMem(
816 Func, Ty, Base, Offset, NoIndex, NoShift, DefaultSegment, IsRebased);
808 } 817 }
809 Variable *getBase() const { return Base; } 818 Variable *getBase() const { return Base; }
810 Constant *getOffset() const { return Offset; } 819 Constant *getOffset() const { return Offset; }
811 Variable *getIndex() const { return Index; } 820 Variable *getIndex() const { return Index; }
812 uint16_t getShift() const { return Shift; } 821 uint16_t getShift() const { return Shift; }
813 SegmentRegisters getSegmentRegister() const { return SegmentReg; } 822 SegmentRegisters getSegmentRegister() const { return SegmentReg; }
814 void emitSegmentOverride(Assembler *Asm) const; 823 void emitSegmentOverride(Assembler *Asm) const;
815 void setIsPIC() { IsPIC = true; } 824 bool getIsRebased() const { return IsRebased; }
816 bool getIsPIC() const { return IsPIC; } 825 Address toAsmAddress(Assembler *Asm, const Ice::TargetLowering *Target,
817 Address toAsmAddress(Assembler *Asm, 826 bool LeaAddr = false) const;
818 const Ice::TargetLowering *Target) const;
819 827
820 void emit(const Cfg *Func) const override; 828 void emit(const Cfg *Func) const override;
821 using X86Operand::dump; 829 using X86Operand::dump;
822 void dump(const Cfg *Func, Ostream &Str) const override; 830 void dump(const Cfg *Func, Ostream &Str) const override;
823 831
824 static bool classof(const Operand *Operand) { 832 static bool classof(const Operand *Operand) {
825 return Operand->getKind() == static_cast<OperandKind>(kMem); 833 return Operand->getKind() == static_cast<OperandKind>(kMem);
826 } 834 }
827 835
828 void setRandomized(bool R) { Randomized = R; } 836 void setRandomized(bool R) { Randomized = R; }
829 837
830 bool getRandomized() const { return Randomized; } 838 bool getRandomized() const { return Randomized; }
831 839
832 private: 840 private:
833 X86OperandMem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset, 841 X86OperandMem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset,
834 Variable *Index, uint16_t Shift, SegmentRegisters SegmentReg, 842 Variable *Index, uint16_t Shift, SegmentRegisters SegmentReg,
835 bool IsPIC); 843 bool IsRebased);
836 844
837 Variable *Base; 845 Variable *const Base;
838 Constant *Offset; 846 Constant *const Offset;
839 Variable *Index; 847 Variable *const Index;
840 uint16_t Shift; 848 const uint16_t Shift;
841 SegmentRegisters SegmentReg : 16; 849 const SegmentRegisters SegmentReg : 16;
842 bool IsPIC; 850 const bool IsRebased;
843 /// A flag to show if this memory operand is a randomized one. Randomized 851 /// A flag to show if this memory operand is a randomized one. Randomized
844 /// memory operands are generated in 852 /// memory operands are generated in
845 /// TargetX86Base::randomizeOrPoolImmediate() 853 /// TargetX86Base::randomizeOrPoolImmediate()
846 bool Randomized = false; 854 bool Randomized = false;
847 }; 855 };
848 856
849 /// VariableSplit is a way to treat an f64 memory location as a pair of i32 857 /// VariableSplit is a way to treat an f64 memory location as a pair of i32
850 /// locations (Low and High). This is needed for some cases of the Bitcast 858 /// locations (Low and High). This is needed for some cases of the Bitcast
851 /// instruction. Since it's not possible for integer registers to access the 859 /// instruction. Since it's not possible for integer registers to access the
852 /// XMM registers and vice versa, the lowering forces the f64 to be spilled to 860 /// XMM registers and vice versa, the lowering forces the f64 to be spilled to
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 951
944 static uint8_t InstSegmentPrefixes[]; 952 static uint8_t InstSegmentPrefixes[];
945 }; 953 };
946 954
947 using Traits = ::Ice::X8632::TargetX8632Traits; 955 using Traits = ::Ice::X8632::TargetX8632Traits;
948 } // end of namespace X8632 956 } // end of namespace X8632
949 957
950 } // end of namespace Ice 958 } // end of namespace Ice
951 959
952 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H 960 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698