summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCParser/AsmParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/MCParser/AsmParser.cpp')
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index b0f6a4cd501..1df525d0650 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -5573,8 +5573,6 @@ bool AsmParser::parseMSInlineAsm(
array_pod_sort(AsmStrRewrites.begin(), AsmStrRewrites.end(), rewritesSort);
for (const AsmRewrite &AR : AsmStrRewrites) {
AsmRewriteKind Kind = AR.Kind;
- if (Kind == AOK_Delete)
- continue;
const char *Loc = AR.Loc.getPointer();
assert(Loc >= AsmStart && "Expected Loc to be at or after Start!");
@@ -5594,11 +5592,21 @@ bool AsmParser::parseMSInlineAsm(
switch (Kind) {
default:
break;
- case AOK_Imm:
- OS << "$$" << AR.Val;
- break;
- case AOK_ImmPrefix:
- OS << "$$";
+ case AOK_IntelExpr:
+ assert(AR.IntelExp.isValid() && "cannot write invalid intel expression");
+ if (AR.IntelExp.NeedBracs)
+ OS << "[";
+ if (AR.IntelExp.hasBaseReg())
+ OS << AR.IntelExp.BaseReg;
+ if (AR.IntelExp.hasIndexReg())
+ OS << (AR.IntelExp.hasBaseReg() ? " + " : "")
+ << AR.IntelExp.IndexReg;
+ if (AR.IntelExp.Scale > 1)
+ OS << " * $$" << AR.IntelExp.Scale;
+ if (AR.IntelExp.Imm || !AR.IntelExp.hasRegs())
+ OS << (AR.IntelExp.hasRegs() ? " + $$" : "$$") << AR.IntelExp.Imm;
+ if (AR.IntelExp.NeedBracs)
+ OS << "]";
break;
case AOK_Label:
OS << Ctx.getAsmInfo()->getPrivateLabelPrefix() << AR.Label;
@@ -5642,13 +5650,6 @@ bool AsmParser::parseMSInlineAsm(
case AOK_EVEN:
OS << ".even";
break;
- case AOK_DotOperator:
- // Insert the dot if the user omitted it.
- OS.flush();
- if (AsmStringIR.back() != '.')
- OS << '.';
- OS << AR.Val;
- break;
case AOK_EndOfStatement:
OS << "\n\t";
break;
OpenPOWER on IntegriCloud