Index: runtime/vm/disassembler_arm64.cc |
diff --git a/runtime/vm/disassembler_arm64.cc b/runtime/vm/disassembler_arm64.cc |
index 448fda328ca7c3203add6a7da79a09de09df01b0..77bc20f40c44974d56d97b88858ba6db491ec5bd 100644 |
--- a/runtime/vm/disassembler_arm64.cc |
+++ b/runtime/vm/disassembler_arm64.cc |
@@ -1319,18 +1319,31 @@ void ARM64Decoder::DecodeFPImm(Instr* instr) { |
void ARM64Decoder::DecodeFPIntCvt(Instr* instr) { |
- if ((instr->Bit(29) != 0) || (instr->Bits(22, 2) != 1)) { |
+ if ((instr->Bit(29) != 0)) { |
Unknown(instr); |
return; |
} |
- if (instr->Bits(16, 5) == 2) { |
- Format(instr, "scvtfd'sf 'vd, 'rn"); |
- } else if (instr->Bits(16, 5) == 6) { |
- Format(instr, "fmovrd'sf 'rd, 'vn"); |
- } else if (instr->Bits(16, 5) == 7) { |
- Format(instr, "fmovdr'sf 'vd, 'rn"); |
- } else if (instr->Bits(16, 5) == 24) { |
- Format(instr, "fcvtzds'sf 'rd, 'vn"); |
+ |
+ if ((instr->SFField() == 0) && (instr->Bits(22, 2) == 0)) { |
+ if (instr->Bits(16, 5) == 6) { |
+ Format(instr, "fmovrs'sf 'rd, 'vn"); |
+ } else if (instr->Bits(16, 5) == 7) { |
+ Format(instr, "fmovsr'sf 'vd, 'rn"); |
+ } else { |
+ Unknown(instr); |
+ } |
+ } else if (instr->Bits(22, 2) == 1) { |
+ if (instr->Bits(16, 5) == 2) { |
+ Format(instr, "scvtfd'sf 'vd, 'rn"); |
+ } else if (instr->Bits(16, 5) == 6) { |
+ Format(instr, "fmovrd'sf 'rd, 'vn"); |
+ } else if (instr->Bits(16, 5) == 7) { |
+ Format(instr, "fmovdr'sf 'vd, 'rn"); |
+ } else if (instr->Bits(16, 5) == 24) { |
+ Format(instr, "fcvtzds'sf 'rd, 'vn"); |
+ } else { |
+ Unknown(instr); |
+ } |
} else { |
Unknown(instr); |
} |