diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2008-10-12 10:30:11 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2008-10-12 10:30:11 +0000 |
commit | d21a6305ea758a395435c367e1f561c67b5c6ad1 (patch) | |
tree | b144eb9a696fa8780c071e0820ec900feb18a146 | |
parent | b5cf048fdf42fea53182523ad815181a8af068a0 (diff) |
Update size of inst correctly with segment override.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57414 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86CodeEmitter.cpp | 2 | ||||
-rw-r--r-- | lib/Target/X86/X86InstrInfo.cpp | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/Target/X86/X86CodeEmitter.cpp b/lib/Target/X86/X86CodeEmitter.cpp index ab57e3d018..e08688bae3 100644 --- a/lib/Target/X86/X86CodeEmitter.cpp +++ b/lib/Target/X86/X86CodeEmitter.cpp @@ -420,6 +420,8 @@ void Emitter::emitInstruction(const MachineInstr &MI, case X86II::GS: MCE.emitByte(0x65); break; + default: assert(0 && "Invalid segment!"); + case 0: break; // No segment override! } // Emit the repeat opcode prefix as needed. diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp index 87c866a286..d2e2cf1efc 100644 --- a/lib/Target/X86/X86InstrInfo.cpp +++ b/lib/Target/X86/X86InstrInfo.cpp @@ -2668,6 +2668,16 @@ static unsigned GetInstSizeWithDesc(const MachineInstr &MI, // Emit the lock opcode prefix as needed. if (Desc->TSFlags & X86II::LOCK) ++FinalSize; + // Emit segment overrid opcode prefix as needed. + switch (Desc->TSFlags & X86II::SegOvrMask) { + case X86II::FS: + case X86II::GS: + ++FinalSize; + break; + default: assert(0 && "Invalid segment!"); + case 0: break; // No segment override! + } + // Emit the repeat opcode prefix as needed. if ((Desc->TSFlags & X86II::Op0Mask) == X86II::REP) ++FinalSize; |