[llvm-commits] [llvm] r95403 - /llvm/trunk/lib/Target/X86/X86MCCodeEmitter.cpp
Chris Lattner
sabre at nondot.org
Fri Feb 5 11:04:37 PST 2010
Author: lattner
Date: Fri Feb 5 13:04:37 2010
New Revision: 95403
URL: http://llvm.org/viewvc/llvm-project?rev=95403&view=rev
Log:
add some more encodings.
Modified:
llvm/trunk/lib/Target/X86/X86MCCodeEmitter.cpp
Modified: llvm/trunk/lib/Target/X86/X86MCCodeEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MCCodeEmitter.cpp?rev=95403&r1=95402&r2=95403&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86MCCodeEmitter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86MCCodeEmitter.cpp Fri Feb 5 13:04:37 2010
@@ -146,7 +146,7 @@
if (Op3.isImm()) {
DispVal = Op3.getImm();
} else {
- assert(0 && "Unknown operand");
+ assert(0 && "relocatable operand");
#if 0
if (Op3.isGlobal()) {
DispForReloc = &Op3;
@@ -416,6 +416,41 @@
EmitConstant(MI.getOperand(CurOp++).getImm(),
X86InstrInfo::sizeOfImm(&Desc), OS);
break;
+
+ case X86II::MRMSrcReg:
+ EmitByte(BaseOpcode, OS);
+ EmitRegModRMByte(MI.getOperand(CurOp+1), GetX86RegNum(MI.getOperand(CurOp)),
+ OS);
+ CurOp += 2;
+ if (CurOp != NumOps)
+ EmitConstant(MI.getOperand(CurOp++).getImm(),
+ X86InstrInfo::sizeOfImm(&Desc), OS);
+ break;
+
+ case X86II::MRMSrcMem: {
+ EmitByte(BaseOpcode, OS);
+
+ // FIXME: Maybe lea should have its own form? This is a horrible hack.
+ int AddrOperands;
+ if (Opcode == X86::LEA64r || Opcode == X86::LEA64_32r ||
+ Opcode == X86::LEA16r || Opcode == X86::LEA32r)
+ AddrOperands = X86AddrNumOperands - 1; // No segment register
+ else
+ AddrOperands = X86AddrNumOperands;
+
+ // FIXME: What is this actually doing?
+ intptr_t PCAdj = (CurOp + AddrOperands + 1 != NumOps) ?
+ X86InstrInfo::sizeOfImm(&Desc) : 0;
+
+ EmitMemModRMByte(MI, CurOp+1, GetX86RegNum(MI.getOperand(CurOp)),
+ PCAdj, OS);
+ CurOp += AddrOperands + 1;
+ if (CurOp != NumOps)
+ EmitConstant(MI.getOperand(CurOp++).getImm(),
+ X86InstrInfo::sizeOfImm(&Desc), OS);
+ break;
+ }
+
}
#ifndef NDEBUG
More information about the llvm-commits
mailing list