summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
diff options
context:
space:
mode:
authorTim Northover <Tim.Northover@arm.com>2012-09-06 15:27:12 +0000
committerTim Northover <Tim.Northover@arm.com>2012-09-06 15:27:12 +0000
commit00e071ad52a4630c5a381cf5e0b99b0b2efecded (patch)
treec660517bc4cdff63628d1c879fbc523575aa9acb /llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
parentc87e7280b843e3916d3ca21a02cb5360afa6b445 (diff)
downloadbcm5719-llvm-00e071ad52a4630c5a381cf5e0b99b0b2efecded.tar.gz
bcm5719-llvm-00e071ad52a4630c5a381cf5e0b99b0b2efecded.zip
Diagnose invalid alignments on duplicating VLDn instructions.
Patch by Chris Lidbury. llvm-svn: 163323
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp')
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
index 657c1034626..57642e1924e 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
@@ -2701,6 +2701,8 @@ static DecodeStatus DecodeVLD1DupInstruction(MCInst &Inst, unsigned Insn,
unsigned align = fieldFromInstruction(Insn, 4, 1);
unsigned size = fieldFromInstruction(Insn, 6, 2);
+ if (size == 0 && align == 1)
+ return MCDisassembler::Fail;
align *= (1 << size);
switch (Inst.getOpcode()) {
@@ -2831,6 +2833,8 @@ static DecodeStatus DecodeVLD4DupInstruction(MCInst &Inst, unsigned Insn,
unsigned align = fieldFromInstruction(Insn, 4, 1);
if (size == 0x3) {
+ if (align == 0)
+ return MCDisassembler::Fail;
size = 4;
align = 16;
} else {
OpenPOWER on IntegriCloud