diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2010-05-20 20:20:39 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-20 20:20:39 +0000 |
| commit | 61655aa2bbe9f32e81983c432a40317d520026c0 (patch) | |
| tree | acdb2535020f3439bd0a45cc1bd26770aa919523 /llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | |
| parent | 6d4c66dc1d3a610f2bd51af27c1be89852d73591 (diff) | |
| download | bcm5719-llvm-61655aa2bbe9f32e81983c432a40317d520026c0.tar.gz bcm5719-llvm-61655aa2bbe9f32e81983c432a40317d520026c0.zip | |
X86: Model i64i32imm properly, as a subclass of all immediates.
llvm-svn: 104272
Diffstat (limited to 'llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index e6d546b33e7..479f4e43dfe 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -200,6 +200,20 @@ struct X86Operand : public MCParsedAsmOperand { return true; } + bool isImmSExt32() const { + // Accept immediates which fit in 32 bits when sign extended, and + // non-absolute immediates. + if (!isImm()) + return false; + + if (const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(getImm())) { + int64_t Value = CE->getValue(); + return Value == (int64_t) (int32_t) Value; + } + + return true; + } + bool isMem() const { return Kind == Memory; } bool isAbsMem() const { @@ -237,6 +251,12 @@ struct X86Operand : public MCParsedAsmOperand { addExpr(Inst, getImm()); } + void addImmSExt32Operands(MCInst &Inst, unsigned N) const { + // FIXME: Support user customization of the render method. + assert(N == 1 && "Invalid number of operands!"); + addExpr(Inst, getImm()); + } + void addMemOperands(MCInst &Inst, unsigned N) const { assert((N == 5) && "Invalid number of operands!"); Inst.addOperand(MCOperand::CreateReg(getMemBaseReg())); |

