diff options
author | Coby Tayree <coby.tayree@intel.com> | 2017-08-24 08:46:25 +0000 |
---|---|---|
committer | Coby Tayree <coby.tayree@intel.com> | 2017-08-24 08:46:25 +0000 |
commit | d89128925bd56ca314ffb4c895b06e566560c51a (patch) | |
tree | 89b1ec364bc4e075f26a2b8ac1d222b70d9cb425 /llvm/lib/MC/MCParser/AsmParser.cpp | |
parent | d664315ae896174b49b1feadea75a26dcfd209f2 (diff) | |
download | bcm5719-llvm-d89128925bd56ca314ffb4c895b06e566560c51a.tar.gz bcm5719-llvm-d89128925bd56ca314ffb4c895b06e566560c51a.zip |
[X86AsmParser] Refactoring, (almost) NFC.
Some refactoring to X86AsmParser, mostly regarding the way rewrites are conducted.
Mainly, we try to concentrate all the rewrite effort under one hood, so it'll hopefully be less of a mess and easier to maintain and understand.
naturally, some frontend tests were affected: D36794
Differential Revision: https://reviews.llvm.org/D36793
llvm-svn: 311639
Diffstat (limited to 'llvm/lib/MC/MCParser/AsmParser.cpp')
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 29 |
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; |