Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -834,7 +834,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); @@ -1616,7 +1618,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: @@ -1640,8 +1644,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: @@ -1973,6 +1981,11 @@ if (Is32BitSym && isABI_N64()) Warning(IDLoc, "instruction loads the 32-bit address of a 64-bit symbol"); + if (!Is32BitSym && !isGP64bit()) { + Error(IDLoc, "instruction requires a 64-bit architecture"); + return true; + } + MCInst tmpInst; const MCExpr *HiExpr = evaluateRelocExpr(SymExpr, "hi"); const MCExpr *LoExpr = evaluateRelocExpr(SymExpr, "lo"); @@ -1983,7 +1996,7 @@ bool UseAT = false; unsigned ATReg = 0; - if (UseSrcReg && (DstReg == SrcReg)) { + if (!Is32BitSym || (UseSrcReg && (DstReg == SrcReg))) { UseAT = true; // At this point we need AT to perform the expansions and we exit if it is // not available. @@ -2004,17 +2017,54 @@ const MCExpr *HighestExpr = evaluateRelocExpr(SymExpr, "highest"); const MCExpr *HigherExpr = evaluateRelocExpr(SymExpr, "higher"); - tmpInst.setOpcode(Mips::LUi); - tmpInst.addOperand(MCOperand::createReg(IntermediateDstReg)); - 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), IntermediateDstReg, - SMLoc(), Instructions); - createLShiftOri<16>(MCOperand::createExpr(HiExpr), IntermediateDstReg, - SMLoc(), Instructions); - createLShiftOri<16>(MCOperand::createExpr(LoExpr), IntermediateDstReg, - SMLoc(), Instructions); + 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: + createAddu(DstReg, ATReg, DstReg, Instructions); + + if (UseSrcReg) + createAddu(DstReg, DstReg, SrcReg, Instructions); + + return false; + } else { + 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: + createAddu(DstReg, DstReg, ATReg, Instructions); + + if (UseSrcReg) + createAddu(DstReg, DstReg, SrcReg, Instructions); + + return false; + } } else { // Otherwise, expand to: // la d,sym => lui d,hi16(sym) @@ -2285,7 +2335,7 @@ unsigned TrgReg, SmallVectorImpl &Instructions) { MCInst AdduInst; - AdduInst.setOpcode(Mips::ADDu); + AdduInst.setOpcode(isGP64bit() ? Mips::DADDu : Mips::ADDu); AdduInst.addOperand(MCOperand::createReg(DstReg)); AdduInst.addOperand(MCOperand::createReg(SrcReg)); AdduInst.addOperand(MCOperand::createReg(TrgReg)); @@ -2849,7 +2899,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 @@ -633,3 +633,8 @@ 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 @@ -26,3 +26,9 @@ # 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 32-bit immediate beq $2, 0x100010001, 1332 # 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 32-bit immediate + 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 @@ -271,3 +271,558 @@ # CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] # CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] # CHECK: nop # encoding: [0x00,0x00,0x00,0x00] + +# 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]