Skip to content

Commit 0a23998

Browse files
author
Stefan Maksimovic
committedJul 9, 2018
[mips] Addition of the [d]rem and [d]remu instructions
Related to http://reviews.llvm.org/D15772 Depends on http://reviews.llvm.org/D16889 Adds [D]REM[U] instructions. Patch By: Srdjan Obucina Contributions from: Simon Dardis Differential Revision: https://reviews.llvm.org/D17036 llvm-svn: 336545
1 parent 54077dc commit 0a23998

File tree

8 files changed

+853
-28
lines changed

8 files changed

+853
-28
lines changed
 

‎llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp

+54-25
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,9 @@ class MipsAsmParser : public MCTargetAsmParser {
257257
bool expandCondBranches(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
258258
const MCSubtargetInfo *STI);
259259

260-
bool expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
261-
const MCSubtargetInfo *STI, const bool IsMips64,
262-
const bool Signed);
260+
bool expandDivRem(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
261+
const MCSubtargetInfo *STI, const bool IsMips64,
262+
const bool Signed);
263263

264264
bool expandTrunc(MCInst &Inst, bool IsDouble, bool Is64FPU, SMLoc IDLoc,
265265
MCStreamer &Out, const MCSubtargetInfo *STI);
@@ -2431,20 +2431,28 @@ MipsAsmParser::tryExpandInstruction(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
24312431
return expandCondBranches(Inst, IDLoc, Out, STI) ? MER_Fail : MER_Success;
24322432
case Mips::SDivMacro:
24332433
case Mips::SDivIMacro:
2434-
return expandDiv(Inst, IDLoc, Out, STI, false, true) ? MER_Fail
2435-
: MER_Success;
2434+
case Mips::SRemMacro:
2435+
case Mips::SRemIMacro:
2436+
return expandDivRem(Inst, IDLoc, Out, STI, false, true) ? MER_Fail
2437+
: MER_Success;
24362438
case Mips::DSDivMacro:
24372439
case Mips::DSDivIMacro:
2438-
return expandDiv(Inst, IDLoc, Out, STI, true, true) ? MER_Fail
2439-
: MER_Success;
2440+
case Mips::DSRemMacro:
2441+
case Mips::DSRemIMacro:
2442+
return expandDivRem(Inst, IDLoc, Out, STI, true, true) ? MER_Fail
2443+
: MER_Success;
24402444
case Mips::UDivMacro:
24412445
case Mips::UDivIMacro:
2442-
return expandDiv(Inst, IDLoc, Out, STI, false, false) ? MER_Fail
2443-
: MER_Success;
2446+
case Mips::URemMacro:
2447+
case Mips::URemIMacro:
2448+
return expandDivRem(Inst, IDLoc, Out, STI, false, false) ? MER_Fail
2449+
: MER_Success;
24442450
case Mips::DUDivMacro:
24452451
case Mips::DUDivIMacro:
2446-
return expandDiv(Inst, IDLoc, Out, STI, true, false) ? MER_Fail
2447-
: MER_Success;
2452+
case Mips::DURemMacro:
2453+
case Mips::DURemIMacro:
2454+
return expandDivRem(Inst, IDLoc, Out, STI, true, false) ? MER_Fail
2455+
: MER_Success;
24482456
case Mips::PseudoTRUNC_W_S:
24492457
return expandTrunc(Inst, false, false, IDLoc, Out, STI) ? MER_Fail
24502458
: MER_Success;
@@ -3927,9 +3935,9 @@ bool MipsAsmParser::expandCondBranches(MCInst &Inst, SMLoc IDLoc,
39273935
// The destination register can only be $zero when expanding (S)DivIMacro or
39283936
// D(S)DivMacro.
39293937

3930-
bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
3931-
const MCSubtargetInfo *STI, const bool IsMips64,
3932-
const bool Signed) {
3938+
bool MipsAsmParser::expandDivRem(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
3939+
const MCSubtargetInfo *STI, const bool IsMips64,
3940+
const bool Signed) {
39333941
MipsTargetStreamer &TOut = getTargetStreamer();
39343942

39353943
warnIfNoMacro(IDLoc);
@@ -3969,6 +3977,17 @@ bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
39693977

39703978
bool UseTraps = useTraps();
39713979

3980+
unsigned Opcode = Inst.getOpcode();
3981+
bool isDiv = Opcode == Mips::SDivMacro || Opcode == Mips::SDivIMacro ||
3982+
Opcode == Mips::UDivMacro || Opcode == Mips::UDivIMacro ||
3983+
Opcode == Mips::DSDivMacro || Opcode == Mips::DSDivIMacro ||
3984+
Opcode == Mips::DUDivMacro || Opcode == Mips::DUDivIMacro;
3985+
3986+
bool isRem = Opcode == Mips::SRemMacro || Opcode == Mips::SRemIMacro ||
3987+
Opcode == Mips::URemMacro || Opcode == Mips::URemIMacro ||
3988+
Opcode == Mips::DSRemMacro || Opcode == Mips::DSRemIMacro ||
3989+
Opcode == Mips::DURemMacro || Opcode == Mips::DURemIMacro;
3990+
39723991
if (RtOp.isImm()) {
39733992
unsigned ATReg = getATReg(IDLoc);
39743993
if (!ATReg)
@@ -3982,27 +4001,30 @@ bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
39824001
return false;
39834002
}
39844003

3985-
if (ImmValue == 1) {
4004+
if (isRem && (ImmValue == 1 || (Signed && (ImmValue == -1)))) {
4005+
TOut.emitRRR(Mips::OR, RdReg, ZeroReg, ZeroReg, IDLoc, STI);
4006+
return false;
4007+
} else if (isDiv && ImmValue == 1) {
39864008
TOut.emitRRR(Mips::OR, RdReg, RsReg, Mips::ZERO, IDLoc, STI);
39874009
return false;
3988-
} else if (Signed && ImmValue == -1) {
4010+
} else if (isDiv && Signed && ImmValue == -1) {
39894011
TOut.emitRRR(SubOp, RdReg, ZeroReg, RsReg, IDLoc, STI);
39904012
return false;
39914013
} else {
39924014
if (loadImmediate(ImmValue, ATReg, Mips::NoRegister, isInt<32>(ImmValue),
39934015
false, Inst.getLoc(), Out, STI))
39944016
return true;
39954017
TOut.emitRR(DivOp, RsReg, ATReg, IDLoc, STI);
3996-
TOut.emitR(Mips::MFLO, RdReg, IDLoc, STI);
4018+
TOut.emitR(isDiv ? Mips::MFLO : Mips::MFHI, RdReg, IDLoc, STI);
39974019
return false;
39984020
}
39994021
return true;
40004022
}
40014023

4002-
// If the macro expansion of (d)div(u) would always trap or break, insert
4003-
// the trap/break and exit. This gives a different result to GAS. GAS has
4004-
// an inconsistency/missed optimization in that not all cases are handled
4005-
// equivalently. As the observed behaviour is the same, we're ok.
4024+
// If the macro expansion of (d)div(u) or (d)rem(u) would always trap or
4025+
// break, insert the trap/break and exit. This gives a different result to
4026+
// GAS. GAS has an inconsistency/missed optimization in that not all cases
4027+
// are handled equivalently. As the observed behaviour is the same, we're ok.
40064028
if (RtReg == Mips::ZERO || RtReg == Mips::ZERO_64) {
40074029
if (UseTraps) {
40084030
TOut.emitRRI(Mips::TEQ, ZeroReg, ZeroReg, 0x7, IDLoc, STI);
@@ -4012,6 +4034,13 @@ bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
40124034
return false;
40134035
}
40144036

4037+
// (d)rem(u) $0, $X, $Y is a special case. Like div $zero, $X, $Y, it does
4038+
// not expand to macro sequence.
4039+
if (isRem && (RdReg == Mips::ZERO || RdReg == Mips::ZERO_64)) {
4040+
TOut.emitRR(DivOp, RsReg, RtReg, IDLoc, STI);
4041+
return false;
4042+
}
4043+
40154044
// Temporary label for first branch traget
40164045
MCContext &Context = TOut.getStreamer().getContext();
40174046
MCSymbol *BrTarget;
@@ -4035,7 +4064,7 @@ bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
40354064
if (!UseTraps)
40364065
TOut.getStreamer().EmitLabel(BrTarget);
40374066

4038-
TOut.emitR(Mips::MFLO, RdReg, IDLoc, STI);
4067+
TOut.emitR(isDiv ? Mips::MFLO : Mips::MFHI, RdReg, IDLoc, STI);
40394068
return false;
40404069
}
40414070

@@ -4058,7 +4087,7 @@ bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
40584087

40594088
if (IsMips64) {
40604089
TOut.emitRRI(Mips::ADDiu, ATReg, ZeroReg, 1, IDLoc, STI);
4061-
TOut.emitRRI(Mips::DSLL32, ATReg, ATReg, 0x1f, IDLoc, STI);
4090+
TOut.emitDSLL(ATReg, ATReg, 63, IDLoc, STI);
40624091
} else {
40634092
TOut.emitRI(Mips::LUi, ATReg, (uint16_t)0x8000, IDLoc, STI);
40644093
}
@@ -4068,12 +4097,12 @@ bool MipsAsmParser::expandDiv(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
40684097
else {
40694098
// Branch to the mflo instruction.
40704099
TOut.emitRRX(Mips::BNE, RsReg, ATReg, LabelOpEnd, IDLoc, STI);
4071-
TOut.emitRRI(Mips::SLL, ZeroReg, ZeroReg, 0, IDLoc, STI);
4100+
TOut.emitNop(IDLoc, STI);
40724101
TOut.emitII(Mips::BREAK, 0x6, 0, IDLoc, STI);
40734102
}
40744103

40754104
TOut.getStreamer().EmitLabel(BrTargetEnd);
4076-
TOut.emitR(Mips::MFLO, RdReg, IDLoc, STI);
4105+
TOut.emitR(isDiv ? Mips::MFLO : Mips::MFHI, RdReg, IDLoc, STI);
40774106
return false;
40784107
}
40794108

‎llvm/lib/Target/Mips/Mips64InstrInfo.td

+32
Original file line numberDiff line numberDiff line change
@@ -1032,6 +1032,38 @@ let AdditionalPredicates = [NotInMicroMips] in {
10321032
GPR64Opnd:$rd,
10331033
imm64:$imm), 0>,
10341034
ISA_MIPS3_NOT_32R6_64R6;
1035+
def DSRemMacro : MipsAsmPseudoInst<(outs GPR64Opnd:$rd),
1036+
(ins GPR64Opnd:$rs, GPR64Opnd:$rt),
1037+
"drem\t$rd, $rs, $rt">,
1038+
ISA_MIPS3_NOT_32R6_64R6;
1039+
def DSRemIMacro : MipsAsmPseudoInst<(outs GPR64Opnd:$rd),
1040+
(ins GPR64Opnd:$rs, simm32_relaxed:$imm),
1041+
"drem\t$rd, $rs, $imm">,
1042+
ISA_MIPS3_NOT_32R6_64R6;
1043+
def DURemMacro : MipsAsmPseudoInst<(outs GPR64Opnd:$rd),
1044+
(ins GPR64Opnd:$rs, GPR64Opnd:$rt),
1045+
"dremu\t$rd, $rs, $rt">,
1046+
ISA_MIPS3_NOT_32R6_64R6;
1047+
def DURemIMacro : MipsAsmPseudoInst<(outs GPR64Opnd:$rd),
1048+
(ins GPR64Opnd:$rs, simm32_relaxed:$imm),
1049+
"dremu\t$rd, $rs, $imm">,
1050+
ISA_MIPS3_NOT_32R6_64R6;
1051+
def : MipsInstAlias<"drem $rt, $rs", (DSRemMacro GPR64Opnd:$rt,
1052+
GPR64Opnd:$rt,
1053+
GPR64Opnd:$rs), 0>,
1054+
ISA_MIPS3_NOT_32R6_64R6;
1055+
def : MipsInstAlias<"drem $rd, $imm", (DSRemIMacro GPR64Opnd:$rd,
1056+
GPR64Opnd:$rd,
1057+
simm32_relaxed:$imm), 0>,
1058+
ISA_MIPS3_NOT_32R6_64R6;
1059+
def : MipsInstAlias<"dremu $rt, $rs", (DURemMacro GPR64Opnd:$rt,
1060+
GPR64Opnd:$rt,
1061+
GPR64Opnd:$rs), 0>,
1062+
ISA_MIPS3_NOT_32R6_64R6;
1063+
def : MipsInstAlias<"dremu $rd, $imm", (DURemIMacro GPR64Opnd:$rd,
1064+
GPR64Opnd:$rd,
1065+
simm32_relaxed:$imm), 0>,
1066+
ISA_MIPS3_NOT_32R6_64R6;
10351067
}
10361068

10371069
def NORImm64 : NORIMM_DESC_BASE<GPR64Opnd, imm64>, GPR_64;

‎llvm/lib/Target/Mips/MipsInstrInfo.td

+30
Original file line numberDiff line numberDiff line change
@@ -2950,6 +2950,36 @@ def : MipsInstAlias<"divu $rd, $imm", (UDivIMacro GPR32Opnd:$rd, GPR32Opnd:$rd,
29502950
simm32:$imm), 0>,
29512951
ISA_MIPS1_NOT_32R6_64R6;
29522952

2953+
def SRemMacro : MipsAsmPseudoInst<(outs GPR32Opnd:$rd),
2954+
(ins GPR32Opnd:$rs, GPR32Opnd:$rt),
2955+
"rem\t$rd, $rs, $rt">,
2956+
ISA_MIPS1_NOT_32R6_64R6;
2957+
def SRemIMacro : MipsAsmPseudoInst<(outs GPR32Opnd:$rd),
2958+
(ins GPR32Opnd:$rs, simm32_relaxed:$imm),
2959+
"rem\t$rd, $rs, $imm">,
2960+
ISA_MIPS1_NOT_32R6_64R6;
2961+
def URemMacro : MipsAsmPseudoInst<(outs GPR32Opnd:$rd),
2962+
(ins GPR32Opnd:$rs, GPR32Opnd:$rt),
2963+
"remu\t$rd, $rs, $rt">,
2964+
ISA_MIPS1_NOT_32R6_64R6;
2965+
def URemIMacro : MipsAsmPseudoInst<(outs GPR32Opnd:$rd),
2966+
(ins GPR32Opnd:$rs, simm32_relaxed:$imm),
2967+
"remu\t$rd, $rs, $imm">,
2968+
ISA_MIPS1_NOT_32R6_64R6;
2969+
2970+
def : MipsInstAlias<"rem $rt, $rs", (SRemMacro GPR32Opnd:$rt, GPR32Opnd:$rt,
2971+
GPR32Opnd:$rs), 0>,
2972+
ISA_MIPS1_NOT_32R6_64R6;
2973+
def : MipsInstAlias<"rem $rd, $imm", (SRemIMacro GPR32Opnd:$rd, GPR32Opnd:$rd,
2974+
simm32_relaxed:$imm), 0>,
2975+
ISA_MIPS1_NOT_32R6_64R6;
2976+
def : MipsInstAlias<"remu $rt, $rs", (URemMacro GPR32Opnd:$rt, GPR32Opnd:$rt,
2977+
GPR32Opnd:$rs), 0>,
2978+
ISA_MIPS1_NOT_32R6_64R6;
2979+
def : MipsInstAlias<"remu $rd, $imm", (URemIMacro GPR32Opnd:$rd, GPR32Opnd:$rd,
2980+
simm32_relaxed:$imm), 0>,
2981+
ISA_MIPS1_NOT_32R6_64R6;
2982+
29532983
def Ulh : MipsAsmPseudoInst<(outs GPR32Opnd:$rt), (ins mem:$addr),
29542984
"ulh\t$rt, $addr">; //, ISA_MIPS1_NOT_32R6_64R6;
29552985

‎llvm/test/MC/Mips/macro-ddiv.s

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# CHECK-NOTRAP: dsll32 $1, $1, 31 # encoding: [0x00,0x01,0x0f,0xfc]
1717
# CHECK-NOTRAP: bne $25, $1, .Ltmp1 # encoding: [0x17,0x21,A,A]
1818
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp1-4, kind: fixup_Mips_PC16
19-
# CHECK-NOTRAP: sll $zero, $zero, 0 # encoding: [0x00,0x00,0x00,0x00]
19+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
2020
# CHECK-NOTRAP: break 6 # encoding: [0x00,0x06,0x00,0x0d]
2121
# CHECK-NOTRAP: .Ltmp1
2222
# CHECK-NOTRAP: mflo $25 # encoding: [0x00,0x00,0xc8,0x12]
@@ -45,7 +45,7 @@
4545
# CHECK-NOTRAP: dsll32 $1, $1, 31 # encoding: [0x00,0x01,0x0f,0xfc]
4646
# CHECK-NOTRAP: bne $24, $1, .Ltmp3 # encoding: [0x17,0x01,A,A]
4747
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp3-4, kind: fixup_Mips_PC16
48-
# CHECK-NOTRAP: sll $zero, $zero, 0 # encoding: [0x00,0x00,0x00,0x00]
48+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
4949
# CHECK-NOTRAP: break 6 # encoding: [0x00,0x06,0x00,0x0d]
5050
# CHECK-NOTRAP: .Ltmp3
5151
# CHECK-NOTRAP: mflo $24 # encoding: [0x00,0x00,0xc0,0x12]
@@ -211,7 +211,7 @@
211211
# CHECK-NOTRAP: dsll32 $1, $1, 31 # encoding: [0x00,0x01,0x0f,0xfc]
212212
# CHECK-NOTRAP: bne $5, $1, .Ltmp7 # encoding: [0x14,0xa1,A,A]
213213
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp7-4, kind: fixup_Mips_PC16
214-
# CHECK-NOTRAP: sll $zero, $zero, 0 # encoding: [0x00,0x00,0x00,0x00]
214+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
215215
# CHECK-NOTRAP: break 6 # encoding: [0x00,0x06,0x00,0x0d]
216216
# CHECK-NOTRAP: .Ltmp7:
217217
# CHECK-NOTRAP: mflo $4 # encoding: [0x00,0x00,0x20,0x12]

‎llvm/test/MC/Mips/macro-drem.s

+244
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
# RUN: llvm-mc %s -triple=mips64el-unknown-linux -show-encoding -mcpu=mips64 | \
2+
# RUN: FileCheck %s --check-prefix=CHECK-NOTRAP
3+
# RUN: llvm-mc %s -triple=mips64el-unknown-linux -show-encoding -mcpu=mips64 \
4+
# RUN: -mattr=+use-tcc-in-div | FileCheck %s --check-prefix=CHECK-TRAP
5+
6+
drem $4,$5
7+
# CHECK-NOTRAP: bne $5, $zero, .Ltmp0 # encoding: [A,A,0xa0,0x14]
8+
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp0-4, kind: fixup_Mips_PC16
9+
# CHECK-NOTRAP: ddiv $zero, $4, $5 # encoding: [0x1e,0x00,0x85,0x00]
10+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
11+
# CHECK-NOTRAP: .Ltmp0
12+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
13+
# CHECK-NOTRAP: bne $5, $1, .Ltmp1 # encoding: [A,A,0xa1,0x14]
14+
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp1-4, kind: fixup_Mips_PC16
15+
# CHECK-NOTRAP: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
16+
# CHECK-NOTRAP: dsll32 $1, $1, 31 # encoding: [0xfc,0x0f,0x01,0x00]
17+
# CHECK-NOTRAP: bne $4, $1, .Ltmp1 # encoding: [A,A,0x81,0x14]
18+
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp1-4, kind: fixup_Mips_PC16
19+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
20+
# CHECK-NOTRAP: break 6 # encoding: [0x0d,0x00,0x06,0x00]
21+
# CHECK-NOTRAP: .Ltmp1
22+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
23+
24+
drem $4,$0
25+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
26+
27+
drem $4,0
28+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
29+
30+
drem $0,0
31+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
32+
33+
drem $4,1
34+
# CHECK-NOTRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
35+
36+
drem $4,-1
37+
# CHECK-NOTRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
38+
39+
drem $4,2
40+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
41+
# CHECK-NOTRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
42+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
43+
44+
drem $4,0x10000
45+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
46+
# CHECK-NOTRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
47+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
48+
49+
drem $4,0x1a5a5
50+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
51+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
52+
# CHECK-NOTRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
53+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
54+
55+
drem $4,0x8000
56+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
57+
# CHECK-NOTRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
58+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
59+
60+
drem $4,-0x8000
61+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
62+
# CHECK-NOTRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
63+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
64+
65+
drem $4,$5,$6
66+
# CHECK-NOTRAP: bne $6, $zero, .Ltmp2 # encoding: [A,A,0xc0,0x14]
67+
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp2-4, kind: fixup_Mips_PC16
68+
# CHECK-NOTRAP: ddiv $zero, $5, $6 # encoding: [0x1e,0x00,0xa6,0x00]
69+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
70+
# CHECK-NOTRAP: .Ltmp2:
71+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
72+
# CHECK-NOTRAP: bne $6, $1, .Ltmp3 # encoding: [A,A,0xc1,0x14]
73+
# CHECK-NOTRAP: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
74+
# CHECK-NOTRAP: dsll32 $1, $1, 31 # encoding: [0xfc,0x0f,0x01,0x00]
75+
# CHECK-NOTRAP: bne $5, $1, .Ltmp3 # encoding: [A,A,0xa1,0x14]
76+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
77+
# CHECK-NOTRAP: break 6 # encoding: [0x0d,0x00,0x06,0x00]
78+
# CHECK-NOTRAP: .Ltmp3:
79+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
80+
81+
drem $4,$5,$0
82+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
83+
84+
drem $4,$0,$0
85+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
86+
87+
drem $0,$5,$4
88+
# CHECK-NOTRAP: ddiv $zero, $5, $4 # encoding: [0x1e,0x00,0xa4,0x00]
89+
90+
drem $4,$5,0
91+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
92+
93+
drem $4,$0,0
94+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
95+
96+
drem $0,$4,$5
97+
# CHECK-NOTRAP: ddiv $zero, $4, $5 # encoding: [0x1e,0x00,0x85,0x00]
98+
99+
drem $4,$5,1
100+
# CHECK-NOTRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
101+
102+
drem $4,$5,-1
103+
# CHECK-NOTRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
104+
105+
drem $4,$5,2
106+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
107+
# CHECK-NOTRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
108+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
109+
110+
drem $4,$5,0x10000
111+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
112+
# CHECK-NOTRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
113+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
114+
115+
drem $4,$5,0x1a5a5
116+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
117+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
118+
# CHECK-NOTRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
119+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
120+
121+
drem $4,$5,0x8000
122+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
123+
# CHECK-NOTRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
124+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
125+
126+
drem $4,$5,-0x8000
127+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
128+
# CHECK-NOTRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
129+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
130+
131+
drem $4,$5
132+
# CHECK-TRAP: teq $5, $zero, 7 # encoding: [0xf4,0x01,0xa0,0x00]
133+
# CHECK-TRAP: ddiv $zero, $4, $5 # encoding: [0x1e,0x00,0x85,0x00]
134+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
135+
# CHECK-TRAP: bne $5, $1, .Ltmp2 # encoding: [A,A,0xa1,0x14]
136+
# CHECK-TRAP: # fixup A - offset: 0, value: .Ltmp2-4, kind: fixup_Mips_PC16
137+
# CHECK-TRAP: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
138+
# CHECK-TRAP: dsll32 $1, $1, 31 # encoding: [0xfc,0x0f,0x01,0x00]
139+
# CHECK-TRAP: teq $4, $1, 6 # encoding: [0xb4,0x01,0x81,0x00]
140+
# CHECK-TRAP: .Ltmp2
141+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
142+
143+
drem $4,$0
144+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
145+
146+
drem $4,0
147+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
148+
149+
drem $0,0
150+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
151+
152+
drem $4,1
153+
# CHECK-TRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
154+
155+
drem $4,-1
156+
# CHECK-TRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
157+
158+
drem $4,2
159+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
160+
# CHECK-TRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
161+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
162+
163+
drem $4,0x10000
164+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
165+
# CHECK-TRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
166+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
167+
168+
drem $4,0x1a5a5
169+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
170+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
171+
# CHECK-TRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
172+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
173+
174+
drem $4,0x8000
175+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
176+
# CHECK-TRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
177+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
178+
179+
drem $4,-0x8000
180+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
181+
# CHECK-TRAP: ddiv $zero, $4, $1 # encoding: [0x1e,0x00,0x81,0x00]
182+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
183+
184+
drem $4,$5,$6
185+
# CHECK-TRAP: teq $6, $zero, 7 # encoding: [0xf4,0x01,0xc0,0x00]
186+
# CHECK-TRAP: ddiv $zero, $5, $6 # encoding: [0x1e,0x00,0xa6,0x00]
187+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
188+
# CHECK-TRAP: bne $6, $1, .Ltmp3 # encoding: [A,A,0xc1,0x14]
189+
# CHECK-TRAP; # fixup A - offset: 0, value: .Ltmp3-4, kind: fixup_Mips_PC16
190+
# CHECK-TRAP: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
191+
# CHECK-TRAP: dsll32 $1, $1, 31 # encoding: [0xfc,0x0f,0x01,0x00]
192+
# CHECK-TRAP: teq $5, $1, 6 # encoding: [0xb4,0x01,0xa1,0x00]
193+
# CHECK-TRAP: .Ltmp3
194+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
195+
196+
drem $4,$5,$0
197+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
198+
199+
drem $4,$0,$0
200+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
201+
202+
drem $0,$5,$4
203+
# CHECK-TRAP: ddiv $zero, $5, $4 # encoding: [0x1e,0x00,0xa4,0x00]
204+
205+
drem $4,$5,0
206+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
207+
208+
drem $4,$0,0
209+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
210+
211+
drem $0,$4,$5
212+
# CHECK-TRAP: ddiv $zero, $4, $5 # encoding: [0x1e,0x00,0x85,0x00]
213+
214+
drem $4,$5,1
215+
# CHECK-TRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
216+
217+
drem $4,$5,-1
218+
# CHECK-TRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
219+
220+
drem $4,$5,2
221+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
222+
# CHECK-TRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
223+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
224+
225+
drem $4,$5,0x10000
226+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
227+
# CHECK-TRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
228+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
229+
230+
drem $4,$5,0x1a5a5
231+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
232+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
233+
# CHECK-TRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
234+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
235+
236+
drem $4,$5,0x8000
237+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
238+
# CHECK-TRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
239+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
240+
241+
drem $4,$5,-0x8000
242+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
243+
# CHECK-TRAP: ddiv $zero, $5, $1 # encoding: [0x1e,0x00,0xa1,0x00]
244+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]

‎llvm/test/MC/Mips/macro-dremu.s

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# RUN: llvm-mc %s -triple=mips64el-unknown-linux -show-encoding -mcpu=mips64 | \
2+
# RUN: FileCheck %s --check-prefix=CHECK-NOTRAP
3+
# RUN: llvm-mc %s -triple=mips64el-unknown-linux -show-encoding -mcpu=mips64 \
4+
# RUN: -mattr=+use-tcc-in-div | FileCheck %s --check-prefix=CHECK-TRAP
5+
6+
dremu $4,$5
7+
# CHECK-NOTRAP: bne $5, $zero, .Ltmp0 # encoding: [A,A,0xa0,0x14]
8+
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp0-4, kind: fixup_Mips_PC16
9+
# CHECK-NOTRAP: ddivu $zero, $4, $5 # encoding: [0x1f,0x00,0x85,0x00]
10+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
11+
# CHECK-NOTRAP: .Ltmp0
12+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
13+
# CHECK-TRAP: teq $5, $zero, 7 # encoding: [0xf4,0x01,0xa0,0x00]
14+
# CHECK-TRAP: ddivu $zero, $4, $5 # encoding: [0x1f,0x00,0x85,0x00]
15+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
16+
17+
dremu $4,$0
18+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
19+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
20+
21+
dremu $4,0
22+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
23+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
24+
25+
dremu $0,0
26+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
27+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
28+
29+
dremu $4,1
30+
# CHECK-NOTRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
31+
# CHECK-TRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
32+
33+
dremu $4,2
34+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
35+
# CHECK-NOTRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
36+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
37+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
38+
# CHECK-TRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
39+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
40+
41+
dremu $4,-1
42+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
43+
# CHECK-NOTRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
44+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
45+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
46+
# CHECK-TRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
47+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
48+
49+
dremu $4,0x1a5a5
50+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
51+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
52+
# CHECK-NOTRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
53+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
54+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
55+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
56+
# CHECK-TRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
57+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
58+
59+
dremu $4,0x10000
60+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
61+
# CHECK-NOTRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
62+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
63+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
64+
# CHECK-TRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
65+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
66+
67+
dremu $4,-0x8000
68+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
69+
# CHECK-NOTRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
70+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
71+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
72+
# CHECK-TRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
73+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
74+
75+
dremu $4,0x8000
76+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
77+
# CHECK-NOTRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
78+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
79+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
80+
# CHECK-TRAP: ddivu $zero, $4, $1 # encoding: [0x1f,0x00,0x81,0x00]
81+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
82+
83+
dremu $4,$5,$6
84+
# CHECK-NOTRAP: bne $6, $zero, .Ltmp1 # encoding: [A,A,0xc0,0x14]
85+
# CHECK-NOTRAP: # fixup A - offset: 0, value: .Ltmp1-4, kind: fixup_Mips_PC16
86+
# CHECK-NOTRAP: ddivu $zero, $5, $6 # encoding: [0x1f,0x00,0xa6,0x00]
87+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
88+
# CHECK-NOTRAP: .Ltmp1
89+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
90+
# CHECK-TRAP: teq $6, $zero, 7 # encoding: [0xf4,0x01,0xc0,0x00]
91+
# CHECK-TRAP: ddivu $zero, $5, $6 # encoding: [0x1f,0x00,0xa6,0x00]
92+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
93+
94+
dremu $4,$5,$0
95+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
96+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
97+
98+
dremu $4,$0,$0
99+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
100+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
101+
102+
dremu $0,$4,$5
103+
# CHECK-NOTRAP: ddivu $zero, $4, $5 # encoding: [0x1f,0x00,0x85,0x00]
104+
# CHECK-TRAP: ddivu $zero, $4, $5 # encoding: [0x1f,0x00,0x85,0x00]
105+
106+
dremu $0,$5,$4
107+
# CHECK-NOTRAP: ddivu $zero, $5, $4 # encoding: [0x1f,0x00,0xa4,0x00]
108+
# CHECK-TRAP: ddivu $zero, $5, $4 # encoding: [0x1f,0x00,0xa4,0x00]
109+
110+
dremu $4,$5,0
111+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
112+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
113+
114+
dremu $4,$0,0
115+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
116+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
117+
118+
dremu $4,$5,1
119+
# CHECK-NOTRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
120+
# CHECK-TRAP: or $4, $zero, $zero # encoding: [0x25,0x20,0x00,0x00]
121+
122+
dremu $4,$5,-1
123+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
124+
# CHECK-NOTRAP: ddivu $zero, $5, $1 # encoding: [0x1f,0x00,0xa1,0x00]
125+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
126+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
127+
# CHECK-TRAP: ddivu $zero, $5, $1 # encoding: [0x1f,0x00,0xa1,0x00]
128+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
129+
130+
dremu $4,$5,2
131+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
132+
# CHECK-NOTRAP: ddivu $zero, $5, $1 # encoding: [0x1f,0x00,0xa1,0x00]
133+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
134+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
135+
# CHECK-TRAP: ddivu $zero, $5, $1 # encoding: [0x1f,0x00,0xa1,0x00]
136+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]

‎llvm/test/MC/Mips/macro-rem.s

+187
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32 | \
2+
# RUN: FileCheck %s --check-prefix=CHECK-NOTRAP
3+
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32 \
4+
# RUN: -mattr=+use-tcc-in-div | FileCheck %s --check-prefix=CHECK-TRAP
5+
6+
rem $4,$5
7+
# CHECK-NOTRAP: bnez $5, $tmp0 # encoding: [A,A,0xa0,0x14]
8+
# CHECK-NOTRAP: # fixup A - offset: 0, value: ($tmp0)-4, kind: fixup_Mips_PC16
9+
# CHECK-NOTRAP: div $zero, $4, $5 # encoding: [0x1a,0x00,0x85,0x00]
10+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
11+
# CHECK-NOTRAP: $tmp0
12+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
13+
# CHECK-NOTRAP: bne $5, $1, $tmp1 # encoding: [A,A,0xa1,0x14]
14+
# CHECK-NOTRAP: # fixup A - offset: 0, value: ($tmp1)-4, kind: fixup_Mips_PC16
15+
# CHECK-NOTRAP: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
16+
# CHECK-NOTRAP: bne $4, $1, $tmp1 # encoding: [A,A,0x81,0x14]
17+
# CHECK-NOTRAP: # fixup A - offset: 0, value: ($tmp1)-4, kind: fixup_Mips_PC16
18+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
19+
# CHECK-NOTRAP: break 6 # encoding: [0x0d,0x00,0x06,0x00]
20+
# CHECK-NOTRAP: $tmp1
21+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
22+
23+
# CHECK-TRAP: teq $5, $zero, 7 # encoding: [0xf4,0x01,0xa0,0x00]
24+
# CHECK-TRAP: div $zero, $4, $5 # encoding: [0x1a,0x00,0x85,0x00]
25+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
26+
# CHECK-TRAP: bne $5, $1, $tmp0 # encoding: [A,A,0xa1,0x14]
27+
# CHECK-TRAP: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
28+
# CHECK-TRAP: teq $4, $1, 6 # encoding: [0xb4,0x01,0x81,0x00]
29+
# CHECK-TRAP: $tmp0
30+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
31+
32+
rem $4,$0
33+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
34+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
35+
36+
rem $4,0
37+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
38+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
39+
40+
rem $0,0
41+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
42+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
43+
44+
rem $4,1
45+
# CHECK-NOTRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
46+
# CHECK-TRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
47+
48+
rem $4,-1
49+
# CHECK-NOTRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
50+
# CHECK-TRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
51+
52+
rem $4,2
53+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
54+
# CHECK-NOTRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
55+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
56+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
57+
# CHECK-TRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
58+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
59+
60+
rem $4,0x8000
61+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
62+
# CHECK-NOTRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
63+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
64+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
65+
# CHECK-TRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
66+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
67+
68+
rem $4,-0x8000
69+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
70+
# CHECK-NOTRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
71+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
72+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
73+
# CHECK-TRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
74+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
75+
76+
rem $4,0x10000
77+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
78+
# CHECK-NOTRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
79+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
80+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
81+
# CHECK-TRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
82+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
83+
84+
rem $4,0x1a5a5
85+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
86+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
87+
# CHECK-NOTRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
88+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
89+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
90+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
91+
# CHECK-TRAP: div $zero, $4, $1 # encoding: [0x1a,0x00,0x81,0x00]
92+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
93+
94+
rem $4,$5,$6
95+
# CHECK-NOTRAP: bnez $6, $tmp2 # encoding: [A,A,0xc0,0x14]
96+
# CHECK-NOTRAP: div $zero, $5, $6 # encoding: [0x1a,0x00,0xa6,0x00]
97+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
98+
# CHECk-NOTRAP: $tmp2
99+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
100+
# CHECK-NOTRAP: bne $6, $1, $tmp3 # encoding: [A,A,0xc1,0x14]
101+
# CHECK-NOTRAP: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
102+
# CHECK-NOTRAP: bne $5, $1, $tmp3 # encoding: [A,A,0xa1,0x14]
103+
# CHECK-NOTRAP: nop # encoding: [0x00,0x00,0x00,0x00]
104+
# CHECK-NOTRAP: break 6 # encoding: [0x0d,0x00,0x06,0x00]
105+
# CHECK-NOTRAP: $tmp3
106+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
107+
# CHECK-TRAP: teq $6, $zero, 7 # encoding: [0xf4,0x01,0xc0,0x00]
108+
# CHECK-TRAP: div $zero, $5, $6 # encoding: [0x1a,0x00,0xa6,0x00]
109+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
110+
# CHECK-TRAP: bne $6, $1, $tmp1 # encoding: [A,A,0xc1,0x14]
111+
# CHECK-TRAP: lui $1, 32768 # encoding: [0x00,0x80,0x01,0x3c]
112+
# CHECK-TRAP: teq $5, $1, 6 # encoding: [0xb4,0x01,0xa1,0x00]
113+
# CHECK-TRAP: $tmp1
114+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
115+
116+
rem $4,$5,$0
117+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
118+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
119+
120+
rem $4,$0,$0
121+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
122+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
123+
124+
rem $0,$5,$4
125+
# CHECK-NOTRAP: div $zero, $5, $4 # encoding: [0x1a,0x00,0xa4,0x00]
126+
# CHECK-TRAP: div $zero, $5, $4 # encoding: [0x1a,0x00,0xa4,0x00]
127+
128+
rem $4,$5,0
129+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
130+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
131+
132+
rem $4,$0,0
133+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
134+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
135+
136+
rem $4,$5,1
137+
# CHECK-NOTRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
138+
# CHECK-TRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
139+
140+
rem $4,$5,-1
141+
# CHECK-NOTRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
142+
# CHECK-TRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
143+
144+
rem $4,$5,2
145+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
146+
# CHECK-NOTRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
147+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
148+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
149+
# CHECK-TRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
150+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
151+
152+
rem $4,$5,0x8000
153+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
154+
# CHECK-NOTRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
155+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
156+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
157+
# CHECK-TRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
158+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
159+
160+
161+
rem $4,$5,-0x8000
162+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
163+
# CHECK-NOTRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
164+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
165+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
166+
# CHECK-TRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
167+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
168+
169+
170+
rem $4,$5,0x10000
171+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
172+
# CHECK-NOTRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
173+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
174+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
175+
# CHECK-TRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
176+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
177+
178+
179+
rem $4,$5,0x1a5a5
180+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
181+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
182+
# CHECK-NOTRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
183+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
184+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
185+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
186+
# CHECK-TRAP: div $zero, $5, $1 # encoding: [0x1a,0x00,0xa1,0x00]
187+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]

‎llvm/test/MC/Mips/macro-remu.s

+167
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32 | \
2+
# RUN: FileCheck %s --check-prefix=CHECK-NOTRAP
3+
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32 \
4+
# RUN: -mattr=+use-tcc-in-div | FileCheck %s --check-prefix=CHECK-TRAP
5+
6+
remu $4,$5
7+
# CHECK-NOTRAP: bnez $5, $tmp0 # encoding: [A,A,0xa0,0x14]
8+
# CHECK-NOTRAP: # fixup A - offset: 0, value: ($tmp0)-4, kind: fixup_Mips_PC16
9+
# CHECK-NOTRAP: divu $zero, $4, $5 # encoding: [0x1b,0x00,0x85,0x00]
10+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
11+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
12+
# CHECK-TRAP: teq $5, $zero, 7 # encoding: [0xf4,0x01,0xa0,0x00]
13+
# CHECK-TRAP: divu $zero, $4, $5 # encoding: [0x1b,0x00,0x85,0x00]
14+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
15+
16+
remu $4,$0
17+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
18+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
19+
20+
remu $4,0
21+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
22+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
23+
24+
remu $0,0
25+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
26+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
27+
28+
remu $4,1
29+
# CHECK-NOTRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
30+
# CHECK-TRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
31+
32+
remu $4,-1
33+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
34+
# CHECK-NOTRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
35+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
36+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
37+
# CHECK-TRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
38+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
39+
40+
remu $4,2
41+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
42+
# CHECK-NOTRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
43+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
44+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
45+
# CHECK-TRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
46+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
47+
48+
remu $4,0x8000
49+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
50+
# CHECK-NOTRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
51+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
52+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
53+
# CHECK-TRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
54+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
55+
56+
57+
remu $4,-0x8000
58+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
59+
# CHECK-NOTRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
60+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
61+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
62+
# CHECK-TRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
63+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
64+
65+
remu $4,0x10000
66+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
67+
# CHECK-NOTRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
68+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
69+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
70+
# CHECK-TRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
71+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
72+
73+
remu $4,0x1a5a5
74+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
75+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
76+
# CHECK-NOTRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
77+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
78+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
79+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
80+
# CHECK-TRAP: divu $zero, $4, $1 # encoding: [0x1b,0x00,0x81,0x00]
81+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
82+
83+
remu $4,$5,$6
84+
# CHECK-NOTRAP: bnez $6, $tmp1 # encoding: [A,A,0xc0,0x14]
85+
# CHECK-NOTRAP: # fixup A - offset: 0, value: ($tmp1)-4, kind: fixup_Mips_PC16
86+
# CHECK-NOTRAP: divu $zero, $5, $6 # encoding: [0x1b,0x00,0xa6,0x00]
87+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
88+
# CHECK-NOTRAP: $tmp1
89+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
90+
# CHECK-TRAP: teq $6, $zero, 7 # encoding: [0xf4,0x01,0xc0,0x00]
91+
# CHECK-TRAP: divu $zero, $5, $6 # encoding: [0x1b,0x00,0xa6,0x00]
92+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
93+
94+
95+
remu $4,$5,$0
96+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
97+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
98+
99+
remu $4,$0,$0
100+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
101+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
102+
103+
remu $0,$5,$4
104+
# CHECK-NOTRAP: divu $zero, $5, $4 # encoding: [0x1b,0x00,0xa4,0x00]
105+
# CHECK-TRAP: divu $zero, $5, $4 # encoding: [0x1b,0x00,0xa4,0x00]
106+
107+
remu $4,$5,0
108+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
109+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
110+
111+
remu $4,$0,0
112+
# CHECK-NOTRAP: break 7 # encoding: [0x0d,0x00,0x07,0x00]
113+
# CHECK-TRAP: teq $zero, $zero, 7 # encoding: [0xf4,0x01,0x00,0x00]
114+
115+
remu $4,$5,1
116+
# CHECK-NOTRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
117+
# CHECK-TRAP: move $4, $zero # encoding: [0x25,0x20,0x00,0x00]
118+
119+
remu $4,$5,-1
120+
# CHECK-NOTRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
121+
# CHECK-NOTRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
122+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
123+
# CHECK-TRAP: addiu $1, $zero, -1 # encoding: [0xff,0xff,0x01,0x24]
124+
# CHECK-TRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
125+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
126+
127+
remu $4,$5,2
128+
# CHECK-NOTRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
129+
# CHECK-NOTRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
130+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
131+
# CHECK-TRAP: addiu $1, $zero, 2 # encoding: [0x02,0x00,0x01,0x24]
132+
# CHECK-TRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
133+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
134+
135+
remu $4,$5,0x8000
136+
# CHECK-NOTRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
137+
# CHECK-NOTRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
138+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
139+
# CHECK-TRAP: ori $1, $zero, 32768 # encoding: [0x00,0x80,0x01,0x34]
140+
# CHECK-TRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
141+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
142+
143+
remu $4,$5,-0x8000
144+
# CHECK-NOTRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
145+
# CHECK-NOTRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
146+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
147+
# CHECK-TRAP: addiu $1, $zero, -32768 # encoding: [0x00,0x80,0x01,0x24]
148+
# CHECK-TRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
149+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
150+
151+
remu $4,$5,0x10000
152+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
153+
# CHECK-NOTRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
154+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
155+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
156+
# CHECK-TRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
157+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
158+
159+
remu $4,$5,0x1a5a5
160+
# CHECK-NOTRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
161+
# CHECK-NOTRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
162+
# CHECK-NOTRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
163+
# CHECK-NOTRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]
164+
# CHECK-TRAP: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
165+
# CHECK-TRAP: ori $1, $1, 42405 # encoding: [0xa5,0xa5,0x21,0x34]
166+
# CHECK-TRAP: divu $zero, $5, $1 # encoding: [0x1b,0x00,0xa1,0x00]
167+
# CHECK-TRAP: mfhi $4 # encoding: [0x10,0x20,0x00,0x00]

0 commit comments

Comments
 (0)
Please sign in to comment.