aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-02-13 19:16:53 +0000
committerChris Lattner <sabre@nondot.org>2010-02-13 19:16:53 +0000
commit1cea10a66339a412ce02db3d2c4d57a4681571c0 (patch)
treeb39cdcd2ad4e52461235181dd0d71b6fde3db919
parentc09687bb7ea35e0dc9d709460c83a58e6076e4d2 (diff)
teach the encoder to handle pseudo instructions like FP_REG_KILL,
encoding them into nothing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96110 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86MCCodeEmitter.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Target/X86/X86MCCodeEmitter.cpp b/lib/Target/X86/X86MCCodeEmitter.cpp
index 4ac51fc981..d0ec0de691 100644
--- a/lib/Target/X86/X86MCCodeEmitter.cpp
+++ b/lib/Target/X86/X86MCCodeEmitter.cpp
@@ -303,9 +303,9 @@ void X86MCCodeEmitter::EmitMemModRMByte(const MCInst &MI, unsigned Op,
/// size, and 3) use of X86-64 extended registers.
static unsigned DetermineREXPrefix(const MCInst &MI, unsigned TSFlags,
const TargetInstrDesc &Desc) {
- // Pseudo instructions shouldn't get here.
- assert((TSFlags & X86II::FormMask) != X86II::Pseudo &&
- "Can't encode pseudo instrs");
+ // Pseudo instructions never have a rex byte.
+ if ((TSFlags & X86II::FormMask) == X86II::Pseudo)
+ return 0;
unsigned REX = 0;
if (TSFlags & X86II::REX_W)
@@ -506,6 +506,7 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
assert(0 && "FIXME: Remove this form when the JIT moves to MCCodeEmitter!");
default: errs() << "FORM: " << (TSFlags & X86II::FormMask) << "\n";
assert(0 && "Unknown FormMask value in X86MCCodeEmitter!");
+ case X86II::Pseudo: return; // Pseudo instructions encode to nothing.
case X86II::RawFrm:
EmitByte(BaseOpcode, CurByte, OS);
break;