switch (MI->getOpcode()) {
case TargetOpcode::COPY:
- OS << "get_local " << regToString(MI->getOperand(1));
- break;
- case WebAssembly::GLOBAL:
- // TODO: wasm64
- OS << "i32.const " << toSymbol(MI->getOperand(1).getGlobal()->getName());
+ OS << "get_local push, " << regToString(MI->getOperand(1));
break;
case WebAssembly::ARGUMENT_I32:
case WebAssembly::ARGUMENT_I64:
case WebAssembly::ARGUMENT_F32:
case WebAssembly::ARGUMENT_F64:
- OS << "get_local " << argToString(MI->getOperand(1));
- break;
- case WebAssembly::Immediate_I32:
- OS << "i32.const " << MI->getOperand(1).getImm();
- break;
- case WebAssembly::Immediate_I64:
- OS << "i64.const " << MI->getOperand(1).getImm();
- break;
- case WebAssembly::Immediate_F32:
- OS << "f32.const " << toString(MI->getOperand(1).getFPImm()->getValueAPF());
- break;
- case WebAssembly::Immediate_F64:
- OS << "f64.const " << toString(MI->getOperand(1).getFPImm()->getValueAPF());
+ OS << "get_local push, " << argToString(MI->getOperand(1));
break;
default: {
OS << OpcodeName(TII, MI);
bool NeedComma = false;
+ bool DefsPushed = false;
+ if (NumDefs != 0 && !MI->isCall()) {
+ OS << " push";
+ NeedComma = true;
+ DefsPushed = true;
+ }
for (const MachineOperand &MO : MI->uses()) {
if (MO.isReg() && MO.isImplicit())
continue;
OS << toSymbol(MO.getMBB()->getSymbol()->getName());
break;
}
+ if (NumDefs != 0 && !DefsPushed) {
+ // Special-case for calls; print the push after the callee.
+ assert(MI->isCall());
+ OS << ", push";
+ DefsPushed = true;
+ }
}
break;
}