summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
diff options
context:
space:
mode:
authorDan Gohman <dan433584@gmail.com>2017-02-24 23:46:05 +0000
committerDan Gohman <dan433584@gmail.com>2017-02-24 23:46:05 +0000
commit82607f56bd25d8c260e6d9cf8267371ea5e410c7 (patch)
tree06d5be4a6612484abe16501586fbb8cf981f48fd /llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
parent8d543e2741c1fac6b002fb87e47dfc0b8ee0c212 (diff)
downloadbcm5719-llvm-82607f56bd25d8c260e6d9cf8267371ea5e410c7.tar.gz
bcm5719-llvm-82607f56bd25d8c260e6d9cf8267371ea5e410c7.zip
[WebAssembly] Add support for using a wasm global for the stack pointer.
This replaces the __stack_pointer variable which was allocated in linear memory. llvm-svn: 296201
Diffstat (limited to 'llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
index c198a262241..5a285935e2b 100644
--- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
+++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp
@@ -84,6 +84,13 @@ void WebAssemblyTargetAsmStreamer::emitLocal(ArrayRef<MVT> Types) {
}
}
+void WebAssemblyTargetAsmStreamer::emitGlobal(ArrayRef<MVT> Types) {
+ if (!Types.empty()) {
+ OS << "\t.globalvar \t";
+ PrintTypes(OS, Types);
+ }
+}
+
void WebAssemblyTargetAsmStreamer::emitEndFunc() { OS << "\t.endfunc\n"; }
void WebAssemblyTargetAsmStreamer::emitIndirectFunctionType(
@@ -124,6 +131,10 @@ void WebAssemblyTargetELFStreamer::emitLocal(ArrayRef<MVT> Types) {
Streamer.EmitIntValue(int64_t(WebAssembly::toValType(Type)), 1);
}
+void WebAssemblyTargetELFStreamer::emitGlobal(ArrayRef<MVT> Types) {
+ llvm_unreachable(".globalvar encoding not yet implemented");
+}
+
void WebAssemblyTargetELFStreamer::emitEndFunc() {
Streamer.EmitIntValue(WebAssembly::End, 1);
}
@@ -185,6 +196,18 @@ void WebAssemblyTargetWasmStreamer::emitLocal(ArrayRef<MVT> Types) {
}
}
+void WebAssemblyTargetWasmStreamer::emitGlobal(ArrayRef<MVT> Types) {
+ // Encode the globals use by the funciton into the special .global_variables
+ // section. This will later be decoded and turned into contents for the
+ // Globals Section.
+ Streamer.PushSection();
+ Streamer.SwitchSection(Streamer.getContext()
+ .getWasmSection(".global_variables", 0, 0));
+ for (MVT Ty : Types)
+ Streamer.EmitIntValue(uint64_t(WebAssembly::toValType(Ty)), 1);
+ Streamer.PopSection();
+}
+
void WebAssemblyTargetWasmStreamer::emitEndFunc() {
llvm_unreachable(".end_func is not needed for direct wasm output");
}
OpenPOWER on IntegriCloud