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

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

Powered by Google App Engine
This is Rietveld 408576698