diff options
author | Dan Gohman <dan433584@gmail.com> | 2015-12-16 17:15:17 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2015-12-16 17:15:17 +0000 |
commit | 30a42bf585e3505e4f52ea191be41407ba5861e8 (patch) | |
tree | 859c924ef5c173174c0b4e9c585e216e970bdddb /llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp | |
parent | 279c73f9e05840df50232156d67645fddaaf3158 (diff) | |
download | bcm5719-llvm-30a42bf585e3505e4f52ea191be41407ba5861e8.tar.gz bcm5719-llvm-30a42bf585e3505e4f52ea191be41407ba5861e8.zip |
[WebAssembly] Support more kinds of inline asm operands
llvm-svn: 255782
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index c1403fb0c9e..68cfee42802 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp @@ -219,16 +219,36 @@ bool WebAssemblyAsmPrinter::PrintAsmOperand(const MachineInstr *MI, if (AsmVariant != 0) report_fatal_error("There are no defined alternate asm variants"); + // First try the generic code, which knows about modifiers like 'c' and 'n'. + if (!AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, OS)) + return false; + if (!ExtraCode) { const MachineOperand &MO = MI->getOperand(OpNo); - if (MO.isImm()) + switch (MO.getType()) { + case MachineOperand::MO_Immediate: OS << MO.getImm(); - else + return false; + case MachineOperand::MO_Register: OS << regToString(MO); - return false; + return false; + case MachineOperand::MO_GlobalAddress: + getSymbol(MO.getGlobal())->print(OS, MAI); + printOffset(MO.getOffset(), OS); + return false; + case MachineOperand::MO_ExternalSymbol: + GetExternalSymbolSymbol(MO.getSymbolName())->print(OS, MAI); + printOffset(MO.getOffset(), OS); + return false; + case MachineOperand::MO_MachineBasicBlock: + MO.getMBB()->getSymbol()->print(OS, MAI); + return false; + default: + break; + } } - return AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, OS); + return true; } bool WebAssemblyAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, |