Fix another batch of VLD/VST decoding crashes discovered by randomized testing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138255 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
index 725a8a2..ad1692c 100644
--- a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
@@ -2769,8 +2769,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -2819,8 +2822,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -2876,8 +2882,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -2931,8 +2940,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -2989,8 +3001,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -3043,8 +3058,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -3103,8 +3121,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
@@ -3158,8 +3179,11 @@
}
CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
Inst.addOperand(MCOperand::CreateImm(align));
- if (Rm != 0xF && Rm != 0xD) {
- CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ if (Rm != 0xF) {
+ if (Rm != 0xD)
+ CHECK(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder));
+ else
+ Inst.addOperand(MCOperand::CreateReg(0));
}
CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));