Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -818,7 +818,9 @@ void addMemOperands(MCInst &Inst, unsigned N) const { assert(N == 2 && "Invalid number of operands!"); - Inst.addOperand(MCOperand::CreateReg(getMemBase()->getGPR32Reg())); + Inst.addOperand(MCOperand::CreateReg(AsmParser.isGP64bit() + ? getMemBase()->getGPR64Reg() + : getMemBase()->getGPR32Reg())); const MCExpr *Expr = getMemOff(); addExpr(Inst, Expr); @@ -1597,7 +1599,9 @@ case Mips::LoadImm32: case Mips::LoadImm64: case Mips::LoadAddrImm32: + case Mips::LoadAddrImm64: case Mips::LoadAddrReg32: + case Mips::LoadAddrReg64: case Mips::B_MM_Pseudo: case Mips::LWM_MM: case Mips::SWM_MM: @@ -1619,8 +1623,12 @@ return expandLoadImm(Inst, false, IDLoc, Instructions); case Mips::LoadAddrImm32: return expandLoadAddressImm(Inst, true, IDLoc, Instructions); + case Mips::LoadAddrImm64: + return expandLoadAddressImm(Inst, false, IDLoc, Instructions); case Mips::LoadAddrReg32: return expandLoadAddressReg(Inst, true, IDLoc, Instructions); + case Mips::LoadAddrReg64: + return expandLoadAddressReg(Inst, false, IDLoc, Instructions); case Mips::B_MM_Pseudo: return expandUncondBranchMMPseudo(Inst, IDLoc, Instructions); case Mips::SWM_MM: @@ -1782,7 +1790,7 @@ if (UseSrcReg) { tmpInst.clear(); - tmpInst.setOpcode(Mips::ADDu); + tmpInst.setOpcode(Is32BitImm ? Mips::ADDu : Mips::DADDu); tmpInst.addOperand(MCOperand::CreateReg(DstReg)); tmpInst.addOperand(MCOperand::CreateReg(UseAT ? ATReg : DstReg)); tmpInst.addOperand(MCOperand::CreateReg(SrcReg)); @@ -1820,7 +1828,7 @@ if (UseSrcReg) { tmpInst.clear(); - tmpInst.setOpcode(Mips::ADDu); + tmpInst.setOpcode(Is32BitImm ? Mips::ADDu : Mips::DADDu); tmpInst.addOperand(MCOperand::CreateReg(DstReg)); tmpInst.addOperand(MCOperand::CreateReg(UseAT ? ATReg : DstReg)); tmpInst.addOperand(MCOperand::CreateReg(SrcReg)); @@ -1871,7 +1879,7 @@ if (UseSrcReg) { tmpInst.clear(); - tmpInst.setOpcode(Mips::ADDu); + tmpInst.setOpcode(Is32BitImm ? Mips::ADDu : Mips::DADDu); tmpInst.addOperand(MCOperand::CreateReg(DstReg)); tmpInst.addOperand(MCOperand::CreateReg(UseAT ? ATReg : DstReg)); tmpInst.addOperand(MCOperand::CreateReg(SrcReg)); @@ -1952,6 +1960,11 @@ Warning(IDLoc, "instruction loads a 32-bit address on a 64-bit architecture"); + if (!Is32BitSym && !isGP64bit()) { + Error(IDLoc, "instruction requires a 64-bit architecture"); + return true; + } + unsigned SrcReg = 0; bool UseSrcReg = false; if (SrcRegOp) { @@ -1987,24 +2000,78 @@ const MCExpr *HighestExpr = evaluateRelocExpr(SymOp->getExpr(), "highest"); const MCExpr *HigherExpr = evaluateRelocExpr(SymOp->getExpr(), "higher"); - tmpInst.setOpcode(Mips::LUi); - tmpInst.addOperand(MCOperand::CreateReg(UseAT ? ATReg : DstReg)); - tmpInst.addOperand(MCOperand::CreateExpr(HighestExpr)); - Instructions.push_back(tmpInst); + if (UseSrcReg && (SrcReg == DstReg)) { + tmpInst.setOpcode(Mips::LUi); + tmpInst.addOperand(MCOperand::CreateReg(ATReg)); + tmpInst.addOperand(MCOperand::CreateExpr(HighestExpr)); + Instructions.push_back(tmpInst); - createLShiftOri<0>(MCOperand::CreateExpr(HigherExpr), - UseAT ? ATReg : DstReg, SMLoc(), Instructions); - createLShiftOri<16>(MCOperand::CreateExpr(HiExpr), UseAT ? ATReg : DstReg, - SMLoc(), Instructions); - createLShiftOri<16>(MCOperand::CreateExpr(LoExpr), UseAT ? ATReg : DstReg, - SMLoc(), Instructions); - if (UseSrcReg) { + createLShiftOri<0>(MCOperand::CreateExpr(HigherExpr), ATReg, SMLoc(), + Instructions); + + createLShiftOri<16>(MCOperand::CreateExpr(HiExpr), ATReg, SMLoc(), + Instructions); + + createLShiftOri<16>(MCOperand::CreateExpr(LoExpr), ATReg, SMLoc(), + Instructions); + + // Merge DstReg and AT: tmpInst.clear(); tmpInst.setOpcode(Mips::DADDu); tmpInst.addOperand(MCOperand::CreateReg(DstReg)); - tmpInst.addOperand(MCOperand::CreateReg(UseAT ? ATReg : DstReg)); - tmpInst.addOperand(MCOperand::CreateReg(SrcReg)); + tmpInst.addOperand(MCOperand::CreateReg(ATReg)); + tmpInst.addOperand(MCOperand::CreateReg(DstReg)); Instructions.push_back(tmpInst); + return false; + } else if (!UseSrcReg || (UseSrcReg && (SrcReg != DstReg))) { + + // This only happens if !UseSrcReg. + if (!UseAT) { + // At this point we need AT to perform the expansions and we exit if it + // is not available. + ATReg = getATReg(IDLoc); + if (!ATReg) + return true; + } + + tmpInst.setOpcode(Mips::LUi); + tmpInst.addOperand(MCOperand::CreateReg(DstReg)); + tmpInst.addOperand(MCOperand::CreateExpr(HighestExpr)); + Instructions.push_back(tmpInst); + + tmpInst.clear(); + tmpInst.setOpcode(Mips::LUi); + tmpInst.addOperand(MCOperand::CreateReg(ATReg)); + tmpInst.addOperand(MCOperand::CreateExpr(HiExpr)); + Instructions.push_back(tmpInst); + + createLShiftOri<0>(MCOperand::CreateExpr(HigherExpr), DstReg, SMLoc(), + Instructions); + + createLShiftOri<0>(MCOperand::CreateExpr(LoExpr), ATReg, SMLoc(), + Instructions); + + // Make place in DstReg for the contents of AT by doing a 32-bit shift: + createLShiftOri<32>(0, DstReg, SMLoc(), Instructions); + + // Merge DstReg and AT: + tmpInst.clear(); + tmpInst.setOpcode(Mips::DADDu); + tmpInst.addOperand(MCOperand::CreateReg(DstReg)); + tmpInst.addOperand(MCOperand::CreateReg(DstReg)); + tmpInst.addOperand(MCOperand::CreateReg(ATReg)); + Instructions.push_back(tmpInst); + + // The following only happens if SrcReg != DstReg. + if (UseSrcReg) { + tmpInst.clear(); + tmpInst.setOpcode(Mips::DADDu); + tmpInst.addOperand(MCOperand::CreateReg(DstReg)); + tmpInst.addOperand(MCOperand::CreateReg(DstReg)); + tmpInst.addOperand(MCOperand::CreateReg(SrcReg)); + Instructions.push_back(tmpInst); + } + return false; } } else { // Otherwise, expand to: @@ -2775,7 +2842,7 @@ const AsmToken &Tok = Parser.getTok(); // Get the next token. if (Tok.isNot(AsmToken::LParen)) { MipsOperand &Mnemonic = static_cast(*Operands[0]); - if (Mnemonic.getToken() == "la") { + if (Mnemonic.getToken() == "la" || Mnemonic.getToken() == "dla") { SMLoc E = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1); Operands.push_back(MipsOperand::CreateImm(IdVal, S, E, *this)); Index: lib/Target/Mips/Mips64InstrInfo.td =================================================================== --- lib/Target/Mips/Mips64InstrInfo.td +++ lib/Target/Mips/Mips64InstrInfo.td @@ -627,3 +627,9 @@ MipsAsmPseudoInst<(outs RO:$rt), (ins Od:$imm64), !strconcat(instr_asm, "\t$rt, $imm64")> ; def LoadImm64 : LoadImmediate64<"dli", imm64, GPR64Opnd>; + +def LoadAddrReg64 : MipsAsmPseudoInst<(outs GPR64Opnd:$rt), (ins mem:$addr), + "dla\t$rt, $addr">; + +def LoadAddrImm64 : MipsAsmPseudoInst<(outs GPR64Opnd:$rt), (ins imm64:$imm64), + "dla\t$rt, $imm64">; Index: test/MC/Mips/mips-expansions-bad.s =================================================================== --- test/MC/Mips/mips-expansions-bad.s +++ test/MC/Mips/mips-expansions-bad.s @@ -19,3 +19,9 @@ # 64-BIT: ori $5, $5, %lo(symbol) dli $5, 1 # 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 64-bit architecture + dla $5, 0x100000000 + # 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 64-bit architecture + dla $5, 0x100000000($6) + # 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 64-bit architecture + dla $5, symbol + # 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 64-bit architecture Index: test/MC/Mips/mips64-expansions.s =================================================================== --- test/MC/Mips/mips64-expansions.s +++ test/MC/Mips/mips64-expansions.s @@ -178,3 +178,558 @@ # CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35] # CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00] # CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35] + +# Test dla: +# Loading an address from an immediate. + dla $8, 12345 +# CHECK: ori $8, $zero, 12345 # encoding: [0x39,0x30,0x08,0x34] + dla $8, -2345 +# CHECK: addiu $8, $zero, -2345 # encoding: [0xd7,0xf6,0x08,0x24] + +# Loading an address from an immediate through a source register. + dla $8, 20($9) +# CHECK: ori $8, $9, 20 # encoding: [0x14,0x00,0x28,0x35] + + dla $8, 65538($9) +# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c] +# CHECK: ori $8, $8, 2 # encoding: [0x02,0x00,0x08,0x35] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, 0x100010001($9) +# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c] +# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35] +# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00] +# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, 0x1000100010001($9) +# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c] +# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35] +# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00] +# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35] +# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00] +# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + +# Loading the address of a symbol. + dla $8, symbol +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol+1 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol+32770 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-32766) # encoding: [0x02'A',0x80'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol+65538 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+2) # encoding: [0x02'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol+0x11111 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+4369) # encoding: [0x11'A',0x11'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol+0x100010001 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol+1) # encoding: [0x01'A',A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol+0x1000100010001 +# CHECK: lui $8, %highest(symbol+1) # encoding: [0x01'A',A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol+1) # encoding: [0x01'A',A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol-1 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol-32770 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+32766) # encoding: [0xfe'A',0x7f'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol-65538 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-2) # encoding: [0xfe'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol-0x11111 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-4369) # encoding: [0xef'A',0xee'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol-0x100010001 +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol-1) # encoding: [0xff'A',0xff'A',0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + dla $8, symbol-0x1000100010001 +# CHECK: lui $8, %highest(symbol-1) # encoding: [0xff'A',0xff'A',0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol-1) # encoding: [0xff'A',0xff'A',0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] + + +# Loading the address of a symbol through a source register. + dla $8, symbol($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol+1($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol+32770($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-32766) # encoding: [0x02'A',0x80'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol+65538($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+2) # encoding: [0x02'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol+0x11111($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+4369) # encoding: [0x11'A',0x11'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol+0x100010001($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol+1) # encoding: [0x01'A',A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol+0x1000100010001($9) +# CHECK: lui $8, %highest(symbol+1) # encoding: [0x01'A',A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol+1) # encoding: [0x01'A',A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol-1($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol-32770($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol+32766) # encoding: [0xfe'A',0x7f'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol-65538($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-2) # encoding: [0xfe'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol-0x11111($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol) # encoding: [A,A,0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-4369) # encoding: [0xef'A',0xee'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol-0x100010001($9) +# CHECK: lui $8, %highest(symbol) # encoding: [A,A,0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol-1) # encoding: [0xff'A',0xff'A',0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + dla $8, symbol-0x1000100010001($9) +# CHECK: lui $8, %highest(symbol-1) # encoding: [0xff'A',0xff'A',0x08,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: lui $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: ori $8, $8, %higher(symbol-1) # encoding: [0xff'A',0xff'A',0x08,0x35] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00] +# CHECK: daddu $8, $8, $1 # encoding: [0x2d,0x40,0x01,0x01] +# CHECK: daddu $8, $8, $9 # encoding: [0x2d,0x40,0x09,0x01] + + +# The source and destination registers are the same. + dla $8, 20($8) +# CHECK: ori $8, $8, 20 # encoding: [0x14,0x00,0x08,0x35] + + dla $8, 65538($8) +# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] +# CHECK: ori $1, $1, 2 # encoding: [0x02,0x00,0x21,0x34] +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, 0x100010001($8) +# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] +# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, 0x1000100010001($8) +# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] +# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol+1($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol+32770($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol-32766) # encoding: [0x02'A',0x80'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol+65538($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol+2) # encoding: [0x02'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol+0x11111($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol+4369) # encoding: [0x11'A',0x11'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol+0x100010001($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol+0x1000100010001($8) +# CHECK: lui $1, %highest(symbol+1) # encoding: [0x01'A',A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol+1) # encoding: [0x01'A',A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol-1($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol-32770($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol+32766) # encoding: [0xfe'A',0x7f'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol-65538($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol-2) # encoding: [0xfe'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol-0x11111($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol) # encoding: [A,A,0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol-4369) # encoding: [0xef'A',0xee'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol-0x100010001($8) +# CHECK: lui $1, %highest(symbol) # encoding: [A,A,0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00] + + dla $8, symbol-0x1000100010001($8) +# CHECK: lui $1, %highest(symbol-1) # encoding: [0xff'A',0xff'A',0x01,0x3c] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST +# CHECK: ori $1, $1, %higher(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %hi(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 +# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] +# CHECK: ori $1, $1, %lo(symbol-1) # encoding: [0xff'A',0xff'A',0x21,0x34] +# CHECK: # fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 +# CHECK: daddu $8, $1, $8 # encoding: [0x2d,0x40,0x28,0x00]