[mips] Handling of immediates bigger than 16 bits

Differential Revision: http://reviews.llvm.org/D10539

llvm-svn: 248706
This commit is contained in:
Zoran Jovanovic 2015-09-28 11:11:34 +00:00
parent 5c0f97d537
commit cdb64566cc
3 changed files with 388 additions and 0 deletions

View File

@ -202,6 +202,9 @@ class MipsAsmParser : public MCTargetAsmParser {
bool expandLoadStoreMultiple(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);
bool expandAliasImmediate(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);
bool expandBranchImm(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);
@ -1883,7 +1886,31 @@ bool MipsAsmParser::needsExpansion(MCInst &Inst) {
case Mips::DUDivMacro:
case Mips::Ulhu:
case Mips::Ulw:
case Mips::NORImm:
return true;
case Mips::ADDi:
case Mips::ADDiu:
case Mips::SLTi:
case Mips::SLTiu:
if ((Inst.getNumOperands() == 3) &&
Inst.getOperand(0).isReg() &&
Inst.getOperand(1).isReg() &&
Inst.getOperand(2).isImm()) {
int64_t ImmValue = Inst.getOperand(2).getImm();
return !isInt<16>(ImmValue);
}
return false;
case Mips::ANDi:
case Mips::ORi:
case Mips::XORi:
if ((Inst.getNumOperands() == 3) &&
Inst.getOperand(0).isReg() &&
Inst.getOperand(1).isReg() &&
Inst.getOperand(2).isImm()) {
int64_t ImmValue = Inst.getOperand(2).getImm();
return !isUInt<16>(ImmValue);
}
return false;
default:
return false;
}
@ -1957,6 +1984,15 @@ bool MipsAsmParser::expandInstruction(MCInst &Inst, SMLoc IDLoc,
return expandUlhu(Inst, IDLoc, Instructions);
case Mips::Ulw:
return expandUlw(Inst, IDLoc, Instructions);
case Mips::ADDi:
case Mips::ADDiu:
case Mips::ANDi:
case Mips::NORImm:
case Mips::ORi:
case Mips::SLTi:
case Mips::SLTiu:
case Mips::XORi:
return expandAliasImmediate(Inst, IDLoc, Instructions);
}
}
@ -3125,6 +3161,82 @@ bool MipsAsmParser::expandUlw(MCInst &Inst, SMLoc IDLoc,
return false;
}
bool MipsAsmParser::expandAliasImmediate(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions) {
assert (Inst.getNumOperands() == 3 && "Invalid operand count");
assert (Inst.getOperand(0).isReg() &&
Inst.getOperand(1).isReg() &&
Inst.getOperand(2).isImm() && "Invalid instruction operand.");
unsigned ATReg = Mips::NoRegister;
unsigned FinalDstReg = Mips::NoRegister;
unsigned DstReg = Inst.getOperand(0).getReg();
unsigned SrcReg = Inst.getOperand(1).getReg();
int64_t ImmValue = Inst.getOperand(2).getImm();
bool Is32Bit = isInt<32>(ImmValue) || isUInt<32>(ImmValue);
unsigned FinalOpcode = Inst.getOpcode();
if (DstReg == SrcReg) {
ATReg = getATReg(Inst.getLoc());
if (!ATReg)
return true;
FinalDstReg = DstReg;
DstReg = ATReg;
}
if (!loadImmediate(ImmValue, DstReg, Mips::NoRegister, Is32Bit, false, Inst.getLoc(), Instructions)) {
switch (FinalOpcode) {
default:
llvm_unreachable("unimplemented expansion");
case (Mips::ADDi):
FinalOpcode = Mips::ADD;
break;
case (Mips::ADDiu):
FinalOpcode = Mips::ADDu;
break;
case (Mips::ANDi):
FinalOpcode = Mips::AND;
break;
case (Mips::NORImm):
FinalOpcode = Mips::NOR;
break;
case (Mips::ORi):
FinalOpcode = Mips::OR;
break;
case (Mips::SLTi):
FinalOpcode = Mips::SLT;
break;
case (Mips::SLTiu):
FinalOpcode = Mips::SLTu;
break;
case (Mips::XORi):
FinalOpcode = Mips::XOR;
break;
}
MCInst tmpInst;
tmpInst.clear();
tmpInst.setLoc(Inst.getLoc());
tmpInst.setOpcode(FinalOpcode);
if (FinalDstReg == Mips::NoRegister) {
tmpInst.addOperand(MCOperand::createReg(DstReg));
tmpInst.addOperand(MCOperand::createReg(DstReg));
tmpInst.addOperand(MCOperand::createReg(SrcReg));
} else {
tmpInst.addOperand(MCOperand::createReg(FinalDstReg));
tmpInst.addOperand(MCOperand::createReg(FinalDstReg));
tmpInst.addOperand(MCOperand::createReg(DstReg));
}
Instructions.push_back(tmpInst);
return false;
}
return true;
}
void MipsAsmParser::createNop(bool hasShortDelaySlot, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions) {
MCInst NopInst;

View File

@ -1770,6 +1770,9 @@ def JalTwoReg : MipsAsmPseudoInst<(outs GPR32Opnd:$rd), (ins GPR32Opnd:$rs),
def JalOneReg : MipsAsmPseudoInst<(outs), (ins GPR32Opnd:$rs),
"jal\t$rs"> ;
def NORImm : MipsAsmPseudoInst<(outs), (ins GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm),
"nor\t$rs, $rt, $imm"> ;
let hasDelaySlot = 1 in {
def BneImm : MipsAsmPseudoInst<(outs GPR32Opnd:$rt),
(ins imm64:$imm64, brtarget:$offset),

View File

@ -0,0 +1,273 @@
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -show-encoding | FileCheck %s
.text
text_label:
add $4, -0x80000000
# CHECK: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
# CHECK: add $4, $4, $1 # encoding: [0x20,0x20,0x81,0x00]
add $4, -0x8001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 32767 # encoding: [0xff,0x7f,0x21,0x34]
# CHECK: add $4, $4, $1 # encoding: [0x20,0x20,0x81,0x00]
add $4, -0x8000
# CHECK: addi $4, $4, -32768 # encoding: [0x00,0x80,0x84,0x20]
add $4, 0
# CHECK: addi $4, $4, 0 # encoding: [0x00,0x00,0x84,0x20]
add $4, 0xFFFF
# CHECK: ori $1, $zero, 65535 # encoding: [0xff,0xff,0x01,0x34]
# CHECK: add $4, $4, $1 # encoding: [0x20,0x20,0x81,0x00]
add $4, 0x10000
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: add $4, $4, $1 # encoding: [0x20,0x20,0x81,0x00]
add $4, 0xFFFFFFFF
# CHECK: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
# CHECK: add $4, $4, $1 # encoding: [0x20,0x20,0x81,0x00]
add $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: add $4, $4, $5 # encoding: [0x20,0x20,0x85,0x00]
add $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: add $4, $4, $5 # encoding: [0x20,0x20,0x85,0x00]
add $4, $5, -0x8000
# CHECK: addi $4, $5, -32768 # encoding: [0x00,0x80,0xa4,0x20]
add $4, $5, 0
# CHECK: addi $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x20]
add $4, $5, 0xFFFF
# CHECK: ori $4, $zero, 65535 # encoding: [0xff,0xff,0x04,0x34]
# CHECK: add $4, $4, $5 # encoding: [0x20,0x20,0x85,0x00]
add $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: add $4, $4, $5 # encoding: [0x20,0x20,0x85,0x00]
add $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: add $4, $4, $5 # encoding: [0x20,0x20,0x85,0x00]
addu $4, -0x80000000
# CHECK: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
# CHECK: addu $4, $4, $1 # encoding: [0x21,0x20,0x81,0x00]
addu $4, -0x8001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 32767 # encoding: [0xff,0x7f,0x21,0x34]
# CHECK: addu $4, $4, $1 # encoding: [0x21,0x20,0x81,0x00]
addu $4, -0x8000
# CHECK: addiu $4, $4, -32768 # encoding: [0x00,0x80,0x84,0x24]
addu $4, 0
# CHECK: addiu $4, $4, 0 # encoding: [0x00,0x00,0x84,0x24]
addu $4, 0xFFFF
# CHECK: ori $1, $zero, 65535 # encoding: [0xff,0xff,0x01,0x34]
# CHECK: addu $4, $4, $1 # encoding: [0x21,0x20,0x81,0x00]
addu $4, 0x10000
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addu $4, $4, $1 # encoding: [0x21,0x20,0x81,0x00]
addu $4, 0xFFFFFFFF
# CHECK: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
# CHECK: addu $4, $4, $1 # encoding: [0x21,0x20,0x81,0x00]
addu $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: addu $4, $4, $5 # encoding: [0x21,0x20,0x85,0x00]
addu $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: addu $4, $4, $5 # encoding: [0x21,0x20,0x85,0x00]
addu $4, $5, -0x8000
# CHECK: addiu $4, $5, -32768 # encoding: [0x00,0x80,0xa4,0x24]
addu $4, $5, 0
# CHECK: addiu $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x24]
addu $4, $5, 0xFFFF
# CHECK: ori $4, $zero, 65535 # encoding: [0xff,0xff,0x04,0x34]
# CHECK: addu $4, $4, $5 # encoding: [0x21,0x20,0x85,0x00]
addu $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: addu $4, $4, $5 # encoding: [0x21,0x20,0x85,0x00]
addu $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: addu $4, $4, $5 # encoding: [0x21,0x20,0x85,0x00]
and $4, -0x80000000
# CHECK: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
# CHECK: and $4, $4, $1 # encoding: [0x24,0x20,0x81,0x00]
and $4, -0x8001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 32767 # encoding: [0xff,0x7f,0x21,0x34]
# CHECK: and $4, $4, $1 # encoding: [0x24,0x20,0x81,0x00]
and $4, -0x8000
# CHECK: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
and $4, 0
# CHECK: andi $4, $4, 0 # encoding: [0x00,0x00,0x84,0x30]
and $4, 0xFFFF
# CHECK: andi $4, $4, 65535 # encoding: [0xff,0xff,0x84,0x30]
and $4, 0x10000
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: and $4, $4, $1 # encoding: [0x24,0x20,0x81,0x00]
and $4, 0xFFFFFFFF
# CHECK: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
# CHECK: and $4, $4, $1 # encoding: [0x24,0x20,0x81,0x00]
and $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: and $4, $4, $5 # encoding: [0x24,0x20,0x85,0x00]
and $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: and $4, $4, $5 # encoding: [0x24,0x20,0x85,0x00]
and $4, $5, -0x8000
# CHECK: addiu $4, $zero, -32768 # encoding: [0x00,0x80,0x04,0x24]
# CHECK: and $4, $4, $5 # encoding: [0x24,0x20,0x85,0x00]
and $4, $5, 0
# CHECK: andi $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x30]
and $4, $5, 0xFFFF
# CHECK: andi $4, $5, 65535 # encoding: [0xff,0xff,0xa4,0x30]
and $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: and $4, $4, $5 # encoding: [0x24,0x20,0x85,0x00]
and $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: and $4, $4, $5 # encoding: [0x24,0x20,0x85,0x00]
nor $4, $5, 0
# CHECK: addiu $4, $zero, 0 # encoding: [0x00,0x00,0x04,0x24]
# CHECK: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00]
nor $4, $5, 1
# CHECK: addiu $4, $zero, 1 # encoding: [0x01,0x00,0x04,0x24]
# CHECK: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00]
nor $4, $5, 0x8000
# CHECK: ori $4, $zero, 32768 # encoding: [0x00,0x80,0x04,0x34]
# CHECK: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00]
nor $4, $5, -0x8000
# CHECK: addiu $4, $zero, -32768 # encoding: [0x00,0x80,0x04,0x24]
# CHECK: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00]
nor $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00]
nor $4, $5, 0x1a5a5
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: ori $4, $4, 42405 # encoding: [0xa5,0xa5,0x84,0x34]
# CHECK: nor $4, $4, $5 # encoding: [0x27,0x20,0x85,0x00]
or $4, -0x80000000
# CHECK: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
# CHECK: or $4, $4, $1 # encoding: [0x25,0x20,0x81,0x00]
or $4, -0x8001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 32767 # encoding: [0xff,0x7f,0x21,0x34]
# CHECK: or $4, $4, $1 # encoding: [0x25,0x20,0x81,0x00]
or $4, -0x8000
# CHECK: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
# CHECK: or $4, $4, $1 # encoding: [0x25,0x20,0x81,0x00]
or $4, 0
# CHECK: ori $4, $4, 0 # encoding: [0x00,0x00,0x84,0x34]
or $4, 0xFFFF
# CHECK: ori $4, $4, 65535 # encoding: [0xff,0xff,0x84,0x34]
or $4, 0x10000
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: or $4, $4, $1 # encoding: [0x25,0x20,0x81,0x00]
or $4, 0xFFFFFFFF
# CHECK: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
# CHECK: or $4, $4, $1 # encoding: [0x25,0x20,0x81,0x00]
or $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: or $4, $4, $5 # encoding: [0x25,0x20,0x85,0x00]
or $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: or $4, $4, $5 # encoding: [0x25,0x20,0x85,0x00]
or $4, $5, -0x8000
# CHECK: addiu $4, $zero, -32768 # encoding: [0x00,0x80,0x04,0x24]
# CHECK: or $4, $4, $5 # encoding: [0x25,0x20,0x85,0x00]
or $4, $5, 0
# CHECK: ori $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x34]
or $4, $5, 0xFFFF
# CHECK: ori $4, $5, 65535 # encoding: [0xff,0xff,0xa4,0x34]
or $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: or $4, $4, $5 # encoding: [0x25,0x20,0x85,0x00]
or $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: or $4, $4, $5 # encoding: [0x25,0x20,0x85,0x00]
slt $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00]
slt $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00]
slt $4, $5, -0x8000
# CHECK: slti $4, $5, -32768 # encoding: [0x00,0x80,0xa4,0x28]
slt $4, $5, 0
# CHECK: slti $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x28]
slt $4, $5, 0xFFFF
# CHECK: ori $4, $zero, 65535 # encoding: [0xff,0xff,0x04,0x34]
slt $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00]
slt $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: slt $4, $4, $5 # encoding: [0x2a,0x20,0x85,0x00]
sltu $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00]
sltu $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00]
sltu $4, $5, -0x8000
# CHECK: sltiu $4, $5, -32768 # encoding: [0x00,0x80,0xa4,0x2c]
sltu $4, $5, 0
# CHECK: sltiu $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x2c]
sltu $4, $5, 0xFFFF
# CHECK: ori $4, $zero, 65535 # encoding: [0xff,0xff,0x04,0x34]
sltu $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00]
sltu $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: sltu $4, $4, $5 # encoding: [0x2b,0x20,0x85,0x00]
xor $4, -0x80000000
# CHECK: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
# CHECK: xor $4, $4, $1 # encoding: [0x26,0x20,0x81,0x00]
xor $4, -0x8001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 32767 # encoding: [0xff,0x7f,0x21,0x34]
# CHECK: xor $4, $4, $1 # encoding: [0x26,0x20,0x81,0x00]
xor $4, -0x8000
# CHECK: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
xor $4, 0
# CHECK: xori $4, $4, 0 # encoding: [0x00,0x00,0x84,0x38]
xor $4, 0xFFFF
# CHECK: xori $4, $4, 65535 # encoding: [0xff,0xff,0x84,0x38]
xor $4, 0x10000
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: xor $4, $4, $1 # encoding: [0x26,0x20,0x81,0x00]
xor $4, 0xFFFFFFFF
# CHECK: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
# CHECK: xor $4, $4, $1 # encoding: [0x26,0x20,0x81,0x00]
xor $4, $5, -0x80000000
# CHECK: lui $4, 32768 # encoding: [0x00,0x80,0x04,0x3c]
# CHECK: xor $4, $4, $5 # encoding: [0x26,0x20,0x85,0x00]
xor $4, $5, -0x8001
# CHECK: lui $4, 65535 # encoding: [0xff,0xff,0x04,0x3c]
# CHECK: ori $4, $4, 32767 # encoding: [0xff,0x7f,0x84,0x34]
# CHECK: xor $4, $4, $5 # encoding: [0x26,0x20,0x85,0x00]
xor $4, $5, -0x8000
# CHECK: addiu $4, $zero, -32768 # encoding: [0x00,0x80,0x04,0x24]
# CHECK: xor $4, $4, $5 # encoding: [0x26,0x20,0x85,0x00]
xor $4, $5, 0
# CHECK: xori $4, $5, 0 # encoding: [0x00,0x00,0xa4,0x38]
xor $4, $5, 0xFFFF
# CHECK: xori $4, $5, 65535 # encoding: [0xff,0xff,0xa4,0x38]
xor $4, $5, 0x10000
# CHECK: lui $4, 1 # encoding: [0x01,0x00,0x04,0x3c]
# CHECK: xor $4, $4, $5 # encoding: [0x26,0x20,0x85,0x00]
xor $4, $5, 0xFFFFFFFF
# CHECK: addiu $4, $zero, -1 # encoding: [0xff,0xff,0x04,0x24]
# CHECK: xor $4, $4, $5 # encoding: [0x26,0x20,0x85,0x00]