whitespace

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127065 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Trick 2011-03-05 06:31:54 +00:00
parent 58bfcdbcf6
commit 8d4a422513

View File

@ -33,15 +33,15 @@ namespace X86 {
AddrScaleAmt = 1, AddrScaleAmt = 1,
AddrIndexReg = 2, AddrIndexReg = 2,
AddrDisp = 3, AddrDisp = 3,
/// AddrSegmentReg - The operand # of the segment in the memory operand. /// AddrSegmentReg - The operand # of the segment in the memory operand.
AddrSegmentReg = 4, AddrSegmentReg = 4,
/// AddrNumOperands - Total number of operands in a memory reference. /// AddrNumOperands - Total number of operands in a memory reference.
AddrNumOperands = 5 AddrNumOperands = 5
}; };
// X86 specific condition code. These correspond to X86_*_COND in // X86 specific condition code. These correspond to X86_*_COND in
// X86InstrInfo.td. They must be kept in synch. // X86InstrInfo.td. They must be kept in synch.
enum CondCode { enum CondCode {
@ -72,16 +72,16 @@ namespace X86 {
COND_INVALID COND_INVALID
}; };
// Turn condition code into conditional branch opcode. // Turn condition code into conditional branch opcode.
unsigned GetCondBranchFromCond(CondCode CC); unsigned GetCondBranchFromCond(CondCode CC);
/// GetOppositeBranchCondition - Return the inverse of the specified cond, /// GetOppositeBranchCondition - Return the inverse of the specified cond,
/// e.g. turning COND_E to COND_NE. /// e.g. turning COND_E to COND_NE.
CondCode GetOppositeBranchCondition(X86::CondCode CC); CondCode GetOppositeBranchCondition(X86::CondCode CC);
} }
/// X86II - This namespace holds all of the target specific flags that /// X86II - This namespace holds all of the target specific flags that
/// instruction info tracks. /// instruction info tracks.
/// ///
@ -90,14 +90,14 @@ namespace X86II {
enum TOF { enum TOF {
//===------------------------------------------------------------------===// //===------------------------------------------------------------------===//
// X86 Specific MachineOperand flags. // X86 Specific MachineOperand flags.
MO_NO_FLAG, MO_NO_FLAG,
/// MO_GOT_ABSOLUTE_ADDRESS - On a symbol operand, this represents a /// MO_GOT_ABSOLUTE_ADDRESS - On a symbol operand, this represents a
/// relocation of: /// relocation of:
/// SYMBOL_LABEL + [. - PICBASELABEL] /// SYMBOL_LABEL + [. - PICBASELABEL]
MO_GOT_ABSOLUTE_ADDRESS, MO_GOT_ABSOLUTE_ADDRESS,
/// MO_PIC_BASE_OFFSET - On a symbol operand this indicates that the /// MO_PIC_BASE_OFFSET - On a symbol operand this indicates that the
/// immediate should get the value of the symbol minus the PIC base label: /// immediate should get the value of the symbol minus the PIC base label:
/// SYMBOL_LABEL - PICBASELABEL /// SYMBOL_LABEL - PICBASELABEL
@ -106,77 +106,77 @@ namespace X86II {
/// MO_GOT - On a symbol operand this indicates that the immediate is the /// MO_GOT - On a symbol operand this indicates that the immediate is the
/// offset to the GOT entry for the symbol name from the base of the GOT. /// offset to the GOT entry for the symbol name from the base of the GOT.
/// ///
/// See the X86-64 ELF ABI supplement for more details. /// See the X86-64 ELF ABI supplement for more details.
/// SYMBOL_LABEL @GOT /// SYMBOL_LABEL @GOT
MO_GOT, MO_GOT,
/// MO_GOTOFF - On a symbol operand this indicates that the immediate is /// MO_GOTOFF - On a symbol operand this indicates that the immediate is
/// the offset to the location of the symbol name from the base of the GOT. /// the offset to the location of the symbol name from the base of the GOT.
/// ///
/// See the X86-64 ELF ABI supplement for more details. /// See the X86-64 ELF ABI supplement for more details.
/// SYMBOL_LABEL @GOTOFF /// SYMBOL_LABEL @GOTOFF
MO_GOTOFF, MO_GOTOFF,
/// MO_GOTPCREL - On a symbol operand this indicates that the immediate is /// MO_GOTPCREL - On a symbol operand this indicates that the immediate is
/// offset to the GOT entry for the symbol name from the current code /// offset to the GOT entry for the symbol name from the current code
/// location. /// location.
/// ///
/// See the X86-64 ELF ABI supplement for more details. /// See the X86-64 ELF ABI supplement for more details.
/// SYMBOL_LABEL @GOTPCREL /// SYMBOL_LABEL @GOTPCREL
MO_GOTPCREL, MO_GOTPCREL,
/// MO_PLT - On a symbol operand this indicates that the immediate is /// MO_PLT - On a symbol operand this indicates that the immediate is
/// offset to the PLT entry of symbol name from the current code location. /// offset to the PLT entry of symbol name from the current code location.
/// ///
/// See the X86-64 ELF ABI supplement for more details. /// See the X86-64 ELF ABI supplement for more details.
/// SYMBOL_LABEL @PLT /// SYMBOL_LABEL @PLT
MO_PLT, MO_PLT,
/// MO_TLSGD - On a symbol operand this indicates that the immediate is /// MO_TLSGD - On a symbol operand this indicates that the immediate is
/// some TLS offset. /// some TLS offset.
/// ///
/// See 'ELF Handling for Thread-Local Storage' for more details. /// See 'ELF Handling for Thread-Local Storage' for more details.
/// SYMBOL_LABEL @TLSGD /// SYMBOL_LABEL @TLSGD
MO_TLSGD, MO_TLSGD,
/// MO_GOTTPOFF - On a symbol operand this indicates that the immediate is /// MO_GOTTPOFF - On a symbol operand this indicates that the immediate is
/// some TLS offset. /// some TLS offset.
/// ///
/// See 'ELF Handling for Thread-Local Storage' for more details. /// See 'ELF Handling for Thread-Local Storage' for more details.
/// SYMBOL_LABEL @GOTTPOFF /// SYMBOL_LABEL @GOTTPOFF
MO_GOTTPOFF, MO_GOTTPOFF,
/// MO_INDNTPOFF - On a symbol operand this indicates that the immediate is /// MO_INDNTPOFF - On a symbol operand this indicates that the immediate is
/// some TLS offset. /// some TLS offset.
/// ///
/// See 'ELF Handling for Thread-Local Storage' for more details. /// See 'ELF Handling for Thread-Local Storage' for more details.
/// SYMBOL_LABEL @INDNTPOFF /// SYMBOL_LABEL @INDNTPOFF
MO_INDNTPOFF, MO_INDNTPOFF,
/// MO_TPOFF - On a symbol operand this indicates that the immediate is /// MO_TPOFF - On a symbol operand this indicates that the immediate is
/// some TLS offset. /// some TLS offset.
/// ///
/// See 'ELF Handling for Thread-Local Storage' for more details. /// See 'ELF Handling for Thread-Local Storage' for more details.
/// SYMBOL_LABEL @TPOFF /// SYMBOL_LABEL @TPOFF
MO_TPOFF, MO_TPOFF,
/// MO_NTPOFF - On a symbol operand this indicates that the immediate is /// MO_NTPOFF - On a symbol operand this indicates that the immediate is
/// some TLS offset. /// some TLS offset.
/// ///
/// See 'ELF Handling for Thread-Local Storage' for more details. /// See 'ELF Handling for Thread-Local Storage' for more details.
/// SYMBOL_LABEL @NTPOFF /// SYMBOL_LABEL @NTPOFF
MO_NTPOFF, MO_NTPOFF,
/// MO_DLLIMPORT - On a symbol operand "FOO", this indicates that the /// MO_DLLIMPORT - On a symbol operand "FOO", this indicates that the
/// reference is actually to the "__imp_FOO" symbol. This is used for /// reference is actually to the "__imp_FOO" symbol. This is used for
/// dllimport linkage on windows. /// dllimport linkage on windows.
MO_DLLIMPORT, MO_DLLIMPORT,
/// MO_DARWIN_STUB - On a symbol operand "FOO", this indicates that the /// MO_DARWIN_STUB - On a symbol operand "FOO", this indicates that the
/// reference is actually to the "FOO$stub" symbol. This is used for calls /// reference is actually to the "FOO$stub" symbol. This is used for calls
/// and jumps to external functions on Tiger and earlier. /// and jumps to external functions on Tiger and earlier.
MO_DARWIN_STUB, MO_DARWIN_STUB,
/// MO_DARWIN_NONLAZY - On a symbol operand "FOO", this indicates that the /// MO_DARWIN_NONLAZY - On a symbol operand "FOO", this indicates that the
/// reference is actually to the "FOO$non_lazy_ptr" symbol, which is a /// reference is actually to the "FOO$non_lazy_ptr" symbol, which is a
/// non-PIC-base-relative reference to a non-hidden dyld lazy pointer stub. /// non-PIC-base-relative reference to a non-hidden dyld lazy pointer stub.
@ -186,19 +186,19 @@ namespace X86II {
/// that the reference is actually to "FOO$non_lazy_ptr - PICBASE", which is /// that the reference is actually to "FOO$non_lazy_ptr - PICBASE", which is
/// a PIC-base-relative reference to a non-hidden dyld lazy pointer stub. /// a PIC-base-relative reference to a non-hidden dyld lazy pointer stub.
MO_DARWIN_NONLAZY_PIC_BASE, MO_DARWIN_NONLAZY_PIC_BASE,
/// MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE - On a symbol operand "FOO", this /// MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE - On a symbol operand "FOO", this
/// indicates that the reference is actually to "FOO$non_lazy_ptr -PICBASE", /// indicates that the reference is actually to "FOO$non_lazy_ptr -PICBASE",
/// which is a PIC-base-relative reference to a hidden dyld lazy pointer /// which is a PIC-base-relative reference to a hidden dyld lazy pointer
/// stub. /// stub.
MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE, MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE,
/// MO_TLVP - On a symbol operand this indicates that the immediate is /// MO_TLVP - On a symbol operand this indicates that the immediate is
/// some TLS offset. /// some TLS offset.
/// ///
/// This is the TLS offset for the Darwin TLS mechanism. /// This is the TLS offset for the Darwin TLS mechanism.
MO_TLVP, MO_TLVP,
/// MO_TLVP_PIC_BASE - On a symbol operand this indicates that the immediate /// MO_TLVP_PIC_BASE - On a symbol operand this indicates that the immediate
/// is some TLS offset from the picbase. /// is some TLS offset from the picbase.
/// ///
@ -239,7 +239,7 @@ inline static bool isGlobalRelativeToPICBase(unsigned char TargetFlag) {
return false; return false;
} }
} }
/// X86II - This namespace holds all of the target specific flags that /// X86II - This namespace holds all of the target specific flags that
/// instruction info tracks. /// instruction info tracks.
/// ///
@ -299,7 +299,7 @@ namespace X86II {
// MRMInitReg - This form is used for instructions whose source and // MRMInitReg - This form is used for instructions whose source and
// destinations are the same register. // destinations are the same register.
MRMInitReg = 32, MRMInitReg = 32,
//// MRM_C1 - A mod/rm byte of exactly 0xC1. //// MRM_C1 - A mod/rm byte of exactly 0xC1.
MRM_C1 = 33, MRM_C1 = 33,
MRM_C2 = 34, MRM_C2 = 34,
@ -318,7 +318,7 @@ namespace X86II {
/// immediates, the first of which is a 16-bit immediate (specified by /// immediates, the first of which is a 16-bit immediate (specified by
/// the imm encoding) and the second is a 8-bit fixed value. /// the imm encoding) and the second is a 8-bit fixed value.
RawFrmImm8 = 43, RawFrmImm8 = 43,
/// RawFrmImm16 - This is used for CALL FAR instructions, which have two /// RawFrmImm16 - This is used for CALL FAR instructions, which have two
/// immediates, the first of which is a 16 or 32-bit immediate (specified by /// immediates, the first of which is a 16 or 32-bit immediate (specified by
/// the imm encoding) and the second is a 16-bit fixed value. In the AMD /// the imm encoding) and the second is a 16-bit fixed value. In the AMD
@ -370,7 +370,7 @@ namespace X86II {
// T8, TA - Prefix after the 0x0F prefix. // T8, TA - Prefix after the 0x0F prefix.
T8 = 13 << Op0Shift, TA = 14 << Op0Shift, T8 = 13 << Op0Shift, TA = 14 << Op0Shift,
// TF - Prefix before and after 0x0F // TF - Prefix before and after 0x0F
TF = 15 << Op0Shift, TF = 15 << Op0Shift,
@ -473,7 +473,7 @@ namespace X86II {
/// if a VR256 register is used, but some AVX instructions also have this /// if a VR256 register is used, but some AVX instructions also have this
/// field marked when using a f256 memory references. /// field marked when using a f256 memory references.
VEX_L = 1U << 4, VEX_L = 1U << 4,
/// Has3DNow0F0FOpcode - This flag indicates that the instruction uses the /// Has3DNow0F0FOpcode - This flag indicates that the instruction uses the
/// wacky 0x0F 0x0F prefix for 3DNow! instructions. The manual documents /// wacky 0x0F 0x0F prefix for 3DNow! instructions. The manual documents
/// this as having a 0x0F prefix with a 0x0F opcode, and each instruction /// this as having a 0x0F prefix with a 0x0F opcode, and each instruction
@ -482,18 +482,18 @@ namespace X86II {
/// this flag to indicate that the encoder should do the wacky 3DNow! thing. /// this flag to indicate that the encoder should do the wacky 3DNow! thing.
Has3DNow0F0FOpcode = 1U << 5 Has3DNow0F0FOpcode = 1U << 5
}; };
// getBaseOpcodeFor - This function returns the "base" X86 opcode for the // getBaseOpcodeFor - This function returns the "base" X86 opcode for the
// specified machine instruction. // specified machine instruction.
// //
static inline unsigned char getBaseOpcodeFor(uint64_t TSFlags) { static inline unsigned char getBaseOpcodeFor(uint64_t TSFlags) {
return TSFlags >> X86II::OpcodeShift; return TSFlags >> X86II::OpcodeShift;
} }
static inline bool hasImm(uint64_t TSFlags) { static inline bool hasImm(uint64_t TSFlags) {
return (TSFlags & X86II::ImmMask) != 0; return (TSFlags & X86II::ImmMask) != 0;
} }
/// getSizeOfImm - Decode the "size of immediate" field from the TSFlags field /// getSizeOfImm - Decode the "size of immediate" field from the TSFlags field
/// of the specified instruction. /// of the specified instruction.
static inline unsigned getSizeOfImm(uint64_t TSFlags) { static inline unsigned getSizeOfImm(uint64_t TSFlags) {
@ -508,7 +508,7 @@ namespace X86II {
case X86II::Imm64: return 8; case X86II::Imm64: return 8;
} }
} }
/// isImmPCRel - Return true if the immediate of the specified instruction's /// isImmPCRel - Return true if the immediate of the specified instruction's
/// TSFlags indicates that it is pc relative. /// TSFlags indicates that it is pc relative.
static inline unsigned isImmPCRel(uint64_t TSFlags) { static inline unsigned isImmPCRel(uint64_t TSFlags) {
@ -525,7 +525,7 @@ namespace X86II {
return false; return false;
} }
} }
/// getMemoryOperandNo - The function returns the MCInst operand # for the /// getMemoryOperandNo - The function returns the MCInst operand # for the
/// first field of the memory operand. If the instruction doesn't have a /// first field of the memory operand. If the instruction doesn't have a
/// memory operand, this returns -1. /// memory operand, this returns -1.
@ -553,7 +553,7 @@ namespace X86II {
unsigned FirstMemOp = 1; unsigned FirstMemOp = 1;
if (HasVEX_4V) if (HasVEX_4V)
++FirstMemOp;// Skip the register source (which is encoded in VEX_VVVV). ++FirstMemOp;// Skip the register source (which is encoded in VEX_VVVV).
// FIXME: Maybe lea should have its own form? This is a horrible hack. // FIXME: Maybe lea should have its own form? This is a horrible hack.
//if (Opcode == X86::LEA64r || Opcode == X86::LEA64_32r || //if (Opcode == X86::LEA64r || Opcode == X86::LEA64_32r ||
// Opcode == X86::LEA16r || Opcode == X86::LEA32r) // Opcode == X86::LEA16r || Opcode == X86::LEA32r)
@ -613,7 +613,7 @@ inline static bool isMem(const MachineInstr *MI, unsigned Op) {
class X86InstrInfo : public TargetInstrInfoImpl { class X86InstrInfo : public TargetInstrInfoImpl {
X86TargetMachine &TM; X86TargetMachine &TM;
const X86RegisterInfo RI; const X86RegisterInfo RI;
/// RegOp2MemOpTable2Addr, RegOp2MemOpTable0, RegOp2MemOpTable1, /// RegOp2MemOpTable2Addr, RegOp2MemOpTable0, RegOp2MemOpTable1,
/// RegOp2MemOpTable2 - Load / store folding opcode maps. /// RegOp2MemOpTable2 - Load / store folding opcode maps.
/// ///
@ -621,7 +621,7 @@ class X86InstrInfo : public TargetInstrInfoImpl {
DenseMap<unsigned, std::pair<unsigned,unsigned> > RegOp2MemOpTable0; DenseMap<unsigned, std::pair<unsigned,unsigned> > RegOp2MemOpTable0;
DenseMap<unsigned, std::pair<unsigned,unsigned> > RegOp2MemOpTable1; DenseMap<unsigned, std::pair<unsigned,unsigned> > RegOp2MemOpTable1;
DenseMap<unsigned, std::pair<unsigned,unsigned> > RegOp2MemOpTable2; DenseMap<unsigned, std::pair<unsigned,unsigned> > RegOp2MemOpTable2;
/// MemOp2RegOpTable - Load / store unfolding opcode map. /// MemOp2RegOpTable - Load / store unfolding opcode map.
/// ///
DenseMap<unsigned, std::pair<unsigned, unsigned> > MemOp2RegOpTable; DenseMap<unsigned, std::pair<unsigned, unsigned> > MemOp2RegOpTable;
@ -795,7 +795,7 @@ public:
virtual unsigned getOpcodeAfterMemoryUnfold(unsigned Opc, virtual unsigned getOpcodeAfterMemoryUnfold(unsigned Opc,
bool UnfoldLoad, bool UnfoldStore, bool UnfoldLoad, bool UnfoldStore,
unsigned *LoadRegIndex = 0) const; unsigned *LoadRegIndex = 0) const;
/// areLoadsFromSameBasePtr - This is used by the pre-regalloc scheduler /// areLoadsFromSameBasePtr - This is used by the pre-regalloc scheduler
/// to determine if two loads are loading from the same base address. It /// to determine if two loads are loading from the same base address. It
/// should only return true if the base pointers are the same and the /// should only return true if the base pointers are the same and the
@ -829,7 +829,7 @@ public:
return (reg == X86::SPL || reg == X86::BPL || return (reg == X86::SPL || reg == X86::BPL ||
reg == X86::SIL || reg == X86::DIL); reg == X86::SIL || reg == X86::DIL);
} }
static bool isX86_64ExtendedReg(const MachineOperand &MO) { static bool isX86_64ExtendedReg(const MachineOperand &MO) {
if (!MO.isReg()) return false; if (!MO.isReg()) return false;
return isX86_64ExtendedReg(MO.getReg()); return isX86_64ExtendedReg(MO.getReg());
@ -862,7 +862,7 @@ public:
const MachineRegisterInfo *MRI, const MachineRegisterInfo *MRI,
const MachineInstr *DefMI, unsigned DefIdx, const MachineInstr *DefMI, unsigned DefIdx,
const MachineInstr *UseMI, unsigned UseIdx) const; const MachineInstr *UseMI, unsigned UseIdx) const;
private: private:
MachineInstr * convertToThreeAddressWithLEA(unsigned MIOpc, MachineInstr * convertToThreeAddressWithLEA(unsigned MIOpc,
MachineFunction::iterator &MFI, MachineFunction::iterator &MFI,