| Index: runtime/vm/disassembler_arm.cc
 | 
| ===================================================================
 | 
| --- runtime/vm/disassembler_arm.cc	(revision 36258)
 | 
| +++ runtime/vm/disassembler_arm.cc	(working copy)
 | 
| @@ -6,7 +6,9 @@
 | 
|  
 | 
|  #include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM.
 | 
|  #if defined(TARGET_ARCH_ARM)
 | 
| +
 | 
|  #include "platform/assert.h"
 | 
| +#include "vm/cpu.h"
 | 
|  
 | 
|  namespace dart {
 | 
|  
 | 
| @@ -694,6 +696,12 @@
 | 
|        }
 | 
|      } else if (instr->IsMultiplyOrSyncPrimitive()) {
 | 
|        if (instr->Bit(24) == 0) {
 | 
| +        if ((TargetCPUFeatures::arm_version() != ARMv7) &&
 | 
| +            (instr->Bits(21, 3) != 0)) {
 | 
| +          // mla ... smlal only supported on armv7.
 | 
| +          Unknown(instr);
 | 
| +          return;
 | 
| +        }
 | 
|          // multiply instructions
 | 
|          switch (instr->Bits(21, 3)) {
 | 
|            case 0: {
 | 
| @@ -757,7 +765,11 @@
 | 
|        // 16-bit immediate loads, msr (immediate), and hints
 | 
|        switch (instr->Bits(20, 5)) {
 | 
|          case 16: {
 | 
| -          Format(instr, "movw'cond 'rd, #'imm4_12");
 | 
| +          if (TargetCPUFeatures::arm_version() == ARMv7) {
 | 
| +            Format(instr, "movw'cond 'rd, #'imm4_12");
 | 
| +          } else {
 | 
| +            Unknown(instr);
 | 
| +          }
 | 
|            break;
 | 
|          }
 | 
|          case 18: {
 | 
| @@ -769,7 +781,11 @@
 | 
|            break;
 | 
|          }
 | 
|          case 20: {
 | 
| -          Format(instr, "movt'cond 'rd, #'imm4_12");
 | 
| +          if (TargetCPUFeatures::arm_version() == ARMv7) {
 | 
| +            Format(instr, "movt'cond 'rd, #'imm4_12");
 | 
| +          } else {
 | 
| +            Unknown(instr);
 | 
| +          }
 | 
|            break;
 | 
|          }
 | 
|          default: {
 | 
| @@ -948,6 +964,10 @@
 | 
|  
 | 
|  void ARMDecoder::DecodeType3(Instr* instr) {
 | 
|    if (instr->IsDivision()) {
 | 
| +    if (!TargetCPUFeatures::integer_division_supported()) {
 | 
| +      Unknown(instr);
 | 
| +      return;
 | 
| +    }
 | 
|      if (instr->Bit(21)) {
 | 
|        Format(instr, "udiv'cond 'rn, 'rs, 'rm");
 | 
|      } else {
 | 
| 
 |