Index: src/arm/assembler-arm.cc |
diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc |
index 2a7f68c07cb7bcd22ca946622d58151dcd4f7862..97725338bef6b652c3a82a209e50a228c62fcf0d 100644 |
--- a/src/arm/assembler-arm.cc |
+++ b/src/arm/assembler-arm.cc |
@@ -4747,10 +4747,14 @@ static Instr EncodeNeonSizedOp(NeonSizedOp op, NeonRegType reg_type, |
} |
void Assembler::vzip(NeonSize size, DwVfpRegister src1, DwVfpRegister src2) { |
- DCHECK(IsEnabled(NEON)); |
- // vzip.<size>(Dn, Dm) SIMD zip (interleave). |
- // Instruction details available in ARM DDI 0406C.b, A8-1102. |
- emit(EncodeNeonSizedOp(VZIP, NEON_D, size, src1.code(), src2.code())); |
+ if (size == Neon32) { // vzip.32 Dd, Dm is a pseudo-op for vtrn.32 Dd, Dm. |
+ vtrn(size, src1, src2); |
+ } else { |
+ DCHECK(IsEnabled(NEON)); |
+ // vzip.<size>(Dn, Dm) SIMD zip (interleave). |
+ // Instruction details available in ARM DDI 0406C.b, A8-1102. |
+ emit(EncodeNeonSizedOp(VZIP, NEON_D, size, src1.code(), src2.code())); |
+ } |
} |
void Assembler::vzip(NeonSize size, QwNeonRegister src1, QwNeonRegister src2) { |
@@ -4761,10 +4765,14 @@ void Assembler::vzip(NeonSize size, QwNeonRegister src1, QwNeonRegister src2) { |
} |
void Assembler::vuzp(NeonSize size, DwVfpRegister src1, DwVfpRegister src2) { |
- DCHECK(IsEnabled(NEON)); |
- // vuzp.<size>(Dn, Dm) SIMD un-zip (de-interleave). |
- // Instruction details available in ARM DDI 0406C.b, A8-1100. |
- emit(EncodeNeonSizedOp(VUZP, NEON_D, size, src1.code(), src2.code())); |
+ if (size == Neon32) { // vuzp.32 Dd, Dm is a pseudo-op for vtrn.32 Dd, Dm. |
+ vtrn(size, src1, src2); |
+ } else { |
+ DCHECK(IsEnabled(NEON)); |
+ // vuzp.<size>(Dn, Dm) SIMD un-zip (de-interleave). |
+ // Instruction details available in ARM DDI 0406C.b, A8-1100. |
+ emit(EncodeNeonSizedOp(VUZP, NEON_D, size, src1.code(), src2.code())); |
+ } |
} |
void Assembler::vuzp(NeonSize size, QwNeonRegister src1, QwNeonRegister src2) { |