Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -1709,6 +1709,7 @@ assert(RegOp.isReg() && "expected register operand kind"); int64_t ImmValue = ImmOp.getImm(); + unsigned Reg = RegOp.getReg(); tmpInst.setLoc(IDLoc); // FIXME: gas has a special case for values that are 000...1111, which // becomes a li -1 and then a dsrl @@ -1716,7 +1717,7 @@ // For 0 <= j <= 65535. // li d,j => ori d,$zero,j tmpInst.setOpcode(Mips::ORi); - tmpInst.addOperand(MCOperand::CreateReg(RegOp.getReg())); + tmpInst.addOperand(MCOperand::CreateReg(Reg)); tmpInst.addOperand(MCOperand::CreateReg(Mips::ZERO)); tmpInst.addOperand(MCOperand::CreateImm(ImmValue)); Instructions.push_back(tmpInst); @@ -1724,7 +1725,7 @@ // For -32768 <= j < 0. // li d,j => addiu d,$zero,j tmpInst.setOpcode(Mips::ADDiu); - tmpInst.addOperand(MCOperand::CreateReg(RegOp.getReg())); + tmpInst.addOperand(MCOperand::CreateReg(Reg)); tmpInst.addOperand(MCOperand::CreateReg(Mips::ZERO)); tmpInst.addOperand(MCOperand::CreateImm(ImmValue)); Instructions.push_back(tmpInst); @@ -1734,10 +1735,10 @@ // li d,j => lui d,hi16(j) // ori d,d,lo16(j) tmpInst.setOpcode(Mips::LUi); - tmpInst.addOperand(MCOperand::CreateReg(RegOp.getReg())); + tmpInst.addOperand(MCOperand::CreateReg(Reg)); tmpInst.addOperand(MCOperand::CreateImm((ImmValue & 0xffff0000) >> 16)); Instructions.push_back(tmpInst); - createShiftOr<0, false>(ImmValue, RegOp.getReg(), IDLoc, Instructions); + createShiftOr<0, false>(ImmValue, Reg, IDLoc, Instructions); } else if ((ImmValue & (0xffffLL << 48)) == 0) { if (!isGP64bit()) { Error(IDLoc, "instruction requires a 64-bit architecture"); @@ -1759,12 +1760,12 @@ // dsll d,d,16 // ori d,d,lo16(lo32(j)) tmpInst.setOpcode(Mips::LUi); - tmpInst.addOperand(MCOperand::CreateReg(RegOp.getReg())); + tmpInst.addOperand(MCOperand::CreateReg(Reg)); tmpInst.addOperand( MCOperand::CreateImm((ImmValue & (0xffffLL << 32)) >> 32)); Instructions.push_back(tmpInst); - createShiftOr<16, false>(ImmValue, RegOp.getReg(), IDLoc, Instructions); - createShiftOr<0, true>(ImmValue, RegOp.getReg(), IDLoc, Instructions); + createShiftOr<16, false>(ImmValue, Reg, IDLoc, Instructions); + createShiftOr<0, true>(ImmValue, Reg, IDLoc, Instructions); } else { if (!isGP64bit()) { Error(IDLoc, "instruction requires a 64-bit architecture"); @@ -1786,13 +1787,13 @@ // dsll d,d,16 // ori d,d,lo16(lo32(j)) tmpInst.setOpcode(Mips::LUi); - tmpInst.addOperand(MCOperand::CreateReg(RegOp.getReg())); + tmpInst.addOperand(MCOperand::CreateReg(Reg)); tmpInst.addOperand( MCOperand::CreateImm((ImmValue & (0xffffLL << 48)) >> 48)); Instructions.push_back(tmpInst); - createShiftOr<32, false>(ImmValue, RegOp.getReg(), IDLoc, Instructions); - createShiftOr<16, true>(ImmValue, RegOp.getReg(), IDLoc, Instructions); - createShiftOr<0, true>(ImmValue, RegOp.getReg(), IDLoc, Instructions); + createShiftOr<32, false>(ImmValue, Reg, IDLoc, Instructions); + createShiftOr<16, true>(ImmValue, Reg, IDLoc, Instructions); + createShiftOr<0, true>(ImmValue, Reg, IDLoc, Instructions); } return false; }