| Index: runtime/vm/disassembler_arm.cc
|
| ===================================================================
|
| --- runtime/vm/disassembler_arm.cc (revision 44897)
|
| +++ runtime/vm/disassembler_arm.cc (working copy)
|
| @@ -696,12 +696,6 @@
|
| }
|
| } 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: {
|
| @@ -715,11 +709,19 @@
|
| break;
|
| }
|
| case 2: {
|
| + if (TargetCPUFeatures::arm_version() == ARMv5TE) {
|
| + Unknown(instr);
|
| + return;
|
| + }
|
| // Registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs.
|
| Format(instr, "umaal'cond's 'rd, 'rn, 'rm, 'rs");
|
| break;
|
| }
|
| case 3: {
|
| + if (TargetCPUFeatures::arm_version() != ARMv7) {
|
| + Unknown(instr);
|
| + return;
|
| + }
|
| // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd.
|
| Format(instr, "mls'cond's 'rn, 'rm, 'rs, 'rd");
|
| break;
|
| @@ -739,11 +741,6 @@
|
| Format(instr, "smull'cond's 'rd, 'rn, 'rm, 'rs");
|
| break;
|
| }
|
| - case 7: {
|
| - // Registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs.
|
| - Format(instr, "smlal'cond's 'rd, 'rn, 'rm, 'rs");
|
| - break;
|
| - }
|
| default: {
|
| Unknown(instr); // Not used.
|
| break;
|
| @@ -750,6 +747,11 @@
|
| }
|
| }
|
| } else {
|
| + if (TargetCPUFeatures::arm_version() == ARMv5TE) {
|
| + // strex and ldrex are only supported after ARMv6.
|
| + Unknown(instr);
|
| + return;
|
| + }
|
| // synchronization primitives
|
| switch (instr->Bits(20, 4)) {
|
| case 8: {
|
| @@ -1470,7 +1472,8 @@
|
| Instr* instr = Instr::At(pc);
|
|
|
| if (instr->ConditionField() == kSpecialCondition) {
|
| - if (instr->InstructionBits() == static_cast<int32_t>(0xf57ff01f)) {
|
| + if ((instr->InstructionBits() == static_cast<int32_t>(0xf57ff01f)) &&
|
| + (TargetCPUFeatures::arm_version() != ARMv5TE)) {
|
| Format(instr, "clrex");
|
| } else {
|
| if (instr->IsSIMDDataProcessing()) {
|
|
|