Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 726 /// Value is in bytes. Return Value adjusted to the next highest multiple of | 726 /// Value is in bytes. Return Value adjusted to the next highest multiple of |
| 727 /// the stack alignment. | 727 /// the stack alignment. |
| 728 static uint32_t applyStackAlignment(uint32_t Value) { | 728 static uint32_t applyStackAlignment(uint32_t Value) { |
| 729 return Utils::applyAlignment(Value, X86_STACK_ALIGNMENT_BYTES); | 729 return Utils::applyAlignment(Value, X86_STACK_ALIGNMENT_BYTES); |
| 730 } | 730 } |
| 731 | 731 |
| 732 /// Return the type which the elements of the vector have in the X86 | 732 /// Return the type which the elements of the vector have in the X86 |
| 733 /// representation of the vector. | 733 /// representation of the vector. |
| 734 static Type getInVectorElementType(Type Ty) { | 734 static Type getInVectorElementType(Type Ty) { |
| 735 assert(isVectorType(Ty)); | 735 assert(isVectorType(Ty)); |
| 736 size_t Index = static_cast<size_t>(Ty); | 736 assert(Ty < TableTypeX8632AttributesSize); |
| 737 (void)Index; | |
| 738 assert(Index < TableTypeX8632AttributesSize); | |
| 739 return TableTypeX8632Attributes[Ty].InVectorElementType; | 737 return TableTypeX8632Attributes[Ty].InVectorElementType; |
| 740 } | 738 } |
| 741 | 739 |
| 742 // Note: The following data structures are defined in | 740 // Note: The following data structures are defined in |
| 743 // IceTargetLoweringX8632.cpp. | 741 // IceTargetLoweringX8632.cpp. |
| 744 | 742 |
| 745 /// The following table summarizes the logic for lowering the fcmp | 743 /// The following table summarizes the logic for lowering the fcmp |
| 746 /// instruction. There is one table entry for each of the 16 conditions. | 744 /// instruction. There is one table entry for each of the 16 conditions. |
| 747 /// | 745 /// |
| 748 /// The first four columns describe the case when the operands are floating | 746 /// The first four columns describe the case when the operands are floating |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 783 /// conditional branches are needed. For the other conditions, three separate | 781 /// conditional branches are needed. For the other conditions, three separate |
| 784 /// conditional branches are needed. | 782 /// conditional branches are needed. |
| 785 /// {@ | 783 /// {@ |
| 786 static const struct TableIcmp64Type { | 784 static const struct TableIcmp64Type { |
| 787 Cond::BrCond C1, C2, C3; | 785 Cond::BrCond C1, C2, C3; |
| 788 } TableIcmp64[]; | 786 } TableIcmp64[]; |
| 789 static const size_t TableIcmp64Size; | 787 static const size_t TableIcmp64Size; |
| 790 /// @} | 788 /// @} |
| 791 | 789 |
| 792 static Cond::BrCond getIcmp32Mapping(InstIcmp::ICond Cond) { | 790 static Cond::BrCond getIcmp32Mapping(InstIcmp::ICond Cond) { |
| 793 size_t Index = static_cast<size_t>(Cond); | 791 assert(Cond < TableIcmp32Size); |
| 794 assert(Index < TableIcmp32Size); | 792 return TableIcmp32[Cond].Mapping; |
| 795 return TableIcmp32[Index].Mapping; | |
| 796 } | 793 } |
| 797 | 794 |
| 798 static const struct TableTypeX8632AttributesType { | 795 static const struct TableTypeX8632AttributesType { |
| 799 Type InVectorElementType; | 796 Type InVectorElementType; |
| 800 } TableTypeX8632Attributes[]; | 797 } TableTypeX8632Attributes[]; |
| 801 static const size_t TableTypeX8632AttributesSize; | 798 static const size_t TableTypeX8632AttributesSize; |
| 802 | 799 |
| 803 //---------------------------------------------------------------------------- | 800 //---------------------------------------------------------------------------- |
| 804 // __ __ __ ______ ______ | 801 // __ __ __ ______ ______ |
| 805 // /\ \/\ "-.\ \/\ ___\/\__ _\ | 802 // /\ \/\ "-.\ \/\ ___\/\__ _\ |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 952 /// slot. | 949 /// slot. |
| 953 class SpillVariable : public Variable { | 950 class SpillVariable : public Variable { |
| 954 SpillVariable() = delete; | 951 SpillVariable() = delete; |
| 955 SpillVariable(const SpillVariable &) = delete; | 952 SpillVariable(const SpillVariable &) = delete; |
| 956 SpillVariable &operator=(const SpillVariable &) = delete; | 953 SpillVariable &operator=(const SpillVariable &) = delete; |
| 957 | 954 |
| 958 public: | 955 public: |
| 959 static SpillVariable *create(Cfg *Func, Type Ty, SizeT Index) { | 956 static SpillVariable *create(Cfg *Func, Type Ty, SizeT Index) { |
| 960 return new (Func->allocate<SpillVariable>()) SpillVariable(Ty, Index); | 957 return new (Func->allocate<SpillVariable>()) SpillVariable(Ty, Index); |
| 961 } | 958 } |
| 962 const static OperandKind SpillVariableKind = | 959 const static auto SpillVariableKind = |
|
John
2016/02/07 16:18:33
While at this, constexpr?
Jim Stichnoth
2016/02/07 16:42:42
Done.
| |
| 963 static_cast<OperandKind>(kVariable_Target); | 960 static_cast<OperandKind>(kVariable_Target); |
| 964 static bool classof(const Operand *Operand) { | 961 static bool classof(const Operand *Operand) { |
| 965 return Operand->getKind() == SpillVariableKind; | 962 return Operand->getKind() == SpillVariableKind; |
| 966 } | 963 } |
| 967 void setLinkedTo(Variable *Var) { LinkedTo = Var; } | 964 void setLinkedTo(Variable *Var) { LinkedTo = Var; } |
| 968 Variable *getLinkedTo() const { return LinkedTo; } | 965 Variable *getLinkedTo() const { return LinkedTo; } |
| 969 // Inherit dump() and emit() from Variable. | 966 // Inherit dump() and emit() from Variable. |
| 970 | 967 |
| 971 private: | 968 private: |
| 972 SpillVariable(Type Ty, SizeT Index) | 969 SpillVariable(Type Ty, SizeT Index) |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 1000 | 997 |
| 1001 static uint8_t InstSegmentPrefixes[]; | 998 static uint8_t InstSegmentPrefixes[]; |
| 1002 }; | 999 }; |
| 1003 | 1000 |
| 1004 using Traits = ::Ice::X8632::TargetX8632Traits; | 1001 using Traits = ::Ice::X8632::TargetX8632Traits; |
| 1005 } // end of namespace X8632 | 1002 } // end of namespace X8632 |
| 1006 | 1003 |
| 1007 } // end of namespace Ice | 1004 } // end of namespace Ice |
| 1008 | 1005 |
| 1009 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H | 1006 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H |
| OLD | NEW |