|
@@ -3322,9 +3322,7 @@ bool MipsAsmParser::expandLoadSingleImmToGPR(MCInst &Inst, SMLoc IDLoc,
|
|
|
unsigned FirstReg = Inst.getOperand(0).getReg();
|
|
|
uint64_t ImmOp64 = Inst.getOperand(1).getImm();
|
|
|
|
|
|
- ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
|
|
-
|
|
|
- uint32_t ImmOp32 = covertDoubleImmToSingleImm(ImmOp64);
|
|
|
+ uint32_t ImmOp32 = covertDoubleImmToSingleImm(convertIntToDoubleImm(ImmOp64));
|
|
|
|
|
|
return loadImmediate(ImmOp32, FirstReg, Mips::NoRegister, true, true, IDLoc,
|
|
|
Out, STI);
|
|
@@ -3397,20 +3395,13 @@ bool MipsAsmParser::expandLoadDoubleImmToGPR(MCInst &Inst, SMLoc IDLoc,
|
|
|
|
|
|
ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
|
|
|
|
|
- uint32_t LoImmOp64 = Lo_32(ImmOp64);
|
|
|
- uint32_t HiImmOp64 = Hi_32(ImmOp64);
|
|
|
-
|
|
|
- unsigned TmpReg = getATReg(IDLoc);
|
|
|
- if (!TmpReg)
|
|
|
- return true;
|
|
|
-
|
|
|
- if (LoImmOp64 == 0) {
|
|
|
+ if (Lo_32(ImmOp64) == 0) {
|
|
|
if (isABI_N32() || isABI_N64()) {
|
|
|
if (loadImmediate(ImmOp64, FirstReg, Mips::NoRegister, false, true, IDLoc,
|
|
|
Out, STI))
|
|
|
return true;
|
|
|
} else {
|
|
|
- if (loadImmediate(HiImmOp64, FirstReg, Mips::NoRegister, true, true,
|
|
|
+ if (loadImmediate(Hi_32(ImmOp64), FirstReg, Mips::NoRegister, true, true,
|
|
|
IDLoc, Out, STI))
|
|
|
return true;
|
|
|
|
|
@@ -3437,6 +3428,10 @@ bool MipsAsmParser::expandLoadDoubleImmToGPR(MCInst &Inst, SMLoc IDLoc,
|
|
|
getStreamer().EmitIntValue(ImmOp64, 8);
|
|
|
getStreamer().SwitchSection(CS);
|
|
|
|
|
|
+ unsigned TmpReg = getATReg(IDLoc);
|
|
|
+ if (!TmpReg)
|
|
|
+ return true;
|
|
|
+
|
|
|
if (emitPartialAddress(TOut, IDLoc, Sym))
|
|
|
return true;
|
|
|
|
|
@@ -3469,9 +3464,6 @@ bool MipsAsmParser::expandLoadDoubleImmToFPR(MCInst &Inst, bool Is64FPU,
|
|
|
|
|
|
ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
|
|
|
|
|
- uint32_t LoImmOp64 = Lo_32(ImmOp64);
|
|
|
- uint32_t HiImmOp64 = Hi_32(ImmOp64);
|
|
|
-
|
|
|
unsigned TmpReg = Mips::ZERO;
|
|
|
if (ImmOp64 != 0) {
|
|
|
TmpReg = getATReg(IDLoc);
|
|
@@ -3479,8 +3471,8 @@ bool MipsAsmParser::expandLoadDoubleImmToFPR(MCInst &Inst, bool Is64FPU,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- if ((LoImmOp64 == 0) &&
|
|
|
- !((HiImmOp64 & 0xffff0000) && (HiImmOp64 & 0x0000ffff))) {
|
|
|
+ if ((Lo_32(ImmOp64) == 0) &&
|
|
|
+ !((Hi_32(ImmOp64) & 0xffff0000) && (Hi_32(ImmOp64) & 0x0000ffff))) {
|
|
|
if (isABI_N32() || isABI_N64()) {
|
|
|
if (TmpReg != Mips::ZERO &&
|
|
|
loadImmediate(ImmOp64, TmpReg, Mips::NoRegister, false, false, IDLoc,
|
|
@@ -3491,8 +3483,8 @@ bool MipsAsmParser::expandLoadDoubleImmToFPR(MCInst &Inst, bool Is64FPU,
|
|
|
}
|
|
|
|
|
|
if (TmpReg != Mips::ZERO &&
|
|
|
- loadImmediate(HiImmOp64, TmpReg, Mips::NoRegister, true, false, IDLoc,
|
|
|
- Out, STI))
|
|
|
+ loadImmediate(Hi_32(ImmOp64), TmpReg, Mips::NoRegister, true, false,
|
|
|
+ IDLoc, Out, STI))
|
|
|
return true;
|
|
|
|
|
|
if (hasMips32r2()) {
|