X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FWebAssembly%2FWebAssemblyAsmPrinter.cpp;h=e853b76d0dd43183a65e63e0fec732d3d62a9b79;hp=68cfee42802c345df77e70efcd61bbb40956e742;hb=30d7ede265acbae04029375354e6ccb225c99097;hpb=3de3334800cac5947a0ef8a9d1e9be0bafeef401 diff --git a/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index 68cfee42802..e853b76d0dd 100644 --- a/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp @@ -26,6 +26,7 @@ #include "llvm/CodeGen/Analysis.h" #include "llvm/CodeGen/AsmPrinter.h" #include "llvm/CodeGen/MachineConstantPool.h" +#include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/IR/DataLayout.h" #include "llvm/MC/MCContext.h" @@ -181,6 +182,11 @@ void WebAssemblyAsmPrinter::EmitFunctionBodyStart() { Local.addOperand(MCOperand::createImm(getRegType(VReg).SimpleTy)); AnyWARegs = true; } + if (MF->getFrameInfo()->getStackSize() > 0) { + // TODO: wasm64 + Local.addOperand(MCOperand::createImm(MVT::i32)); + AnyWARegs = true; + } if (AnyWARegs) EmitToStreamer(*OutStreamer, Local); @@ -260,7 +266,9 @@ bool WebAssemblyAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, report_fatal_error("There are no defined alternate asm variants"); if (!ExtraCode) { - OS << regToString(MI->getOperand(OpNo)); + // TODO: For now, we just hard-code 0 as the constant offset; teach + // SelectInlineAsmMemoryOperand how to do address mode matching. + OS << "0(" + regToString(MI->getOperand(OpNo)) + ')'; return false; }