diff options
author | Joerg Sonnenberger <joerg@bec.de> | 2011-02-22 20:40:09 +0000 |
---|---|---|
committer | Joerg Sonnenberger <joerg@bec.de> | 2011-02-22 20:40:09 +0000 |
commit | b7e635dcadf32da924094ad925186f1ceb9e5815 (patch) | |
tree | b3a353a7ab833fbf8f15d475775a2258a904dfc5 /llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | |
parent | a1aec29a2d09edcc8ef487eddef289e7e6842f16 (diff) | |
download | bcm5719-llvm-b7e635dcadf32da924094ad925186f1ceb9e5815.tar.gz bcm5719-llvm-b7e635dcadf32da924094ad925186f1ceb9e5815.zip |
Use the same (%dx) hack for in[bwl] as for out[bwl].
llvm-svn: 126244
Diffstat (limited to 'llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 1cac07a0e10..8fe549ba312 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -775,6 +775,19 @@ ParseInstruction(StringRef Name, SMLoc NameLoc, delete &Op; } } + // Same hack for "in[bwl]? (%dx), %al" -> "inb %dx, %al". + if ((Name == "inb" || Name == "inw" || Name == "inl" || Name == "in") && + Operands.size() == 3) { + X86Operand &Op = *(X86Operand*)Operands.begin()[1]; + if (Op.isMem() && Op.Mem.SegReg == 0 && + isa<MCConstantExpr>(Op.Mem.Disp) && + cast<MCConstantExpr>(Op.Mem.Disp)->getValue() == 0 && + Op.Mem.BaseReg == MatchRegisterName("dx") && Op.Mem.IndexReg == 0) { + SMLoc Loc = Op.getEndLoc(); + Operands.begin()[1] = X86Operand::CreateReg(Op.Mem.BaseReg, Loc, Loc); + delete &Op; + } + } // FIXME: Hack to handle recognize s{hr,ar,hl} $1, <op>. Canonicalize to // "shift <op>". |