Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -2378,11 +2378,12 @@ case Mips::Usw: return expandUxw(Inst, IDLoc, Out, STI) ? MER_Fail : MER_Success; case Mips::NORImm: + case Mips::NORImm64: return expandAliasImmediate(Inst, IDLoc, Out, STI) ? MER_Fail : MER_Success; case Mips::ADDi: case Mips::ADDi_MM: case Mips::ADDiu: case Mips::ADDiu_MM: - case Mips::SLTi: case Mips::SLTi_MM: - case Mips::SLTiu: case Mips::SLTiu_MM: + case Mips::SLTi: case Mips::SLTi_MM: case Mips::SLTi64: + case Mips::SLTiu: case Mips::SLTiu_MM: case Mips::SLTiu64: if ((Inst.getNumOperands() == 3) && Inst.getOperand(0).isReg() && Inst.getOperand(1).isReg() && Inst.getOperand(2).isImm()) { int64_t ImmValue = Inst.getOperand(2).getImm(); @@ -3868,9 +3869,18 @@ case Mips::ANDi64: FinalOpcode = Mips::AND64; break; + case Mips::NORImm64: + FinalOpcode = Mips::NOR64; + break; case Mips::ORi64: FinalOpcode = Mips::OR64; break; + case Mips::SLTi64: + FinalOpcode = Mips::SLT64; + break; + case Mips::SLTiu64: + FinalOpcode = Mips::SLTu64; + break; case Mips::XORi64: FinalOpcode = Mips::XOR64; break; Index: lib/Target/Mips/Mips64InstrInfo.td =================================================================== --- lib/Target/Mips/Mips64InstrInfo.td +++ lib/Target/Mips/Mips64InstrInfo.td @@ -688,6 +688,11 @@ //===----------------------------------------------------------------------===// // Instruction aliases //===----------------------------------------------------------------------===// + +def NORImm64 : NORIMM_DESC_BASE, GPR_64; +def : MipsInstAlias<"nor\t$rs, $imm", (NORImm64 GPR64Opnd:$rs, GPR64Opnd:$rs, + imm64:$imm)>, GPR_64; + let AdditionalPredicates = [NotInMicroMips] in { def : MipsInstAlias<"move $dst, $src", (OR64 GPR64Opnd:$dst, GPR64Opnd:$src, ZERO_64), 1>, @@ -708,11 +713,25 @@ (DADDiu GPR64Opnd:$rs, GPR64Opnd:$rs, simm16_64:$imm), 0>, ISA_MIPS3; - defm : OneOrTwoOperandMacroImmediateAlias<"and", ANDi64, GPR64Opnd, imm64>; - - defm : OneOrTwoOperandMacroImmediateAlias<"or", ORi64, GPR64Opnd, imm64>; - - defm : OneOrTwoOperandMacroImmediateAlias<"xor", XORi64, GPR64Opnd, imm64>; + defm : OneOrTwoOperandMacroImmediateAlias<"and", ANDi64, GPR64Opnd, imm64>, + GPR_64; + defm : OneOrTwoOperandMacroImmediateAlias<"or", ORi64, GPR64Opnd, imm64>, + GPR_64; + defm : OneOrTwoOperandMacroImmediateAlias<"xor", XORi64, GPR64Opnd, imm64>, + GPR_64; + +// FIXME: this won't work because of the two argument version: +// error: result value $rs is both GPR32Opnd and GPR64Opnd! +// defm : OneOrTwoOperandMacroImmediateAlias<"slt", SLTi64, GPR64Opnd, imm64>, GPR_64; +// defm : OneOrTwoOperandMacroImmediateAlias<"sltu", SLTi64, GPR64Opnd, imm64>, GPR_64; +// Only support the three argument version for now, to support the two argument +// version we will have to change all uses of slt(u) + def : MipsInstAlias<"slt $rs, $rt, $imm", + (SLTi64 GPR32Opnd:$rs, GPR64Opnd:$rt, imm64:$imm), 0>, + GPR_64; + def : MipsInstAlias<"sltu $rs, $rt, $imm", + (SLTiu64 GPR32Opnd:$rs, GPR64Opnd:$rt, imm64:$imm), 0>, + GPR_64; } def : MipsInstAlias<"dsll $rd, $rt, $rs", (DSLLV GPR64Opnd:$rd, GPR64Opnd:$rt, GPR32Opnd:$rs), 0>, Index: lib/Target/Mips/MipsInstrInfo.td =================================================================== --- lib/Target/Mips/MipsInstrInfo.td +++ lib/Target/Mips/MipsInstrInfo.td @@ -2392,9 +2392,9 @@ defm : OneOrTwoOperandMacroImmediateAlias<"xor", XORi>, GPR_32; - defm : OneOrTwoOperandMacroImmediateAlias<"slt", SLTi>; + defm : OneOrTwoOperandMacroImmediateAlias<"slt", SLTi>, GPR_32; - defm : OneOrTwoOperandMacroImmediateAlias<"sltu", SLTiu>; + defm : OneOrTwoOperandMacroImmediateAlias<"sltu", SLTiu>, GPR_32; } def : MipsInstAlias<"mfc0 $rt, $rd", (MFC0 GPR32Opnd:$rt, COP0Opnd:$rd, 0), 0>; def : MipsInstAlias<"mtc0 $rt, $rd", (MTC0 COP0Opnd:$rd, GPR32Opnd:$rt, 0), 0>; @@ -2502,11 +2502,12 @@ def JalOneReg : MipsAsmPseudoInst<(outs), (ins GPR32Opnd:$rs), "jal\t$rs"> ; -def NORImm : MipsAsmPseudoInst< - (outs), (ins GPR32Opnd:$rs, GPR32Opnd:$rt, simm32_relaxed:$imm), - "nor\t$rs, $rt, $imm">; +class NORIMM_DESC_BASE : + MipsAsmPseudoInst<(outs), (ins RO:$rs, RO:$rt, Imm:$imm), + "nor\t$rs, $rt, $imm">; +def NORImm : NORIMM_DESC_BASE, GPR_32; def : MipsInstAlias<"nor\t$rs, $imm", (NORImm GPR32Opnd:$rs, GPR32Opnd:$rs, - simm32_relaxed:$imm)>; + simm32_relaxed:$imm)>, GPR_32; let hasDelaySlot = 1, isCTI = 1 in { def BneImm : MipsAsmPseudoInst<(outs GPR32Opnd:$rt), Index: test/MC/Mips/mips64-instalias-imm-expanding-broken.s =================================================================== --- test/MC/Mips/mips64-instalias-imm-expanding-broken.s +++ test/MC/Mips/mips64-instalias-imm-expanding-broken.s @@ -1,106 +1,17 @@ -# RUN: llvm-mc -triple mips64el-unknown-linux -show-encoding -print-imm-hex %s | FileCheck %s +# RUN: llvm-mc -triple mips64el-unknown-linux -show-encoding -print-imm-hex \ +# RUN: %s | FileCheck %s # XFAIL: * .text text_label: # CHECK: text_label: - nor $4, $5, 0 -# CHECK: addiu $4, $zero, 0x0 # encoding: [0x00,0x00,0x04,0x24] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 1 -# CHECK-NEXT: addiu $4, $zero, 0x1 # encoding: [0x01,0x00,0x04,0x24] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0x8000 -# CHECK-NEXT: ori $4, $zero, 0x8000 # encoding: [0x00,0x80,0x04,0x34] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, -0x8000 -# CHECK-NEXT: addiu $4, $zero, -0x8000 # encoding: [0x00,0x80,0x04,0x24] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0x10000 -# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0x1a5a5 -# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] -# CHECK-NEXT: ori $4, $4, 0xa5a5 # encoding: [0xa5,0xa5,0x84,0x34] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0xFFFFFFFF -# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] -# CHECK-NEXT: dsrl32 $4, $4, 0x0 # encoding: [0x3e,0x20,0x04,0x00] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0xF0000000 -# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] -# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0x7FFFFFFF -# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] -# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0x7FFFFFFFFFFFFFFF -# FIXME: this is awfully inefficient... -# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] -# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] -# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] -# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] -# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] -# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0xFFFFFFFFFFFFFFFF -# CHECK-NEXT: addiu $4, $zero, -0x1 # encoding: [0xff,0xff,0x04,0x24] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0xF000000000000000 -# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] -# CHECK-NEXT: dsll $4, $4, 0x30 # encoding: [0x3c,0x24,0x04,0x00] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, ~(0xf0000000|0x0f000000|0x000000f0) -# CHECK-NEXT: addiu $4, $zero, -0x1 # encoding: [0xff,0xff,0x04,0x24] -# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] -# CHECK-NEXT: ori $4, $4, 0xff # encoding: [0xff,0x00,0x84,0x34] -# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] -# CHECK-NEXT: ori $4, $4, 0xff0f # encoding: [0x0f,0xff,0x84,0x34] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] - nor $4, $5, 0xff00ff00 -# CHECK-NEXT: ori $4, $zero, 0xff00 # encoding: [0x00,0xff,0x04,0x34] -# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] -# CHECK-NEXT: ori $4, $4, 0xff00 # encoding: [0x00,0xff,0x84,0x34] -# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] +# Two argument version of slt is not yet implemented for 64bit + slt $4, 0xFFFFFFFF +# CHECK-NOT: error: instruction requires a CPU feature not currently enabled + slt $4, 0xFFFFFFFFFFFFFFFF +# CHECK-NOT: error: instruction requires a CPU feature not currently enabled + sltu $4, 0xFFFFFFFF +# CHECK-NOT: error: instruction requires a CPU feature not currently enabled + sltu $4, 0xFFFFFFFFFFFFFFFF +# CHECK-NOT: error: instruction requires a CPU feature not currently enabled - slt $4, $5, -0x80000000 -# CHECK: lui $4, 0x8000 # encoding: [0x00,0x80,0x04,0x3c] -# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] - slt $4, $5, -0x8001 -# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] -# CHECK-NEXT: ori $4, $4, 0x7fff # encoding: [0xff,0x7f,0x84,0x34] -# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] - slt $4, $5, -0x8000 -# CHECK-NEXT: slti $4, $5, -0x8000 # encoding: [0x00,0x80,0xa4,0x28] - slt $4, $5, 0 -# CHECK-NEXT: slti $4, $5, 0x0 # encoding: [0x00,0x00,0xa4,0x28] - slt $4, $5, 0xFFFF -# CHECK-NEXT: ori $4, $zero, 0xffff # encoding: [0xff,0xff,0x04,0x34] -# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] - slt $4, $5, 0x10000 -# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] -# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] - slt $4, $5, 0xFFFFFFFF -# CHECK-NOT: slti $4, $5, -0x1 # encoding: [0xff,0xff,0xa4,0x28] - - sltu $4, $5, -0x80000000 -# CHECK: lui $4, 0x8000 # encoding: [0x00,0x80,0x04,0x3c] -# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] - sltu $4, $5, -0x8001 -# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] -# CHECK-NEXT: ori $4, $4, 0x7fff # encoding: [0xff,0x7f,0x84,0x34] -# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] - sltu $4, $5, -0x8000 -# CHECK-NEXT: sltiu $4, $5, -0x8000 # encoding: [0x00,0x80,0xa4,0x2c] - sltu $4, $5, 0 -# CHECK-NEXT: sltiu $4, $5, 0x0 # encoding: [0x00,0x00,0xa4,0x2c] - sltu $4, $5, 0xFFFF -# CHECK-NEXT: ori $4, $zero, 0xffff # encoding: [0xff,0xff,0x04,0x34] -# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] - sltu $4, $5, 0x10000 -# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] -# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] -# FIXME: should this be sign extended or not??? - sltu $4, $5, 0xFFFFFFFF -# CHECK-NOT: sltiu $4, $5, -0x1 # encoding: [0xff,0xff,0xa4,0x2c] Index: test/MC/Mips/mips64-instalias-imm-expanding.s =================================================================== --- test/MC/Mips/mips64-instalias-imm-expanding.s +++ test/MC/Mips/mips64-instalias-imm-expanding.s @@ -413,3 +413,170 @@ # CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] # CHECK-NEXT: ori $4, $4, 0xff0f # encoding: [0x0f,0xff,0x84,0x34] # CHECK-NEXT: xor $4, $4, $5 # encoding: [0x26,0x20,0x85,0x00] + + + nor $4, $5, 0 +# CHECK: addiu $4, $zero, 0x0 # encoding: [0x00,0x00,0x04,0x24] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 1 +# CHECK-NEXT: addiu $4, $zero, 0x1 # encoding: [0x01,0x00,0x04,0x24] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0x8000 +# CHECK-NEXT: ori $4, $zero, 0x8000 # encoding: [0x00,0x80,0x04,0x34] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, -0x8000 +# CHECK-NEXT: addiu $4, $zero, -0x8000 # encoding: [0x00,0x80,0x04,0x24] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0x10000 +# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0x1a5a5 +# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xa5a5 # encoding: [0xa5,0xa5,0x84,0x34] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0xFFFFFFFF +# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] +# CHECK-NEXT: dsrl32 $4, $4, 0x0 # encoding: [0x3e,0x20,0x04,0x00] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0xF0000000 +# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0x7FFFFFFF +# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0x7FFFFFFFFFFFFFFF +# FIXME: this is awfully inefficient... +# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0xFFFFFFFFFFFFFFFF +# CHECK-NEXT: addiu $4, $zero, -0x1 # encoding: [0xff,0xff,0x04,0x24] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0xF000000000000000 +# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x30 # encoding: [0x3c,0x24,0x04,0x00] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, ~(0xf0000000|0x0f000000|0x000000f0) +# CHECK-NEXT: addiu $4, $zero, -0x1 # encoding: [0xff,0xff,0x04,0x24] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff # encoding: [0xff,0x00,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff0f # encoding: [0x0f,0xff,0x84,0x34] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + nor $4, $5, 0xff00ff00 +# CHECK-NEXT: ori $4, $zero, 0xff00 # encoding: [0x00,0xff,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff00 # encoding: [0x00,0xff,0x84,0x34] +# CHECK-NEXT: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00] + + + slt $4, $5, -0x80000000 +# CHECK: lui $4, 0x8000 # encoding: [0x00,0x80,0x04,0x3c] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, -0x8001 +# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0x7fff # encoding: [0xff,0x7f,0x84,0x34] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, -0x8000 +# CHECK-NEXT: slti $4, $5, -0x8000 # encoding: [0x00,0x80,0xa4,0x28] + slt $4, $5, 0 +# CHECK-NEXT: slti $4, $5, 0x0 # encoding: [0x00,0x00,0xa4,0x28] + slt $4, $5, 0xFFFF +# CHECK-NEXT: ori $4, $zero, 0xffff # encoding: [0xff,0xff,0x04,0x34] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, 0x10000 +# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, 0xFFFFFFFF +# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] +# CHECK-NEXT: dsrl32 $4, $4, 0x0 # encoding: [0x3e,0x20,0x04,0x00] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, 0xF0000000 +# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, 0x7FFFFFFF +# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, 0x7FFFFFFFFFFFFFFF +# FIXME: this is awfully inefficient... +# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, 0xFFFFFFFFFFFFFFFF +# CHECK-NEXT: slti $4, $5, -0x1 # encoding: [0xff,0xff,0xa4,0x28] + slt $4, $5, 0xF000000000000000 +# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x30 # encoding: [0x3c,0x24,0x04,0x00] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + slt $4, $5, ~(0xf0000000|0x0f000000|0x000000f0) +# CHECK-NEXT: addiu $4, $zero, -0x1 # encoding: [0xff,0xff,0x04,0x24] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff # encoding: [0xff,0x00,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff0f # encoding: [0x0f,0xff,0x84,0x34] +# CHECK-NEXT: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00] + + + sltu $4, $5, -0x80000000 +# CHECK: lui $4, 0x8000 # encoding: [0x00,0x80,0x04,0x3c] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, -0x8001 +# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0x7fff # encoding: [0xff,0x7f,0x84,0x34] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, -0x8000 +# CHECK-NEXT: sltiu $4, $5, -0x8000 # encoding: [0x00,0x80,0xa4,0x2c] + sltu $4, $5, 0 +# CHECK-NEXT: sltiu $4, $5, 0x0 # encoding: [0x00,0x00,0xa4,0x2c] + sltu $4, $5, 0xFFFF +# CHECK-NEXT: ori $4, $zero, 0xffff # encoding: [0xff,0xff,0x04,0x34] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, 0x10000 +# CHECK-NEXT: lui $4, 0x1 # encoding: [0x01,0x00,0x04,0x3c] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, 0xFFFFFFFF +# CHECK-NEXT: lui $4, 0xffff # encoding: [0xff,0xff,0x04,0x3c] +# CHECK-NEXT: dsrl32 $4, $4, 0x0 # encoding: [0x3e,0x20,0x04,0x00] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, 0xF0000000 +# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, 0x7FFFFFFF +# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, 0x7FFFFFFFFFFFFFFF +# FIXME: this is awfully inefficient... +# CHECK-NEXT: lui $4, 0x7fff # encoding: [0xff,0x7f,0x04,0x3c] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xffff # encoding: [0xff,0xff,0x84,0x34] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, 0xFFFFFFFFFFFFFFFF +# CHECK-NEXT: sltiu $4, $5, -0x1 # encoding: [0xff,0xff,0xa4,0x2c] + sltu $4, $5, 0xF000000000000000 +# CHECK-NEXT: ori $4, $zero, 0xf000 # encoding: [0x00,0xf0,0x04,0x34] +# CHECK-NEXT: dsll $4, $4, 0x30 # encoding: [0x3c,0x24,0x04,0x00] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00] + sltu $4, $5, ~(0xf0000000|0x0f000000|0x000000f0) +# CHECK-NEXT: addiu $4, $zero, -0x1 # encoding: [0xff,0xff,0x04,0x24] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff # encoding: [0xff,0x00,0x84,0x34] +# CHECK-NEXT: dsll $4, $4, 0x10 # encoding: [0x38,0x24,0x04,0x00] +# CHECK-NEXT: ori $4, $4, 0xff0f # encoding: [0x0f,0xff,0x84,0x34] +# CHECK-NEXT: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00]