summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
-rw-r--r--llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp11
-rw-r--r--llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h8
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp4
3 files changed, 14 insertions, 9 deletions
diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
index c82a64d5824..2437b017688 100644
--- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
+++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
@@ -108,8 +108,8 @@ void WebAssemblyTargetAsmStreamer::emitGlobal(
}
}
-void WebAssemblyTargetAsmStreamer::emitStackPointer(uint32_t Index) {
- OS << "\t.stack_pointer\t" << Index << '\n';
+void WebAssemblyTargetAsmStreamer::emitStackPointer(MCSymbol *Symbol) {
+ OS << "\t.stack_pointer\t" << Symbol->getName() << '\n';
}
void WebAssemblyTargetAsmStreamer::emitEndFunc() { OS << "\t.endfunc\n"; }
@@ -158,7 +158,7 @@ void WebAssemblyTargetELFStreamer::emitGlobal(
}
void WebAssemblyTargetELFStreamer::emitStackPointer(
- uint32_t Index) {
+ MCSymbol *Symbol) {
llvm_unreachable(".stack_pointer encoding not yet implemented");
}
@@ -238,11 +238,11 @@ void WebAssemblyTargetWasmStreamer::emitGlobal(
Streamer.PopSection();
}
-void WebAssemblyTargetWasmStreamer::emitStackPointer(uint32_t Index) {
+void WebAssemblyTargetWasmStreamer::emitStackPointer(MCSymbol *Symbol) {
Streamer.PushSection();
Streamer.SwitchSection(Streamer.getContext().getWasmSection(
".stack_pointer", SectionKind::getMetadata()));
- Streamer.EmitIntValue(Index, 4);
+ Streamer.EmitBytes(Symbol->getName());
Streamer.PopSection();
}
@@ -277,4 +277,5 @@ void WebAssemblyTargetWasmStreamer::emitIndirectFunctionType(
}
void WebAssemblyTargetWasmStreamer::emitGlobalImport(StringRef name) {
+ llvm_unreachable(".global_import is not needed for direct wasm output");
}
diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h
index 102d7219a1e..db908572a58 100644
--- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h
+++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h
@@ -40,7 +40,7 @@ public:
/// .globalvar
virtual void emitGlobal(ArrayRef<wasm::Global> Globals) = 0;
/// .stack_pointer
- virtual void emitStackPointer(uint32_t Index) = 0;
+ virtual void emitStackPointer(MCSymbol *Symbol) = 0;
/// .endfunc
virtual void emitEndFunc() = 0;
/// .functype
@@ -67,7 +67,7 @@ public:
void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
void emitLocal(ArrayRef<MVT> Types) override;
void emitGlobal(ArrayRef<wasm::Global> Globals) override;
- void emitStackPointer(uint32_t Index) override;
+ void emitStackPointer(MCSymbol *Symbol) override;
void emitEndFunc() override;
void emitIndirectFunctionType(MCSymbol *Symbol,
SmallVectorImpl<MVT> &Params,
@@ -85,7 +85,7 @@ public:
void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
void emitLocal(ArrayRef<MVT> Types) override;
void emitGlobal(ArrayRef<wasm::Global> Globals) override;
- void emitStackPointer(uint32_t Index) override;
+ void emitStackPointer(MCSymbol *Symbol) override;
void emitEndFunc() override;
void emitIndirectFunctionType(MCSymbol *Symbol,
SmallVectorImpl<MVT> &Params,
@@ -103,7 +103,7 @@ public:
void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
void emitLocal(ArrayRef<MVT> Types) override;
void emitGlobal(ArrayRef<wasm::Global> Globals) override;
- void emitStackPointer(uint32_t Index) override;
+ void emitStackPointer(MCSymbol *Symbol) override;
void emitEndFunc() override;
void emitIndirectFunctionType(MCSymbol *Symbol,
SmallVectorImpl<MVT> &Params,
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
index 5f7f3d694cd..1d606d49bed 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
@@ -78,6 +78,10 @@ WebAssemblyTargetStreamer *WebAssemblyAsmPrinter::getTargetStreamer() {
//===----------------------------------------------------------------------===//
void WebAssemblyAsmPrinter::EmitEndOfAsmFile(Module &M) {
+ // Declare the stack pointer.
+ getTargetStreamer()->emitStackPointer(
+ GetExternalSymbolSymbol("__stack_pointer"));
+
for (const auto &F : M) {
// Emit function type info for all undefined functions
if (F.isDeclarationForLinker() && !F.isIntrinsic()) {
OpenPOWER on IntegriCloud