summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCParser/AsmParser.cpp
diff options
context:
space:
mode:
authorCoby Tayree <coby.tayree@intel.com>2017-08-24 08:46:25 +0000
committerCoby Tayree <coby.tayree@intel.com>2017-08-24 08:46:25 +0000
commitd89128925bd56ca314ffb4c895b06e566560c51a (patch)
tree89b1ec364bc4e075f26a2b8ac1d222b70d9cb425 /llvm/lib/MC/MCParser/AsmParser.cpp
parentd664315ae896174b49b1feadea75a26dcfd209f2 (diff)
downloadbcm5719-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.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