Index: src/arm/disasm-arm.cc |
diff --git a/src/arm/disasm-arm.cc b/src/arm/disasm-arm.cc |
index 7d618452c7ec82d743ad59bf819cc47cf54e352f..041df55858f16589773a172ac666e66027c76349 100644 |
--- a/src/arm/disasm-arm.cc |
+++ b/src/arm/disasm-arm.cc |
@@ -1856,104 +1856,150 @@ static const char* const barrier_option_names[] = { |
void Decoder::DecodeSpecialCondition(Instruction* instr) { |
switch (instr->SpecialValue()) { |
- case 4: |
- if (instr->Bits(11, 8) == 1 && instr->Bits(21, 20) == 2 && |
- instr->Bit(6) == 1 && instr->Bit(4) == 1) { |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- if (Vm == Vn) { |
- // vmov Qd, Qm |
+ case 4: { |
+ int Vd, Vm, Vn; |
+ if (instr->Bit(6) == 0) { |
+ Vd = instr->VFPDRegValue(kDoublePrecision); |
+ Vm = instr->VFPMRegValue(kDoublePrecision); |
+ Vn = instr->VFPNRegValue(kDoublePrecision); |
+ } else { |
+ Vd = instr->VFPDRegValue(kSimd128Precision); |
+ Vm = instr->VFPMRegValue(kSimd128Precision); |
+ Vn = instr->VFPNRegValue(kSimd128Precision); |
+ } |
+ switch (instr->Bits(11, 8)) { |
+ case 0x0: { |
+ if (instr->Bit(4) == 1) { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vqadd.s<size> Qd, Qm, Qn. |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vqadd.s%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0x1: { |
+ if (instr->Bits(21, 20) == 2 && instr->Bit(6) == 1 && |
+ instr->Bit(4) == 1) { |
+ if (Vm == Vn) { |
+ // vmov Qd, Qm |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vmov q%d, q%d", Vd, Vm); |
+ } else { |
+ // vorr Qd, Qm, Qn. |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vorr q%d, q%d, q%d", Vd, Vn, Vm); |
+ } |
+ } else if (instr->Bits(21, 20) == 0 && instr->Bit(6) == 1 && |
+ instr->Bit(4) == 1) { |
+ // vand Qd, Qm, Qn. |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vand q%d, q%d, q%d", Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0x2: { |
+ if (instr->Bit(4) == 1) { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vqsub.s<size> Qd, Qm, Qn. |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vqsub.s%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0x3: { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ const char* op = (instr->Bit(4) == 1) ? "vcge" : "vcgt"; |
+ // vcge/vcgt.s<size> Qd, Qm, Qn. |
out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "vmov q%d, q%d", Vd, Vm); |
- } else { |
- // vorr Qd, Qm, Qn. |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vorr q%d, q%d, q%d", Vd, Vn, Vm); |
+ SNPrintF(out_buffer_ + out_buffer_pos_, "%s.s%d q%d, q%d, q%d", |
+ op, size, Vd, Vn, Vm); |
+ break; |
} |
- } else if (instr->Bits(11, 8) == 8) { |
- const char* op = (instr->Bit(4) == 0) ? "vadd" : "vtst"; |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vadd/vtst.i<size> Qd, Qm, Qn. |
- out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "%s.i%d q%d, q%d, q%d", op, |
- size, Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0xd && instr->Bit(4) == 0) { |
- const char* op = (instr->Bits(21, 20) == 0) ? "vadd" : "vsub"; |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vadd/vsub.f32 Qd, Qm, Qn. |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0x9 && instr->Bit(6) == 1 && |
- instr->Bit(4) == 1) { |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vmul.i<size> Qd, Qm, Qn. |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vmul.i%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0xe && instr->Bits(21, 20) == 0 && |
- instr->Bit(4) == 0) { |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vceq.f32 Qd, Qm, Qn. |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vceq.f32 q%d, q%d, q%d", Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 1 && instr->Bits(21, 20) == 0 && |
- instr->Bit(6) == 1 && instr->Bit(4) == 1) { |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vand Qd, Qm, Qn. |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vand q%d, q%d, q%d", Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0x3) { |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- const char* op = (instr->Bit(4) == 1) ? "vcge" : "vcgt"; |
- // vcge/vcgt.s<size> Qd, Qm, Qn. |
- out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "%s.s%d q%d, q%d, q%d", op, |
- size, Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0xf && instr->Bit(20) == 0 && |
- instr->Bit(6) == 1) { |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- if (instr->Bit(4) == 1) { |
- // vrecps/vrsqrts.f32 Qd, Qm, Qn. |
- const char* op = instr->Bit(21) == 0 ? "vrecps" : "vrsqrts"; |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
- } else { |
- // vmin/max.f32 Qd, Qm, Qn. |
- const char* op = instr->Bit(21) == 1 ? "vmin" : "vmax"; |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
+ case 0x6: { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vmin/vmax.s<size> Qd, Qm, Qn. |
+ const char* op = instr->Bit(4) == 1 ? "vmin" : "vmax"; |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, "%s.s%d q%d, q%d, q%d", |
+ op, size, Vd, Vn, Vm); |
+ break; |
} |
- } else if (instr->Bits(11, 8) == 0x6) { |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vmin/vmax.s<size> Qd, Qm, Qn. |
- const char* op = instr->Bit(4) == 1 ? "vmin" : "vmax"; |
- out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "%s.s%d q%d, q%d, q%d", op, |
- size, Vd, Vn, Vm); |
- } else { |
- Unknown(instr); |
+ case 0x8: { |
+ const char* op = (instr->Bit(4) == 0) ? "vadd" : "vtst"; |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vadd/vtst.i<size> Qd, Qm, Qn. |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, "%s.i%d q%d, q%d, q%d", |
+ op, size, Vd, Vn, Vm); |
+ break; |
+ } |
+ case 0x9: { |
+ if (instr->Bit(6) == 1 && instr->Bit(4) == 1) { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vmul.i<size> Qd, Qm, Qn. |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vmul.i%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0xd: { |
+ if (instr->Bit(4) == 0) { |
+ const char* op = (instr->Bits(21, 20) == 0) ? "vadd" : "vsub"; |
+ // vadd/vsub.f32 Qd, Qm, Qn. |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0xe: { |
+ if (instr->Bits(21, 20) == 0 && instr->Bit(4) == 0) { |
+ // vceq.f32 Qd, Qm, Qn. |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vceq.f32 q%d, q%d, q%d", Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0xf: { |
+ if (instr->Bit(20) == 0 && instr->Bit(6) == 1) { |
+ if (instr->Bit(4) == 1) { |
+ // vrecps/vrsqrts.f32 Qd, Qm, Qn. |
+ const char* op = instr->Bit(21) == 0 ? "vrecps" : "vrsqrts"; |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
+ } else { |
+ // vmin/max.f32 Qd, Qm, Qn. |
+ const char* op = instr->Bit(21) == 1 ? "vmin" : "vmax"; |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
+ } |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ default: |
+ Unknown(instr); |
+ break; |
} |
break; |
+ } |
case 5: |
if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && |
(instr->Bit(4) == 1)) { |
@@ -1963,7 +2009,7 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
int Vm = (instr->Bit(5) << 4) | instr->VmValue(); |
int imm3 = instr->Bits(21, 19); |
out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vmovl.s%d q%d, d%d", imm3*8, Vd, Vm); |
+ "vmovl.s%d q%d, d%d", imm3 * 8, Vd, Vm); |
} else if (instr->Bits(21, 20) == 3 && instr->Bit(4) == 0) { |
// vext.8 Qd, Qm, Qn, imm4 |
int imm4 = instr->Bits(11, 8); |
@@ -1995,87 +2041,120 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
Unknown(instr); |
} |
break; |
- case 6: |
- if (instr->Bits(11, 8) == 8) { |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- if (instr->Bit(4) == 0) { |
+ case 6: { |
+ int Vd, Vm, Vn; |
+ if (instr->Bit(6) == 0) { |
+ Vd = instr->VFPDRegValue(kDoublePrecision); |
+ Vm = instr->VFPMRegValue(kDoublePrecision); |
+ Vn = instr->VFPNRegValue(kDoublePrecision); |
+ } else { |
+ Vd = instr->VFPDRegValue(kSimd128Precision); |
+ Vm = instr->VFPMRegValue(kSimd128Precision); |
+ Vn = instr->VFPNRegValue(kSimd128Precision); |
+ } |
+ switch (instr->Bits(11, 8)) { |
+ case 0x0: { |
+ if (instr->Bit(4) == 1) { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vqadd.u<size> Qd, Qm, Qn. |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vqadd.u%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0x1: { |
+ if (instr->Bits(21, 20) == 1 && instr->Bit(4) == 1) { |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vbsl q%d, q%d, q%d", Vd, Vn, Vm); |
+ } else if (instr->Bits(21, 20) == 0 && instr->Bit(4) == 1) { |
+ if (instr->Bit(6) == 0) { |
+ // veor Dd, Dn, Dm |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "veor d%d, d%d, d%d", Vd, Vn, Vm); |
+ |
+ } else { |
+ // veor Qd, Qn, Qm |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "veor q%d, q%d, q%d", Vd, Vn, Vm); |
+ } |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0x2: { |
+ if (instr->Bit(4) == 1) { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vqsub.u<size> Qd, Qm, Qn. |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vqsub.u%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0x3: { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ const char* op = (instr->Bit(4) == 1) ? "vcge" : "vcgt"; |
+ // vcge/vcgt.u<size> Qd, Qm, Qn. |
out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "vsub.i%d q%d, q%d, q%d", |
- size, Vd, Vn, Vm); |
- } else { |
+ SNPrintF(out_buffer_ + out_buffer_pos_, "%s.u%d q%d, q%d, q%d", |
+ op, size, Vd, Vn, Vm); |
+ break; |
+ } |
+ case 0x6: { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ // vmin/vmax.u<size> Qd, Qm, Qn. |
+ const char* op = instr->Bit(4) == 1 ? "vmin" : "vmax"; |
out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "vceq.i%d q%d, q%d, q%d", |
- size, Vd, Vn, Vm); |
+ SNPrintF(out_buffer_ + out_buffer_pos_, "%s.u%d q%d, q%d, q%d", |
+ op, size, Vd, Vn, Vm); |
+ break; |
} |
- } else if (instr->Bits(11, 8) == 1 && instr->Bits(21, 20) == 1 && |
- instr->Bit(4) == 1) { |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vbsl q%d, q%d, q%d", Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 1 && instr->Bits(21, 20) == 0 && |
- instr->Bit(4) == 1) { |
- if (instr->Bit(6) == 0) { |
- // veor Dd, Dn, Dm |
- int Vd = instr->VFPDRegValue(kDoublePrecision); |
- int Vn = instr->VFPNRegValue(kDoublePrecision); |
- int Vm = instr->VFPMRegValue(kDoublePrecision); |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "veor d%d, d%d, d%d", Vd, Vn, Vm); |
- |
- } else { |
- // veor Qd, Qn, Qm |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "veor q%d, q%d, q%d", Vd, Vn, Vm); |
+ case 0x8: { |
+ int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
+ if (instr->Bit(4) == 0) { |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vsub.i%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } else { |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vceq.i%d q%d, q%d, q%d", size, Vd, Vn, Vm); |
+ } |
+ break; |
} |
- } else if (instr->Bits(11, 8) == 0xd && instr->Bit(21) == 0 && |
- instr->Bit(6) == 1 && instr->Bit(4) == 1) { |
- // vmul.f32 Qd, Qn, Qm |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vmul.f32 q%d, q%d, q%d", Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0xe && instr->Bit(20) == 0 && |
- instr->Bit(4) == 0) { |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- const char* op = (instr->Bit(21) == 0) ? "vcge" : "vcgt"; |
- // vcge/vcgt.f32 Qd, Qm, Qn. |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0x3) { |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- const char* op = (instr->Bit(4) == 1) ? "vcge" : "vcgt"; |
- // vcge/vcgt.u<size> Qd, Qm, Qn. |
- out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "%s.u%d q%d, q%d, q%d", op, |
- size, Vd, Vn, Vm); |
- } else if (instr->Bits(11, 8) == 0x6) { |
- int size = kBitsPerByte * (1 << instr->Bits(21, 20)); |
- int Vd = instr->VFPDRegValue(kSimd128Precision); |
- int Vm = instr->VFPMRegValue(kSimd128Precision); |
- int Vn = instr->VFPNRegValue(kSimd128Precision); |
- // vmin/vmax.u<size> Qd, Qm, Qn. |
- const char* op = instr->Bit(4) == 1 ? "vmin" : "vmax"; |
- out_buffer_pos_ += |
- SNPrintF(out_buffer_ + out_buffer_pos_, "%s.u%d q%d, q%d, q%d", op, |
- size, Vd, Vn, Vm); |
- } else { |
- Unknown(instr); |
+ case 0xd: { |
+ if (instr->Bit(21) == 0 && instr->Bit(6) == 1 && instr->Bit(4) == 1) { |
+ // vmul.f32 Qd, Qn, Qm |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "vmul.f32 q%d, q%d, q%d", Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ case 0xe: { |
+ if (instr->Bit(20) == 0 && instr->Bit(4) == 0) { |
+ const char* op = (instr->Bit(21) == 0) ? "vcge" : "vcgt"; |
+ // vcge/vcgt.f32 Qd, Qm, Qn. |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
+ "%s.f32 q%d, q%d, q%d", op, Vd, Vn, Vm); |
+ } else { |
+ Unknown(instr); |
+ } |
+ break; |
+ } |
+ default: |
+ Unknown(instr); |
+ break; |
} |
break; |
+ } |
case 7: |
if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && |
(instr->Bit(4) == 1)) { |
@@ -2085,7 +2164,7 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
int Vm = (instr->Bit(5) << 4) | instr->VmValue(); |
int imm3 = instr->Bits(21, 19); |
out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vmovl.u%d q%d, d%d", imm3*8, Vd, Vm); |
+ "vmovl.u%d q%d, d%d", imm3 * 8, Vd, Vm); |
} else if (instr->Opc1Value() == 7 && instr->Bits(21, 20) == 0x3 && |
instr->Bit(4) == 0) { |
if (instr->Bits(17, 16) == 0x2 && instr->Bits(11, 7) == 0) { |
@@ -2211,8 +2290,8 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
int size = instr->Bits(7, 6); |
int align = instr->Bits(5, 4); |
int Rm = instr->VmValue(); |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vst1.%d ", (1 << size) << 3); |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "vst1.%d ", |
+ (1 << size) << 3); |
FormatNeonList(Vd, type); |
Print(", "); |
FormatNeonMemory(Rn, align, Rm); |
@@ -2224,8 +2303,8 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
int size = instr->Bits(7, 6); |
int align = instr->Bits(5, 4); |
int Rm = instr->VmValue(); |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "vld1.%d ", (1 << size) << 3); |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "vld1.%d ", |
+ (1 << size) << 3); |
FormatNeonList(Vd, type); |
Print(", "); |
FormatNeonMemory(Rn, align, Rm); |
@@ -2239,8 +2318,8 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
int Rn = instr->Bits(19, 16); |
int offset = instr->Bits(11, 0); |
if (offset == 0) { |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "pld [r%d]", Rn); |
+ out_buffer_pos_ += |
+ SNPrintF(out_buffer_ + out_buffer_pos_, "pld [r%d]", Rn); |
} else if (instr->Bit(23) == 0) { |
out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
"pld [r%d, #-%d]", Rn, offset); |
@@ -2252,16 +2331,16 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) { |
int option = instr->Bits(3, 0); |
switch (instr->Bits(7, 4)) { |
case 4: |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "dsb %s", barrier_option_names[option]); |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "dsb %s", |
+ barrier_option_names[option]); |
break; |
case 5: |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "dmb %s", barrier_option_names[option]); |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "dmb %s", |
+ barrier_option_names[option]); |
break; |
case 6: |
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, |
- "isb %s", barrier_option_names[option]); |
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "isb %s", |
+ barrier_option_names[option]); |
break; |
default: |
Unknown(instr); |