summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-04-08 19:18:07 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-04-08 19:18:07 +0000
commit875e0e46266de49d23b7f89a1bd89331b86aef9d (patch)
treec3d4c52f18030539f73ce5be10dfe04457df135f /llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
parent77cdce945866b8a65d764a3694f7dc40c810e201 (diff)
downloadbcm5719-llvm-875e0e46266de49d23b7f89a1bd89331b86aef9d.tar.gz
bcm5719-llvm-875e0e46266de49d23b7f89a1bd89331b86aef9d.zip
Sanity check the option operand for DMB/DSB.
PR9648 rdar://problem/9257634 llvm-svn: 129146
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp')
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
index ca67e5e2e6e..7900f9960ad 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
+++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
@@ -3286,13 +3286,19 @@ static bool DisassembleMiscFrm(MCInst &MI, unsigned Opcode, uint32_t insn,
unsigned short NumOps, unsigned &NumOpsAdded, BO B) {
if (MemBarrierInstr(insn)) {
- // DMBsy, DSBsy, and ISBsy instructions have zero operand and are taken care
- // of within the generic ARMBasicMCBuilder::BuildIt() method.
- //
// Inst{3-0} encodes the memory barrier option for the variants.
- MI.addOperand(MCOperand::CreateImm(slice(insn, 3, 0)));
- NumOpsAdded = 1;
- return true;
+ unsigned opt = slice(insn, 3, 0);
+ switch (opt) {
+ case ARM_MB::SY: case ARM_MB::ST:
+ case ARM_MB::ISH: case ARM_MB::ISHST:
+ case ARM_MB::NSH: case ARM_MB::NSHST:
+ case ARM_MB::OSH: case ARM_MB::OSHST:
+ MI.addOperand(MCOperand::CreateImm(opt));
+ NumOpsAdded = 1;
+ return true;
+ default:
+ return false;
+ }
}
switch (Opcode) {
OpenPOWER on IntegriCloud