diff --git a/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.h b/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.h --- a/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.h +++ b/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.h @@ -65,7 +65,7 @@ // void printPCRelImm(const MCInst *MI, uint64_t Address, unsigned opNum, raw_ostream &O) { - printOperand(MI, opNum, O); + printAbsMem(MI, opNum, O); } void printARI8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) { diff --git a/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.cpp b/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.cpp --- a/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.cpp +++ b/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.cpp @@ -192,12 +192,14 @@ void M68kInstPrinter::printAbsMem(const MCInst *MI, unsigned opNum, raw_ostream &O) { const MCOperand &MO = MI->getOperand(opNum); - if (MO.isImm()) { - // ??? Print it in hex? - O << (unsigned int)MO.getImm(); - } else { - printOperand(MI, opNum, O); + + if (MO.isExpr()) { + MO.getExpr()->print(O, &MAI); + return; } + + assert(MO.isImm() && "absolute memory addressing needs an immediate"); + O << format("$%0" PRIx64, (uint64_t)MO.getImm()); } void M68kInstPrinter::printPCDMem(const MCInst *MI, uint64_t Address,