diff options
author | Wouter van Oortmerssen <aardappel@gmail.com> | 2019-06-28 22:20:33 +0000 |
---|---|---|
committer | Wouter van Oortmerssen <aardappel@gmail.com> | 2019-06-28 22:20:33 +0000 |
commit | 319c87d94fd5529406adf004bc0d98ecab991fa4 (patch) | |
tree | acb670ec0559d75c20a2c7800f0f888a21801c4c /llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp | |
parent | 35bcba4fae8ae2637589772c3cd7e132de2caee6 (diff) | |
download | llvm-319c87d94fd5529406adf004bc0d98ecab991fa4.zip llvm-319c87d94fd5529406adf004bc0d98ecab991fa4.tar.gz llvm-319c87d94fd5529406adf004bc0d98ecab991fa4.tar.bz2 |
[WebAssembly] Assembler: support .int16/32/64 directives.
Reviewers: sbc100
Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63959
llvm-svn: 364689
Diffstat (limited to 'llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp index c0abd11..e22ed8e 100644 --- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp +++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp @@ -665,13 +665,18 @@ public: return expect(AsmToken::EndOfStatement, "EOL"); } - if (DirectiveID.getString() == ".int8") { + if (DirectiveID.getString() == ".int8" || + DirectiveID.getString() == ".int16" || + DirectiveID.getString() == ".int32" || + DirectiveID.getString() == ".int64") { if (CheckDataSection()) return true; - int64_t V; - if (Parser.parseAbsoluteExpression(V)) - return error("Cannot parse int8 constant: ", Lexer.getTok()); - // TODO: error if value doesn't fit? - Out.EmitIntValue(static_cast<uint64_t>(V), 1); + const MCExpr *Val; + SMLoc End; + if (Parser.parseExpression(Val, End)) + return error("Cannot parse .int expression: ", Lexer.getTok()); + size_t NumBits = 0; + DirectiveID.getString().drop_front(4).getAsInteger(10, NumBits); + Out.EmitValue(Val, NumBits / 8, End); return expect(AsmToken::EndOfStatement, "EOL"); } |