Index: lib/Target/Mips/Disassembler/MipsDisassembler.cpp =================================================================== --- lib/Target/Mips/Disassembler/MipsDisassembler.cpp +++ lib/Target/Mips/Disassembler/MipsDisassembler.cpp @@ -411,6 +411,10 @@ uint64_t Address, const void *Decoder); +static DecodeStatus DecodeCompactJump(MCInst &Inst, unsigned Insn, + uint64_t Address, + const void *Decoder); + namespace llvm { extern Target TheMipselTarget, TheMipsTarget, TheMips64Target, TheMips64elTarget; @@ -1762,3 +1766,14 @@ return MCDisassembler::Success; } + +static DecodeStatus DecodeCompactJump(MCInst &Inst, + unsigned Insn, + uint64_t Address, + const void *Decoder) { + unsigned Base = fieldFromInstruction(Insn, 16, 5); + Base = getReg(Decoder, Mips::GPR32RegClassID, Base); + Inst.addOperand(MCOperand::CreateReg(Base)); + Inst.addOperand(MCOperand::CreateImm(SignExtend32<16>(Insn & 0xffff))); + return MCDisassembler::Success; +} Index: lib/Target/Mips/Mips32r6InstrInfo.td =================================================================== --- lib/Target/Mips/Mips32r6InstrInfo.td +++ lib/Target/Mips/Mips32r6InstrInfo.td @@ -379,7 +379,7 @@ list Pattern = []; bit isTerminator = 1; bit hasDelaySlot = 0; - string DecoderMethod = "DecodeSimm16"; + string DecoderMethod = "DecodeCompactJump"; } class JIALC_DESC : JMP_IDX_COMPACT_DESC_BASE<"jialc", calloffset16, Index: test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt +++ test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt @@ -145,3 +145,5 @@ 0xb7 0x34 0x52 0x49 # CHECK: lwc2 $18, -841($6) 0x75 0x92 0xf4 0x49 # CHECK: sdc2 $20, 629($18) 0x30 0x81 0x79 0x49 # CHECK: swc2 $25, 304($16) +0x00 0x01 0x05 0xf8 # CHECK: jialc $5, 256 +0x00 0x01 0x05 0xd8 # CHECK: jic $5, 256 Index: test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt +++ test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt @@ -145,3 +145,6 @@ 0x49 0x52 0x34 0xb7 # CHECK: lwc2 $18, -841($6) 0x49 0xf4 0x92 0x75 # CHECK: sdc2 $20, 629($18) 0x49 0x79 0x81 0x30 # CHECK: swc2 $25, 304($16) +0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 +0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 + Index: test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt +++ test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt @@ -15,5 +15,3 @@ 0x60 0xc0 0x00 0x40 # CHECK: bnec $6, $zero, 256 0x60 0xa0 0x00 0x40 # CHECK: bnec $5, $zero, 256 0x60 0xa6 0x00 0x40 # CHECK: bnec $5, $6, 256 -0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 -0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 Index: test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt +++ test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt @@ -163,3 +163,5 @@ 0xb7 0x34 0x52 0x49 # CHECK: lwc2 $18, -841($6) 0x75 0x92 0xf4 0x49 # CHECK: sdc2 $20, 629($18) 0x30 0x81 0x79 0x49 # CHECK: swc2 $25, 304($16) +0x00 0x01 0x05 0xf8 # CHECK: jialc $5, 256 +0x00 0x01 0x05 0xd8 # CHECK: jic $5, 256 Index: test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt =================================================================== --- test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt +++ test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt @@ -163,3 +163,6 @@ 0x49 0x52 0x34 0xb7 # CHECK: lwc2 $18, -841($6) 0x49 0xf4 0x92 0x75 # CHECK: sdc2 $20, 629($18) 0x49 0x79 0x81 0x30 # CHECK: swc2 $25, 304($16) +0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 +0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 + Index: test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt =================================================================== --- test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt +++ test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt @@ -15,8 +15,6 @@ 0x60 0xc0 0x00 0x40 # CHECK: bnec $6, $zero, 256 0x60 0xa0 0x00 0x40 # CHECK: bnec $5, $zero, 256 0x60 0xa6 0x00 0x40 # CHECK: bnec $5, $6, 256 -0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 -0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 0x64 0x58 0x46 0x9f # CHECK: daddiu $24, $2, 18079 0x66 0x73 0x69 0x3f # CHECK: daddiu $19, $19, 26943 0x65 0x6f 0xec 0x5f # CHECK: daddiu $15, $11, -5025