diff options
author | Dan Gohman <dan433584@gmail.com> | 2017-02-24 23:46:05 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2017-02-24 23:46:05 +0000 |
commit | 82607f56bd25d8c260e6d9cf8267371ea5e410c7 (patch) | |
tree | 06d5be4a6612484abe16501586fbb8cf981f48fd /llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp | |
parent | 8d543e2741c1fac6b002fb87e47dfc0b8ee0c212 (diff) | |
download | bcm5719-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.cpp | 23 |
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"); } |