diff options
author | Chad Rosier <mcrosier@apple.com> | 2012-10-15 19:08:18 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2012-10-15 19:08:18 +0000 |
commit | 127f5edfd98893d8910a9ae59b10696a824fed24 (patch) | |
tree | e2e8daad8604614ab373b70fe88233c7c141199e | |
parent | 3da6f0392a7d936306c8c6c75e5dd7046b551496 (diff) |
[ms-inline asm] If we parsed a statement and the opcode is valid, then it's an instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165955 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 7 | ||||
-rw-r--r-- | lib/Target/X86/AsmParser/X86AsmParser.cpp | 3 |
2 files changed, 5 insertions, 5 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 0a8053121c..0406ff8d44 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -136,9 +136,6 @@ private: /// ParsingInlineAsm - Are we parsing ms-style inline assembly? bool ParsingInlineAsm; - /// IsInstruction - Was the last parsed statement an instruction? - bool IsInstruction; - /// ParsedOperands - The parsed operands from the last parsed statement. SmallVector<MCParsedAsmOperand*, 8> ParsedOperands; @@ -195,7 +192,7 @@ public: delete ParsedOperands[i]; ParsedOperands.clear(); } - bool isInstruction() { return IsInstruction; } + bool isInstruction() { return Opcode != (unsigned)~0x0; } unsigned getOpcode() { return Opcode; } bool ParseExpression(const MCExpr *&Res); @@ -439,7 +436,7 @@ AsmParser::AsmParser(SourceMgr &_SM, MCContext &_Ctx, GenericParser(new GenericAsmParser), PlatformParser(0), CurBuffer(0), MacrosEnabled(true), CppHashLineNumber(0), AssemblerDialect(~0U), IsDarwin(false), ParsingInlineAsm(false), - IsInstruction(false), Opcode(0) { + Opcode(~0x0) { // Save the old handler. SavedDiagHandler = SrcMgr.getDiagHandler(); SavedDiagContext = SrcMgr.getDiagContext(); diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 683d694909..454664e3ed 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1526,6 +1526,9 @@ MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, assert(Op->isToken() && "Leading operand should always be a mnemonic!"); ArrayRef<SMRange> EmptyRanges = ArrayRef<SMRange>(); + // Clear the opcode. + Opcode = ~0x0; + // First, handle aliases that expand to multiple instructions. // FIXME: This should be replaced with a real .td file alias mechanism. // Also, MatchInstructionImpl should actually *do* the EmitInstruction |