diff --git a/lld/test/ELF/mips-jalr-non-functions.s b/lld/test/ELF/mips-jalr-non-functions.s --- a/lld/test/ELF/mips-jalr-non-functions.s +++ b/lld/test/ELF/mips-jalr-non-functions.s @@ -54,5 +54,5 @@ # CHECK-NEXT: nop # CHECK-NEXT: jr $25 # CHECK-NEXT: nop -# CHECK-NEXT: b 8 +# CHECK-NEXT: b {{.*}} # CHECK-NEXT: nop diff --git a/lld/test/ELF/mips-jalr.s b/lld/test/ELF/mips-jalr.s --- a/lld/test/ELF/mips-jalr.s +++ b/lld/test/ELF/mips-jalr.s @@ -16,19 +16,19 @@ # REL: R_MIPS_JALR {{.*}} far # SO: jalr $25 -# SO: bal -24 +# SO: bal {{.*}} # SO: jalr $25 # SO: jr $25 -# SO: b -64 +# SO: b {{.*}} # SO: jr $25 -# EXE: bal -4 -# EXE: bal -24 +# EXE: bal {{.*}} +# EXE: bal {{.*}} # EXE: jalr $25 -# EXE: b -56 -# EXE: b -64 +# EXE: b {{.*}} +# EXE: b {{.*}} # EXE: jr $25 .text diff --git a/lld/test/ELF/mips-micro-plt.s b/lld/test/ELF/mips-micro-plt.s --- a/lld/test/ELF/mips-micro-plt.s +++ b/lld/test/ELF/mips-micro-plt.s @@ -42,7 +42,7 @@ # ASM-NEXT: addi $8, $8, 801 # # ASM: : -# ASM-NEXT: 20210: jal 131872 +# ASM-NEXT: 20210: jal 0x20320 .text .set micromips diff --git a/lld/test/ELF/mips-micro-relocs.s b/lld/test/ELF/mips-micro-relocs.s --- a/lld/test/ELF/mips-micro-relocs.s +++ b/lld/test/ELF/mips-micro-relocs.s @@ -46,11 +46,11 @@ # ASM-NEXT: addiu $3, $3, 32495 # ASM-NEXT: lw $3, -32744($gp) # ASM-NEXT: lw $3, -32744($3) -# ASM-NEXT: beqz16 $6, -32 +# ASM-NEXT: beqz16 $6, 0x20100 # ASM-NEXT: sll $3, $fp, 0 -# ASM-NEXT: b16 -40 +# ASM-NEXT: b16 0x200fe # ASM-NEXT: nop -# ASM-NEXT: b -44 +# ASM-NEXT: b 0x20100 # ELF: Entry point address: 0x20111 diff --git a/lld/test/ELF/mips-micro-thunks.s b/lld/test/ELF/mips-micro-thunks.s --- a/lld/test/ELF/mips-micro-thunks.s +++ b/lld/test/ELF/mips-micro-thunks.s @@ -42,22 +42,22 @@ # RUN: | FileCheck --check-prefix=R6 %s # R2: <__start>: -# R2-NEXT: 20100: jal 131336 <__microLA25Thunk_foo> +# R2-NEXT: 20100: jal {{.*}} <__microLA25Thunk_foo> # R2-NEXT: nop # R2: <__microLA25Thunk_foo>: # R2-NEXT: 20108: lui $25, 2 -# R2-NEXT: j 131360 +# R2-NEXT: j {{.*}} # R2-NEXT: addiu $25, $25, 289 # R2-NEXT: nop # R6: <__start>: -# R6-NEXT: 20100: balc 0 <__start> +# R6-NEXT: 20100: balc {{.*}} <__start> # R6: <__microLA25Thunk_foo>: # R6-NEXT: 20104: lui $25, 2 # R6-NEXT: addiu $25, $25, 273 -# R6-NEXT: bc 0 <__microLA25Thunk_foo+0x8> +# R6-NEXT: bc {{.*}} <__microLA25Thunk_foo+0x8> .text .set micromips diff --git a/lld/test/ELF/mips-micror6-relocs.s b/lld/test/ELF/mips-micror6-relocs.s --- a/lld/test/ELF/mips-micror6-relocs.s +++ b/lld/test/ELF/mips-micror6-relocs.s @@ -25,8 +25,8 @@ # CHECK: <__start>: # CHECK-NEXT: 20110: lapc $2, -12 -# CHECK-NEXT: beqzc $3, -36 -# CHECK-NEXT: balc -24 +# CHECK-NEXT: beqzc $3, 0x200f0 +# CHECK-NEXT: balc {{.*}} .text .set micromips diff --git a/lld/test/ELF/mips-npic-call-pic-script.s b/lld/test/ELF/mips-npic-call-pic-script.s --- a/lld/test/ELF/mips-npic-call-pic-script.s +++ b/lld/test/ELF/mips-npic-call-pic-script.s @@ -17,13 +17,13 @@ # CHECK-EMPTY: # CHECK-NEXT: <__LA25Thunk_foo1a>: # CHECK-NEXT: 20000: lui $25, 2 -# CHECK-NEXT: 20004: j 131104 +# CHECK-NEXT: 20004: j {{.*}} # CHECK-NEXT: 20008: addiu $25, $25, 32 # CHECK-NEXT: 2000c: nop # CHECK: <__LA25Thunk_foo1b>: # CHECK-NEXT: 20010: lui $25, 2 -# CHECK-NEXT: 20014: j 131108 +# CHECK-NEXT: 20014: j {{.*}} # CHECK-NEXT: 20018: addiu $25, $25, 36 # CHECK-NEXT: 2001c: nop @@ -35,7 +35,7 @@ # CHECK: <__LA25Thunk_foo2>: # CHECK-NEXT: 20028: lui $25, 2 -# CHECK-NEXT: 2002c: j 131136 +# CHECK-NEXT: 2002c: j {{.*}} # CHECK-NEXT: 20030: addiu $25, $25, 64 # CHECK-NEXT: 20034: nop @@ -43,22 +43,22 @@ # CHECK-NEXT: 20040: nop # CHECK: <__start>: -# CHECK-NEXT: 20150: jal 131072 <__LA25Thunk_foo1a> +# CHECK-NEXT: 20150: jal {{.*}} <__LA25Thunk_foo1a> # CHECK-NEXT: 20154: nop -# CHECK-NEXT: 20158: jal 131112 <__LA25Thunk_foo2> +# CHECK-NEXT: 20158: jal {{.*}} <__LA25Thunk_foo2> # CHECK-NEXT: 2015c: nop -# CHECK-NEXT: 20160: jal 131088 <__LA25Thunk_foo1b> +# CHECK-NEXT: 20160: jal {{.*}} <__LA25Thunk_foo1b> # CHECK-NEXT: 20164: nop -# CHECK-NEXT: 20168: jal 131112 <__LA25Thunk_foo2> +# CHECK-NEXT: 20168: jal {{.*}} <__LA25Thunk_foo2> # CHECK-NEXT: 2016c: nop -# CHECK-NEXT: 20170: jal 131456 <__LA25Thunk_fpic> +# CHECK-NEXT: 20170: jal {{.*}} <__LA25Thunk_fpic> # CHECK-NEXT: 20174: nop -# CHECK-NEXT: 20178: jal 131488 +# CHECK-NEXT: 20178: jal {{.*}} # CHECK-NEXT: 2017c: nop # CHECK: <__LA25Thunk_fpic>: # CHECK-NEXT: 20180: lui $25, 2 -# CHECK-NEXT: 20184: j 131472 +# CHECK-NEXT: 20184: j {{.*}} # CHECK-NEXT: 20188: addiu $25, $25, 400 # CHECK-NEXT: 2018c: nop @@ -87,22 +87,22 @@ # ORPH1: Disassembly of section .text: # ORPH1-EMPTY: # ORPH1-NEXT: <__start>: -# ORPH1-NEXT: 20000: jal 131168 <__LA25Thunk_foo1a> +# ORPH1-NEXT: 20000: jal {{.*}} <__LA25Thunk_foo1a> # ORPH1-NEXT: 20004: nop -# ORPH1-NEXT: 20008: jal 131216 <__LA25Thunk_foo2> +# ORPH1-NEXT: 20008: jal {{.*}} <__LA25Thunk_foo2> # ORPH1-NEXT: 2000c: nop -# ORPH1-NEXT: 20010: jal 131184 <__LA25Thunk_foo1b> +# ORPH1-NEXT: 20010: jal {{.*}} <__LA25Thunk_foo1b> # ORPH1-NEXT: 20014: nop -# ORPH1-NEXT: 20018: jal 131216 <__LA25Thunk_foo2> +# ORPH1-NEXT: 20018: jal {{.*}} <__LA25Thunk_foo2> # ORPH1-NEXT: 2001c: nop -# ORPH1-NEXT: 20020: jal 131120 <__LA25Thunk_fpic> +# ORPH1-NEXT: 20020: jal {{.*}} <__LA25Thunk_fpic> # ORPH1-NEXT: 20024: nop -# ORPH1-NEXT: 20028: jal 131152 +# ORPH1-NEXT: 20028: jal {{.*}} # ORPH1-NEXT: 2002c: nop # ORPH1: <__LA25Thunk_fpic>: # ORPH1-NEXT: 20030: lui $25, 2 -# ORPH1-NEXT: 20034: j 131136 +# ORPH1-NEXT: 20034: j {{.*}} # ORPH1-NEXT: 20038: addiu $25, $25, 64 # ORPH1-NEXT: 2003c: nop @@ -114,13 +114,13 @@ # ORPH1: <__LA25Thunk_foo1a>: # ORPH1-NEXT: 20060: lui $25, 2 -# ORPH1-NEXT: j 131200 +# ORPH1-NEXT: j {{.*}} # ORPH1-NEXT: addiu $25, $25, 128 # ORPH1-NEXT: nop # ORPH1: <__LA25Thunk_foo1b>: # ORPH1-NEXT: 20070: lui $25, 2 -# ORPH1-NEXT: j 131204 +# ORPH1-NEXT: j {{.*}} # ORPH1-NEXT: addiu $25, $25, 132 # ORPH1-NEXT: nop @@ -132,7 +132,7 @@ # ORPH1: <__LA25Thunk_foo2>: # ORPH1-NEXT: 20090: lui $25, 2 -# ORPH1-NEXT: j 131232 +# ORPH1-NEXT: j {{.*}} # ORPH1-NEXT: addiu $25, $25, 160 # ORPH1-NEXT: nop @@ -148,22 +148,22 @@ # ORPH2: Disassembly of section .out: # ORPH2-EMPTY: # ORPH2-NEXT: <__start>: -# ORPH2-NEXT: 20000: jal 131168 <__LA25Thunk_foo1a> +# ORPH2-NEXT: 20000: jal {{.*}} <__LA25Thunk_foo1a> # ORPH2-NEXT: 20004: nop -# ORPH2-NEXT: 20008: jal 131208 <__LA25Thunk_foo2> +# ORPH2-NEXT: 20008: jal {{.*}} <__LA25Thunk_foo2> # ORPH2-NEXT: 2000c: nop -# ORPH2-NEXT: 20010: jal 131184 <__LA25Thunk_foo1b> +# ORPH2-NEXT: 20010: jal {{.*}} <__LA25Thunk_foo1b> # ORPH2-NEXT: 20014: nop -# ORPH2-NEXT: 20018: jal 131208 <__LA25Thunk_foo2> +# ORPH2-NEXT: 20018: jal {{.*}} <__LA25Thunk_foo2> # ORPH2-NEXT: 2001c: nop -# ORPH2-NEXT: 20020: jal 131120 <__LA25Thunk_fpic> +# ORPH2-NEXT: 20020: jal {{.*}} <__LA25Thunk_fpic> # ORPH2-NEXT: 20024: nop -# ORPH2-NEXT: 20028: jal 131152 +# ORPH2-NEXT: 20028: jal {{.*}} # ORPH2-NEXT: 2002c: nop # ORPH2: <__LA25Thunk_fpic>: # ORPH2-NEXT: 20030: lui $25, 2 -# ORPH2-NEXT: 20034: j 131136 +# ORPH2-NEXT: 20034: j {{.*}} # ORPH2-NEXT: 20038: addiu $25, $25, 64 # ORPH2-NEXT: 2003c: nop @@ -178,13 +178,13 @@ # ORPH2-NEXT: <__LA25Thunk_foo1a>: # ORPH2-NEXT: 20060: lui $25, 2 -# ORPH2-NEXT: 20064: j 131200 +# ORPH2-NEXT: 20064: j {{.*}} # ORPH2-NEXT: 20068: addiu $25, $25, 128 # ORPH2-NEXT: 2006c: nop # ORPH2: <__LA25Thunk_foo1b>: # ORPH2-NEXT: 20070: lui $25, 2 -# ORPH2-NEXT: 20074: j 131204 +# ORPH2-NEXT: 20074: j {{.*}} # ORPH2-NEXT: 20078: addiu $25, $25, 132 # ORPH2-NEXT: 2007c: nop @@ -196,7 +196,7 @@ # ORPH2: <__LA25Thunk_foo2>: # ORPH2-NEXT: 20088: lui $25, 2 -# ORPH2-NEXT: 2008c: j 131232 +# ORPH2-NEXT: 2008c: j {{.*}} # ORPH2-NEXT: 20090: addiu $25, $25, 160 # ORPH2-NEXT: 20094: nop diff --git a/lld/test/ELF/mips-npic-call-pic.s b/lld/test/ELF/mips-npic-call-pic.s --- a/lld/test/ELF/mips-npic-call-pic.s +++ b/lld/test/ELF/mips-npic-call-pic.s @@ -37,23 +37,23 @@ # CHECK: Disassembly of section .text: # CHECK-EMPTY: # CHECK-NEXT: <__start>: -# CHECK-NEXT: 20100: jal 131412 <__LA25Thunk_foo1a> +# CHECK-NEXT: 20100: jal {{.*}} <__LA25Thunk_foo1a> # CHECK-NEXT: nop -# CHECK-NEXT: jal 131464 <__LA25Thunk_foo2> +# CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo2> # CHECK-NEXT: nop -# CHECK-NEXT: jal 131428 <__LA25Thunk_foo1b> +# CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo1b> # CHECK-NEXT: nop -# CHECK-NEXT: jal 131464 <__LA25Thunk_foo2> +# CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo2> # CHECK-NEXT: nop -# CHECK-NEXT: jal 131376 <__LA25Thunk_fpic> +# CHECK-NEXT: jal {{.*}} <__LA25Thunk_fpic> # CHECK-NEXT: nop -# CHECK-NEXT: jal 131408 +# CHECK-NEXT: jal {{.*}} # CHECK-NEXT: nop # CHECK: <__LA25Thunk_fpic>: # R2: 20130: lui $25, 2 # R6: 20130: aui $25, $zero, 2 -# CHECK-NEXT: j 131392 +# CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, 320 # CHECK-NEXT: nop @@ -66,14 +66,14 @@ # CHECK: <__LA25Thunk_foo1a>: # R2: 20154: lui $25, 2 # R6: 20154: aui $25, $zero, 2 -# CHECK: j 131456 +# CHECK: j {{.*}} # CHECK-NEXT: addiu $25, $25, 384 # CHECK-NEXT: nop # CHECK: <__LA25Thunk_foo1b>: # R2: 20164: lui $25, 2 # R6: aui $25, $zero, 2 -# CHECK-NEXT: j 131460 +# CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, 388 # CHECK-NEXT: nop @@ -86,7 +86,7 @@ # CHECK: <__LA25Thunk_foo2>: # R2: 20188: lui $25, 2 # R6: aui $25, $zero, 2 -# CHECK-NEXT: j 131488 +# CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, 416 # CHECK-NEXT: nop diff --git a/lld/test/ELF/mips-pc-relocs.s b/lld/test/ELF/mips-pc-relocs.s --- a/lld/test/ELF/mips-pc-relocs.s +++ b/lld/test/ELF/mips-pc-relocs.s @@ -38,11 +38,11 @@ # CHECK-NEXT: <__start>: # CHECK-NEXT: 20000: lwpc $6, 32 # ^-- (0x20020-0x20000)>>2 -# CHECK-NEXT: 20004: beqc $5, $6, 28 +# CHECK-NEXT: 20004: beqc $5, $6, 0x20020 # ^-- (0x20020-4-0x20004)>>2 -# CHECK-NEXT: 20008: beqzc $9, 24 +# CHECK-NEXT: 20008: beqzc $9, 0x20020 # ^-- (0x20020-4-0x20008)>>2 -# CHECK-NEXT: 2000c: bc 20 +# CHECK-NEXT: 2000c: bc 0x20020 # ^-- (0x20020-4-0x2000c)>>2 # CHECK-NEXT: 20010: aluipc $2, 0 # ^-- %hi(0x20020-0x20010) diff --git a/lld/test/ELF/mips-plt-n32.s b/lld/test/ELF/mips-plt-n32.s --- a/lld/test/ELF/mips-plt-n32.s +++ b/lld/test/ELF/mips-plt-n32.s @@ -23,7 +23,7 @@ # CHECK: Disassembly of section .text: # CHECK-EMPTY: # CHECK-NEXT: <__start>: -# CHECK-NEXT: 20000: jal 131120 +# CHECK-NEXT: 20000: jal 0x20030 # ^-- 0x20030 gotplt[foo0] # CHECK-NEXT: 20004: nop # diff --git a/lld/test/ELF/mips-plt-n64.s b/lld/test/ELF/mips-plt-n64.s --- a/lld/test/ELF/mips-plt-n64.s +++ b/lld/test/ELF/mips-plt-n64.s @@ -21,7 +21,7 @@ # CHECK: Disassembly of section .text: # CHECK-EMPTY: # CHECK-NEXT: <__start>: -# CHECK-NEXT: 20000: jal 131120 +# CHECK-NEXT: 20000: jal 0x20030 # CHECK-NEXT: 20004: nop # CHECK-EMPTY: # CHECK-NEXT: Disassembly of section .plt: diff --git a/lld/test/ELF/mips-plt-r6.s b/lld/test/ELF/mips-plt-r6.s --- a/lld/test/ELF/mips-plt-r6.s +++ b/lld/test/ELF/mips-plt-r6.s @@ -20,7 +20,7 @@ # CHECK: Disassembly of section .text: # CHECK-EMPTY: # CHECK-NEXT: <__start>: -# CHECK-NEXT: 20000: jal 131120 +# CHECK-NEXT: 20000: jal 0x20030 # ^-- 0x20030 gotplt[foo0] # CHECK-NEXT: 20004: nop # diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.h b/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.h --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.h +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.h @@ -80,38 +80,50 @@ // Autogenerated by tblgen. std::pair getMnemonic(const MCInst *MI) override; - void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); + void printInstruction(const MCInst *MI, uint64_t Address, + const MCSubtargetInfo &STI, raw_ostream &O); static const char *getRegisterName(unsigned RegNo); void printRegName(raw_ostream &OS, unsigned RegNo) const override; void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, const MCSubtargetInfo &STI, raw_ostream &O) override; - bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS); + bool printAliasInstr(const MCInst *MI, uint64_t Address, + const MCSubtargetInfo &STI, raw_ostream &OS); void printCustomAliasOperand(const MCInst *MI, uint64_t Address, unsigned OpIdx, unsigned PrintMethodIdx, - raw_ostream &O); + const MCSubtargetInfo &STI, raw_ostream &O); private: - void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); - void printOperand(const MCInst *MI, uint64_t /*Address*/, unsigned OpNum, - raw_ostream &O) { - printOperand(MI, OpNum, O); - } + void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, + raw_ostream &O); + void printJumpOperand(const MCInst *MI, unsigned OpNo, + const MCSubtargetInfo &STI, raw_ostream &O); + void printBranchOperand(const MCInst *MI, uint64_t Address, unsigned OpNo, + const MCSubtargetInfo &STI, raw_ostream &O); template - void printUImm(const MCInst *MI, int opNum, raw_ostream &O); - void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); - void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); - void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); + void printUImm(const MCInst *MI, int opNum, const MCSubtargetInfo &STI, + raw_ostream &O); + void printMemOperand(const MCInst *MI, int opNum, const MCSubtargetInfo &STI, + raw_ostream &O); + void printMemOperandEA(const MCInst *MI, int opNum, + const MCSubtargetInfo &STI, raw_ostream &O); + void printFCCOperand(const MCInst *MI, int opNum, const MCSubtargetInfo &STI, + raw_ostream &O); void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O); - bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo, - raw_ostream &OS); - bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0, - unsigned OpNo1, raw_ostream &OS); - bool printAlias(const MCInst &MI, raw_ostream &OS); - void printSaveRestore(const MCInst *MI, raw_ostream &O); - void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O); + bool printAlias(const char *Str, const MCInst &MI, uint64_t Address, + unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &OS, + bool IsBranch = false); + bool printAlias(const char *Str, const MCInst &MI, uint64_t Address, + unsigned OpNo0, unsigned OpNo1, const MCSubtargetInfo &STI, + raw_ostream &OS, bool IsBranch = false); + bool printAlias(const MCInst &MI, uint64_t Address, + const MCSubtargetInfo &STI, raw_ostream &OS); + void printSaveRestore(const MCInst *MI, const MCSubtargetInfo &STI, + raw_ostream &O); + void printRegisterList(const MCInst *MI, int opNum, + const MCSubtargetInfo &STI, raw_ostream &O); }; } // end namespace llvm diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.cpp --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.cpp @@ -88,29 +88,30 @@ break; case Mips::Save16: O << "\tsave\t"; - printSaveRestore(MI, O); + printSaveRestore(MI, STI, O); O << " # 16 bit inst\n"; return; case Mips::SaveX16: O << "\tsave\t"; - printSaveRestore(MI, O); + printSaveRestore(MI, STI, O); O << "\n"; return; case Mips::Restore16: O << "\trestore\t"; - printSaveRestore(MI, O); + printSaveRestore(MI, STI, O); O << " # 16 bit inst\n"; return; case Mips::RestoreX16: O << "\trestore\t"; - printSaveRestore(MI, O); + printSaveRestore(MI, STI, O); O << "\n"; return; } // Try to print any aliases first. - if (!printAliasInstr(MI, Address, O) && !printAlias(*MI, O)) - printInstruction(MI, Address, O); + if (!printAliasInstr(MI, Address, STI, O) && + !printAlias(*MI, Address, STI, O)) + printInstruction(MI, Address, STI, O); printAnnotation(O, Annot); switch (MI->getOpcode()) { @@ -123,7 +124,7 @@ } void MipsInstPrinter::printOperand(const MCInst *MI, unsigned OpNo, - raw_ostream &O) { + const MCSubtargetInfo &STI, raw_ostream &O) { const MCOperand &Op = MI->getOperand(OpNo); if (Op.isReg()) { printRegName(O, Op.getReg()); @@ -139,8 +140,42 @@ Op.getExpr()->print(O, &MAI, true); } +void MipsInstPrinter::printJumpOperand(const MCInst *MI, unsigned OpNo, + const MCSubtargetInfo &STI, + raw_ostream &O) { + const MCOperand &Op = MI->getOperand(OpNo); + if (!Op.isImm()) + return printOperand(MI, OpNo, STI, O); + + if (PrintBranchImmAsAddress) + O << formatHex(Op.getImm()); + else + O << formatImm(Op.getImm()); +} + +void MipsInstPrinter::printBranchOperand(const MCInst *MI, uint64_t Address, + unsigned OpNo, + const MCSubtargetInfo &STI, + raw_ostream &O) { + const MCOperand &Op = MI->getOperand(OpNo); + if (!Op.isImm()) + return printOperand(MI, OpNo, STI, O); + + if (PrintBranchImmAsAddress) { + uint64_t Target = Address + Op.getImm(); + if (STI.hasFeature(Mips::FeatureMips32)) + Target &= 0xffffffff; + else if (STI.hasFeature(Mips::FeatureMips16)) + Target &= 0xffff; + O << formatHex(Target); + } else { + O << formatImm(Op.getImm()); + } +} + template -void MipsInstPrinter::printUImm(const MCInst *MI, int opNum, raw_ostream &O) { +void MipsInstPrinter::printUImm(const MCInst *MI, int opNum, + const MCSubtargetInfo &STI, raw_ostream &O) { const MCOperand &MO = MI->getOperand(opNum); if (MO.isImm()) { uint64_t Imm = MO.getImm(); @@ -151,11 +186,12 @@ return; } - printOperand(MI, opNum, O); + printOperand(MI, opNum, STI, O); } -void MipsInstPrinter:: -printMemOperand(const MCInst *MI, int opNum, raw_ostream &O) { +void MipsInstPrinter::printMemOperand(const MCInst *MI, int opNum, + const MCSubtargetInfo &STI, + raw_ostream &O) { // Load/Store memory operands -- imm($reg) // If PIC target the target is loaded as the // pattern lw $25,%call16($28) @@ -175,24 +211,26 @@ break; } - printOperand(MI, opNum+1, O); + printOperand(MI, opNum + 1, STI, O); O << "("; - printOperand(MI, opNum, O); + printOperand(MI, opNum, STI, O); O << ")"; } -void MipsInstPrinter:: -printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O) { +void MipsInstPrinter::printMemOperandEA(const MCInst *MI, int opNum, + const MCSubtargetInfo &STI, + raw_ostream &O) { // when using stack locations for not load/store instructions // print the same way as all normal 3 operand instructions. - printOperand(MI, opNum, O); + printOperand(MI, opNum, STI, O); O << ", "; - printOperand(MI, opNum+1, O); + printOperand(MI, opNum + 1, STI, O); } -void MipsInstPrinter:: -printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O) { - const MCOperand& MO = MI->getOperand(opNum); +void MipsInstPrinter::printFCCOperand(const MCInst *MI, int opNum, + const MCSubtargetInfo & /* STI */, + raw_ostream &O) { + const MCOperand &MO = MI->getOperand(opNum); O << MipsFCCToString((Mips::CondCode)MO.getImm()); } @@ -202,82 +240,116 @@ } bool MipsInstPrinter::printAlias(const char *Str, const MCInst &MI, - unsigned OpNo, raw_ostream &OS) { + uint64_t Address, unsigned OpNo, + const MCSubtargetInfo &STI, raw_ostream &OS, + bool IsBranch) { OS << "\t" << Str << "\t"; - printOperand(&MI, OpNo, OS); + if (IsBranch) + printBranchOperand(&MI, Address, OpNo, STI, OS); + else + printOperand(&MI, OpNo, STI, OS); return true; } bool MipsInstPrinter::printAlias(const char *Str, const MCInst &MI, - unsigned OpNo0, unsigned OpNo1, - raw_ostream &OS) { - printAlias(Str, MI, OpNo0, OS); + uint64_t Address, unsigned OpNo0, + unsigned OpNo1, const MCSubtargetInfo &STI, + raw_ostream &OS, bool IsBranch) { + printAlias(Str, MI, Address, OpNo0, STI, OS, IsBranch); OS << ", "; - printOperand(&MI, OpNo1, OS); + if (IsBranch) + printBranchOperand(&MI, Address, OpNo1, STI, OS); + else + printOperand(&MI, OpNo1, STI, OS); return true; } -bool MipsInstPrinter::printAlias(const MCInst &MI, raw_ostream &OS) { +bool MipsInstPrinter::printAlias(const MCInst &MI, uint64_t Address, + const MCSubtargetInfo &STI, raw_ostream &OS) { switch (MI.getOpcode()) { case Mips::BEQ: case Mips::BEQ_MM: // beq $zero, $zero, $L2 => b $L2 // beq $r0, $zero, $L2 => beqz $r0, $L2 return (isReg(MI, 0) && isReg(MI, 1) && - printAlias("b", MI, 2, OS)) || - (isReg(MI, 1) && printAlias("beqz", MI, 0, 2, OS)); + printAlias("b", MI, Address, 2, STI, OS, true)) || + (isReg(MI, 1) && + printAlias("beqz", MI, Address, 0, 2, STI, OS, true)); case Mips::BEQ64: // beq $r0, $zero, $L2 => beqz $r0, $L2 - return isReg(MI, 1) && printAlias("beqz", MI, 0, 2, OS); + return isReg(MI, 1) && + printAlias("beqz", MI, Address, 0, 2, STI, OS, true); case Mips::BNE: case Mips::BNE_MM: // bne $r0, $zero, $L2 => bnez $r0, $L2 - return isReg(MI, 1) && printAlias("bnez", MI, 0, 2, OS); + return isReg(MI, 1) && + printAlias("bnez", MI, Address, 0, 2, STI, OS, true); case Mips::BNE64: // bne $r0, $zero, $L2 => bnez $r0, $L2 - return isReg(MI, 1) && printAlias("bnez", MI, 0, 2, OS); + return isReg(MI, 1) && + printAlias("bnez", MI, Address, 0, 2, STI, OS, true); case Mips::BGEZAL: // bgezal $zero, $L1 => bal $L1 - return isReg(MI, 0) && printAlias("bal", MI, 1, OS); + return isReg(MI, 0) && + printAlias("bal", MI, Address, 1, STI, OS, true); case Mips::BC1T: // bc1t $fcc0, $L1 => bc1t $L1 - return isReg(MI, 0) && printAlias("bc1t", MI, 1, OS); + return isReg(MI, 0) && + printAlias("bc1t", MI, Address, 1, STI, OS, true); case Mips::BC1F: // bc1f $fcc0, $L1 => bc1f $L1 - return isReg(MI, 0) && printAlias("bc1f", MI, 1, OS); + return isReg(MI, 0) && + printAlias("bc1f", MI, Address, 1, STI, OS, true); case Mips::JALR: + // jalr $zero, $r1 => jr $r1 // jalr $ra, $r1 => jalr $r1 - return isReg(MI, 0) && printAlias("jalr", MI, 1, OS); + return (isReg(MI, 0) && + printAlias("jr", MI, Address, 1, STI, OS)) || + (isReg(MI, 0) && + printAlias("jalr", MI, Address, 1, STI, OS)); case Mips::JALR64: + // jalr $zero, $r1 => jr $r1 // jalr $ra, $r1 => jalr $r1 - return isReg(MI, 0) && printAlias("jalr", MI, 1, OS); + return (isReg(MI, 0) && + printAlias("jr", MI, Address, 1, STI, OS)) || + (isReg(MI, 0) && + printAlias("jalr", MI, Address, 1, STI, OS)); case Mips::NOR: case Mips::NOR_MM: case Mips::NOR_MMR6: // nor $r0, $r1, $zero => not $r0, $r1 - return isReg(MI, 2) && printAlias("not", MI, 0, 1, OS); + return isReg(MI, 2) && + printAlias("not", MI, Address, 0, 1, STI, OS); case Mips::NOR64: // nor $r0, $r1, $zero => not $r0, $r1 - return isReg(MI, 2) && printAlias("not", MI, 0, 1, OS); + return isReg(MI, 2) && + printAlias("not", MI, Address, 0, 1, STI, OS); case Mips::OR: + case Mips::ADDu: // or $r0, $r1, $zero => move $r0, $r1 - return isReg(MI, 2) && printAlias("move", MI, 0, 1, OS); - default: return false; + // addu $r0, $r1, $zero => move $r0, $r1 + return isReg(MI, 2) && + printAlias("move", MI, Address, 0, 1, STI, OS); + default: + return false; } } -void MipsInstPrinter::printSaveRestore(const MCInst *MI, raw_ostream &O) { +void MipsInstPrinter::printSaveRestore(const MCInst *MI, + const MCSubtargetInfo &STI, + raw_ostream &O) { for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { if (i != 0) O << ", "; if (MI->getOperand(i).isReg()) printRegName(O, MI->getOperand(i).getReg()); else - printUImm<16>(MI, i, O); + printUImm<16>(MI, i, STI, O); } } -void MipsInstPrinter:: -printRegisterList(const MCInst *MI, int opNum, raw_ostream &O) { +void MipsInstPrinter::printRegisterList(const MCInst *MI, int opNum, + const MCSubtargetInfo & /* STI */, + raw_ostream &O) { // - 2 because register List is always first operand of instruction and it is // always followed by memory operand (base + offset). for (int i = opNum, e = MI->getNumOperands() - 2; i != e; ++i) { diff --git a/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td b/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td --- a/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td +++ b/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td @@ -15,6 +15,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget21MM"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtarget26_mm : Operand { @@ -22,6 +23,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget26MM"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtargetr6 : Operand { @@ -29,6 +31,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTargetMM"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtarget_lsl2_mm : Operand { @@ -38,6 +41,7 @@ // set with DecodeDisambiguates let DecoderMethod = ""; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/Mips/MicroMipsInstrInfo.td b/llvm/lib/Target/Mips/MicroMipsInstrInfo.td --- a/llvm/lib/Target/Mips/MicroMipsInstrInfo.td +++ b/llvm/lib/Target/Mips/MicroMipsInstrInfo.td @@ -163,10 +163,12 @@ def jmptarget_mm : Operand { let EncoderMethod = "getJumpTargetOpValueMM"; + let PrintMethod = "printJumpOperand"; } def calltarget_mm : Operand { let EncoderMethod = "getJumpTargetOpValueMM"; + let PrintMethod = "printJumpOperand"; } def brtarget7_mm : Operand { @@ -174,6 +176,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget7MM"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtarget10_mm : Operand { @@ -181,6 +184,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget10MM"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtarget_mm : Operand { @@ -188,6 +192,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTargetMM"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def simm23_lsl2 : Operand { @@ -1320,6 +1325,7 @@ II_DIVU, 0, 1, 1>, ISA_MIPS1_NOT_32R6_64R6; def : MipsInstAlias<"wait", (WAIT_MM 0x0), 1>, ISA_MICROMIPS; + def : MipsInstAlias<"nop", (SLL ZERO, ZERO, 0), 1>, ISA_MICROMIPS; def : MipsInstAlias<"nop", (SLL_MM ZERO, ZERO, 0), 1>, ISA_MICROMIPS; def : MipsInstAlias<"nop", (MOVE16_MM ZERO, ZERO), 1>, ISA_MICROMIPS; def : MipsInstAlias<"ei", (EI_MM ZERO), 1>, ISA_MICROMIPS; diff --git a/llvm/lib/Target/Mips/Mips.td b/llvm/lib/Target/Mips/Mips.td --- a/llvm/lib/Target/Mips/Mips.td +++ b/llvm/lib/Target/Mips/Mips.td @@ -268,8 +268,13 @@ string RegisterPrefix = "$"; } +def MipsAsmWriter : AsmWriter { + int PassSubtarget = 1; +} + def Mips : Target { let InstructionSet = MipsInstrInfo; + let AssemblyWriters = [MipsAsmWriter]; let AssemblyParsers = [MipsAsmParser]; let AssemblyParserVariants = [MipsAsmParserVariant]; let AllowRegisterRenaming = 1; diff --git a/llvm/lib/Target/Mips/Mips32r6InstrInfo.td b/llvm/lib/Target/Mips/Mips32r6InstrInfo.td --- a/llvm/lib/Target/Mips/Mips32r6InstrInfo.td +++ b/llvm/lib/Target/Mips/Mips32r6InstrInfo.td @@ -39,6 +39,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget21"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtarget26 : Operand { @@ -46,6 +47,7 @@ let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget26"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def jmpoffset16 : Operand { diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.td b/llvm/lib/Target/Mips/MipsInstrInfo.td --- a/llvm/lib/Target/Mips/MipsInstrInfo.td +++ b/llvm/lib/Target/Mips/MipsInstrInfo.td @@ -833,22 +833,26 @@ def jmptarget : Operand { let EncoderMethod = "getJumpTargetOpValue"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printJumpOperand"; } def brtarget : Operand { let EncoderMethod = "getBranchTargetOpValue"; let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def brtarget1SImm16 : Operand { let EncoderMethod = "getBranchTargetOpValue1SImm16"; let OperandType = "OPERAND_PCREL"; let DecoderMethod = "DecodeBranchTarget1SImm16"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printBranchOperand"; } def calltarget : Operand { let EncoderMethod = "getJumpTargetOpValue"; let ParserMatchClass = MipsJumpTargetAsmOperand; + let PrintMethod = "printJumpOperand"; } def imm64: Operand; diff --git a/llvm/test/CodeGen/Mips/micromips-b-range.ll b/llvm/test/CodeGen/Mips/micromips-b-range.ll --- a/llvm/test/CodeGen/Mips/micromips-b-range.ll +++ b/llvm/test/CodeGen/Mips/micromips-b-range.ll @@ -7,56 +7,56 @@ ; CHECK-NEXT: 8: 03 22 11 50 addu $2, $2, $25 ; CHECK-NEXT: c: fc 42 00 00 lw $2, 0($2) ; CHECK-NEXT: 10: 69 20 lw16 $2, 0($2) -; CHECK-NEXT: 12: 40 c2 00 14 bgtz $2, 44 +; CHECK-NEXT: 12: 40 c2 00 14 bgtz $2, 0x3e ; CHECK-NEXT: 16: 00 00 00 00 nop ; CHECK-NEXT: 1a: 33 bd ff f8 addiu $sp, $sp, -8 ; CHECK-NEXT: 1e: fb fd 00 00 sw $ra, 0($sp) ; CHECK-NEXT: 22: 41 a1 00 01 lui $1, 1 -; CHECK-NEXT: 26: 40 60 00 02 bal 8 +; CHECK-NEXT: 26: 40 60 00 02 bal 0x2e ; CHECK-NEXT: 2a: 30 21 04 69 addiu $1, $1, 1129 ; CHECK-NEXT: 2e: 00 3f 09 50 addu $1, $ra, $1 ; CHECK-NEXT: 32: ff fd 00 00 lw $ra, 0($sp) ; CHECK-NEXT: 36: 00 01 0f 3c jr $1 ; CHECK-NEXT: 3a: 33 bd 00 08 addiu $sp, $sp, 8 -; CHECK-NEXT: 3e: 94 00 00 02 b 8 +; CHECK-NEXT: 3e: 94 00 00 02 b 0x46 ; CHECK-NEXT: 42: 00 00 00 00 nop ; CHECK-NEXT: 46: 30 20 4e 1f addiu $1, $zero, 19999 -; CHECK-NEXT: 4a: b4 22 00 14 bne $2, $1, 44 +; CHECK-NEXT: 4a: b4 22 00 14 bne $2, $1, 0x76 ; CHECK-NEXT: 4e: 00 00 00 00 nop ; CHECK-NEXT: 52: 33 bd ff f8 addiu $sp, $sp, -8 ; CHECK-NEXT: 56: fb fd 00 00 sw $ra, 0($sp) ; CHECK-NEXT: 5a: 41 a1 00 01 lui $1, 1 -; CHECK-NEXT: 5e: 40 60 00 02 bal 8 +; CHECK-NEXT: 5e: 40 60 00 02 bal 0x66 ; CHECK-NEXT: 62: 30 21 04 5d addiu $1, $1, 1117 ; CHECK-NEXT: 66: 00 3f 09 50 addu $1, $ra, $1 ; CHECK-NEXT: 6a: ff fd 00 00 lw $ra, 0($sp) ; CHECK-NEXT: 6e: 00 01 0f 3c jr $1 ; CHECK-NEXT: 72: 33 bd 00 08 addiu $sp, $sp, 8 ; CHECK-NEXT: 76: 30 20 27 0f addiu $1, $zero, 9999 -; CHECK-NEXT: 7a: 94 22 00 14 beq $2, $1, 44 +; CHECK-NEXT: 7a: 94 22 00 14 beq $2, $1, 0xa6 ; CHECK-NEXT: 7e: 00 00 00 00 nop ; CHECK-NEXT: 82: 33 bd ff f8 addiu $sp, $sp, -8 ; CHECK-NEXT: 86: fb fd 00 00 sw $ra, 0($sp) ; CHECK-NEXT: 8a: 41 a1 00 01 lui $1, 1 -; CHECK-NEXT: 8e: 40 60 00 02 bal 8 +; CHECK-NEXT: 8e: 40 60 00 02 bal 0x96 ; CHECK-NEXT: 92: 30 21 04 2d addiu $1, $1, 1069 ; CHECK-NEXT: 96: 00 3f 09 50 addu $1, $ra, $1 ; CHECK-NEXT: 9a: ff fd 00 00 lw $ra, 0($sp) ; CHECK-NEXT: 9e: 00 01 0f 3c jr $1 ; CHECK-NEXT: a2: 33 bd 00 08 addiu $sp, $sp, 8 ; CHECK: ... -; CHECK-NEXT: 1046a: 94 00 00 02 b 8 +; CHECK-NEXT: 1046a: 94 00 00 02 b 0x10472 ; CHECK-NEXT: 1046e: 00 00 00 00 nop ; CHECK-NEXT: 10472: 33 bd ff f8 addiu $sp, $sp, -8 ; CHECK-NEXT: 10476: fb fd 00 00 sw $ra, 0($sp) ; CHECK-NEXT: 1047a: 41 a1 00 01 lui $1, 1 -; CHECK-NEXT: 1047e: 40 60 00 02 bal 8 +; CHECK-NEXT: 1047e: 40 60 00 02 bal 0x10486 ; CHECK-NEXT: 10482: 30 21 04 01 addiu $1, $1, 1025 ; CHECK-NEXT: 10486: 00 3f 09 50 addu $1, $ra, $1 ; CHECK-NEXT: 1048a: ff fd 00 00 lw $ra, 0($sp) ; CHECK-NEXT: 1048e: 00 01 0f 3c jr $1 ; CHECK-NEXT: 10492: 33 bd 00 08 addiu $sp, $sp, 8 -; CHECK-NEXT: 10496: 94 00 00 02 b 8 +; CHECK-NEXT: 10496: 94 00 00 02 b 0x1049e @x = external global i32, align 4 diff --git a/llvm/test/MC/Mips/expansion-j-sym-pic.s b/llvm/test/MC/Mips/expansion-j-sym-pic.s --- a/llvm/test/MC/Mips/expansion-j-sym-pic.s +++ b/llvm/test/MC/Mips/expansion-j-sym-pic.s @@ -38,9 +38,9 @@ # MICRO: b local_label # encoding: [0x94,0x00,A,A] # MICRO: # fixup A - offset: 0, value: local_label, kind: fixup_MICROMIPS_PC16_S1 -# ELF-O32: 10 00 ff ff b 0 +# ELF-O32: 10 00 ff ff b 0x0 -# ELF-NXX: 10 00 ff ff b 0 +# ELF-NXX: 10 00 ff ff b 0x0 j weak_label nop @@ -51,10 +51,10 @@ # MICRO: b weak_label # encoding: [0x94,0x00,A,A] # MICRO: # fixup A - offset: 0, value: weak_label, kind: fixup_MICROMIPS_PC16_S1 -# ELF-O32: 10 00 ff ff b 0 +# ELF-O32: 10 00 ff ff b 0x8 # ELF-O32-NEXT: R_MIPS_PC16 weak_label -# ELF-NXX: 10 00 00 00 b 4 +# ELF-NXX: 10 00 00 00 b 0xc # ELF-N32-NEXT: R_MIPS_PC16 weak_label # ELF-N64-NEXT: R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE weak_label @@ -67,10 +67,10 @@ # MICRO: b global_label # encoding: [0x94,0x00,A,A] # MICRO: # fixup A - offset: 0, value: global_label, kind: fixup_MICROMIPS_PC16_S1 -# ELF-O32: 10 00 ff ff b 0 +# ELF-O32: 10 00 ff ff b 0x10 # ELF-O32-NEXT: 00000010: R_MIPS_PC16 global_label -# ELF-NXX: 10 00 00 00 b 4 +# ELF-NXX: 10 00 00 00 b 0x14 # ELF-N32-NEXT: R_MIPS_PC16 global_label # ELF-N64-NEXT: R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE global_label @@ -83,10 +83,10 @@ # MICRO: b .text # encoding: [0x94,0x00,A,A] # MICRO: # fixup A - offset: 0, value: .text, kind: fixup_MICROMIPS_PC16_S1 -# ELF-O32: 10 00 ff f9 b -24 +# ELF-O32: 10 00 ff f9 b 0x0 # ELF-O32-NEXT: 00 00 00 00 nop -# ELF-NXX: 10 00 ff f9 b -24 +# ELF-NXX: 10 00 ff f9 b 0x0 # ELF-NXX-NEXT: 00 00 00 00 nop j 1f @@ -98,9 +98,9 @@ # MICRO: b {{.*}}tmp0{{.*}} # encoding: [0x94,0x00,A,A] # MICRO: # fixup A - offset: 0, value: {{.*}}tmp0{{.*}}, kind: fixup_MICROMIPS_PC16_S1 -# ELF-O32: 10 00 00 04 b 20 +# ELF-O32: 10 00 00 04 b 0x34 -# ELF-NXX: 10 00 00 04 b 20 +# ELF-NXX: 10 00 00 04 b 0x34 .local forward_local j forward_local @@ -112,9 +112,9 @@ # MICRO: b forward_local # encoding: [0x94,0x00,A,A] # MICRO: # fixup A - offset: 0, value: forward_local, kind: fixup_MICROMIPS_PC16_S1 -# ELF-O32: 10 00 00 04 b 20 +# ELF-O32: 10 00 00 04 b 0x3c -# ELF-NXX: 10 00 00 04 b 20 +# ELF-NXX: 10 00 00 04 b 0x3c j 0x4 @@ -122,9 +122,9 @@ # MICRO: b 4 # encoding: [0x94,0x00,0x00,0x02] -# ELF-O32: 10 00 00 01 b 8 +# ELF-O32: 10 00 00 01 b 0x38 -# ELF-NXX: 10 00 00 01 b 8 +# ELF-NXX: 10 00 00 01 b 0x38 .end local_label diff --git a/llvm/test/MC/Mips/instr-analysis.s b/llvm/test/MC/Mips/instr-analysis.s --- a/llvm/test/MC/Mips/instr-analysis.s +++ b/llvm/test/MC/Mips/instr-analysis.s @@ -2,23 +2,23 @@ # RUN: | llvm-objdump -d - | FileCheck %s # CHECK: : -# CHECK-NEXT: 0: 0c 00 00 02 jal 8 +# CHECK-NEXT: 0: 0c 00 00 02 jal 0x8 # CHECK-NEXT: 4: 00 00 00 00 nop # # CHECK: : -# CHECK-NEXT: 8: 0c 00 00 06 jal 24 +# CHECK-NEXT: 8: 0c 00 00 06 jal 0x18 # CHECK-NEXT: c: 00 00 00 00 nop # # CHECK: : -# CHECK-NEXT: 10: 10 00 ff fd b -8 +# CHECK-NEXT: 10: 10 00 ff fd b 0x8 # CHECK-NEXT: 14: 00 00 00 00 nop # # CHECK: : -# CHECK-NEXT: 18: 10 43 ff fd beq $2, $3, -8 +# CHECK-NEXT: 18: 10 43 ff fd beq $2, $3, 0x10 # CHECK-NEXT: 1c: 00 00 00 00 nop -# CHECK-NEXT: 20: 04 11 ff f9 bal -24 +# CHECK-NEXT: 20: 04 11 ff f9 bal 0x8 # CHECK-NEXT: 24: 00 00 00 00 nop -# CHECK-NEXT: 28: 08 00 00 04 j 16 +# CHECK-NEXT: 28: 08 00 00 04 j 0x10 .text .globl foo diff --git a/llvm/test/MC/Mips/micromips-el-fixup-data.s b/llvm/test/MC/Mips/micromips-el-fixup-data.s --- a/llvm/test/MC/Mips/micromips-el-fixup-data.s +++ b/llvm/test/MC/Mips/micromips-el-fixup-data.s @@ -16,7 +16,7 @@ addiu $sp, $sp, -16 bnez $9, lab1 -# CHECK: 09 b4 03 00 bnez $9, 10 +# CHECK: 09 b4 03 00 bnez $9, 0xe addu $zero, $zero, $zero lab1: diff --git a/llvm/test/MC/Mips/micromips-jump-pc-region.s b/llvm/test/MC/Mips/micromips-jump-pc-region.s --- a/llvm/test/MC/Mips/micromips-jump-pc-region.s +++ b/llvm/test/MC/Mips/micromips-jump-pc-region.s @@ -6,10 +6,10 @@ # Force us into the second 256 MB region with a non-zero instruction index .org 256*1024*1024 + 12 # CHECK-LABEL: 1000000c : -# CHECK-NEXT: 1000000c: d4 00 00 06 j 12 -# CHECK-NEXT: 10000010: f4 00 00 08 jal 16 -# CHECK-NEXT: 10000014: f0 00 00 05 jalx 20 -# CHECK-NEXT: 10000018: 74 00 00 0c jals 24 +# CHECK-NEXT: 1000000c: d4 00 00 06 j 0xc +# CHECK-NEXT: 10000010: f4 00 00 08 jal 0x10 +# CHECK-NEXT: 10000014: f0 00 00 05 jalx 0x14 +# CHECK-NEXT: 10000018: 74 00 00 0c jals 0x18 foo: j 12 jal 16 diff --git a/llvm/test/MC/Mips/micromips-neg-offset.s b/llvm/test/MC/Mips/micromips-neg-offset.s --- a/llvm/test/MC/Mips/micromips-neg-offset.s +++ b/llvm/test/MC/Mips/micromips-neg-offset.s @@ -4,9 +4,9 @@ # RUN: -mattr=micromips -mcpu=mips32r6 %s -o - \ # RUN: | llvm-objdump -d --mattr=micromips - | FileCheck %s -# CHECK: 0: 8f 7e beqzc16 $6, -4 -# CHECK: 2: cf fe bc16 -4 -# CHECK: 4: b7 ff ff fe balc -4 +# CHECK: 0: 8f 7e beqzc16 $6, 0xfffffffc <.text+0xfffffffffffffffc> +# CHECK: 2: cf fe bc16 0xfffffffe <.text+0xfffffffffffffffe> +# CHECK: 4: b7 ff ff fe balc 0x0 <.text> beqz16 $6, -4 b16 -4 diff --git a/llvm/test/MC/Mips/mips-jump-pc-region.s b/llvm/test/MC/Mips/mips-jump-pc-region.s --- a/llvm/test/MC/Mips/mips-jump-pc-region.s +++ b/llvm/test/MC/Mips/mips-jump-pc-region.s @@ -8,9 +8,9 @@ # Force us into the second 256 MB region with a non-zero instruction index .org 256*1024*1024 + 12 # CHECK-LABEL: 1000000c : -# CHECK-NEXT: 1000000c: 08 00 00 03 j 12 -# CHECK-NEXT: 10000010: 0c 00 00 04 jal 16 -# CHECK-NEXT: 10000014: 74 00 00 05 jalx 20 +# CHECK-NEXT: 1000000c: 08 00 00 03 j 0xc +# CHECK-NEXT: 10000010: 0c 00 00 04 jal 0x10 +# CHECK-NEXT: 10000014: 74 00 00 05 jalx 0x14 foo: j 12 jal 16