diff options
| author | Heejin Ahn <aheejin@gmail.com> | 2018-12-11 01:11:04 +0000 |
|---|---|---|
| committer | Heejin Ahn <aheejin@gmail.com> | 2018-12-11 01:11:04 +0000 |
| commit | be5e5874f612adf6c64d06263776ec72349d3f4d (patch) | |
| tree | f22ed0390ab4c12b5d71a64b7572fda198cc8543 /llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp | |
| parent | 6d6ff2e0d720b2b50c7a7566363d45b7706a6433 (diff) | |
| download | bcm5719-llvm-be5e5874f612adf6c64d06263776ec72349d3f4d.tar.gz bcm5719-llvm-be5e5874f612adf6c64d06263776ec72349d3f4d.zip | |
[WebAssembly] Add '.eventtype' directive support
Summary:
This patch supports `.eventtype` directive printing and parsing in the
same syntax with `.functype`.
Reviewers: aardappel, sbc100
Subscribers: dschuff, sbc100, jgravelle-google, sunfish, llvm-commits
Differential Revision: https://reviews.llvm.org/D55353
llvm-svn: 348818
Diffstat (limited to 'llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp index 281c9c0cc69..70ac5027254 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp @@ -61,21 +61,40 @@ void WebAssemblyTargetAsmStreamer::emitLocal(ArrayRef<wasm::ValType> Types) { void WebAssemblyTargetAsmStreamer::emitEndFunc() { OS << "\t.endfunc\n"; } -void WebAssemblyTargetAsmStreamer::emitFunctionType(const MCSymbolWasm *Sym) { - assert(Sym->isFunction()); - OS << "\t.functype\t" << Sym->getName() << " ("; - auto &Params = Sym->getSignature()->Params; +void WebAssemblyTargetAsmStreamer::emitSignature( + const wasm::WasmSignature *Sig) { + OS << "("; + emitParamList(Sig); + OS << ") -> ("; + emitReturnList(Sig); + OS << ")"; +} + +void WebAssemblyTargetAsmStreamer::emitParamList( + const wasm::WasmSignature *Sig) { + auto &Params = Sig->Params; for (auto &Ty : Params) { - if (&Ty != &Params[0]) OS << ", "; + if (&Ty != &Params[0]) + OS << ", "; OS << WebAssembly::TypeToString(Ty); } - OS << ") -> ("; - auto &Returns = Sym->getSignature()->Returns; +} + +void WebAssemblyTargetAsmStreamer::emitReturnList( + const wasm::WasmSignature *Sig) { + auto &Returns = Sig->Returns; for (auto &Ty : Returns) { - if (&Ty != &Returns[0]) OS << ", "; + if (&Ty != &Returns[0]) + OS << ", "; OS << WebAssembly::TypeToString(Ty); } - OS << ")\n"; +} + +void WebAssemblyTargetAsmStreamer::emitFunctionType(const MCSymbolWasm *Sym) { + assert(Sym->isFunction()); + OS << "\t.functype\t" << Sym->getName() << " "; + emitSignature(Sym->getSignature()); + OS << "\n"; } void WebAssemblyTargetAsmStreamer::emitGlobalType(const MCSymbolWasm *Sym) { @@ -88,17 +107,9 @@ void WebAssemblyTargetAsmStreamer::emitGlobalType(const MCSymbolWasm *Sym) { void WebAssemblyTargetAsmStreamer::emitEventType(const MCSymbolWasm *Sym) { assert(Sym->isEvent()); - OS << "\t.eventtype\t" << Sym->getName(); - if (Sym->getSignature()->Returns.empty()) - OS << ", void"; - else { - assert(Sym->getSignature()->Returns.size() == 1); - OS << ", " - << WebAssembly::TypeToString(Sym->getSignature()->Returns.front()); - } - for (auto Ty : Sym->getSignature()->Params) - OS << ", " << WebAssembly::TypeToString(Ty); - OS << '\n'; + OS << "\t.eventtype\t" << Sym->getName() << " "; + emitParamList(Sym->getSignature()); + OS << "\n"; } void WebAssemblyTargetAsmStreamer::emitImportModule(const MCSymbolWasm *Sym, |

