Index: src/arm/assembler-arm.cc |
diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc |
index f748d64f846a8df6f288f00591c7bb16cf2e2e8d..2eadd4f81e9cace85c722e86d0f545a75c7fa2e7 100644 |
--- a/src/arm/assembler-arm.cc |
+++ b/src/arm/assembler-arm.cc |
@@ -4241,6 +4241,60 @@ void Assembler::vmul(NeonSize size, QwNeonRegister dst, |
n * B7 | B6 | m * B5 | B4 | vm); |
} |
+void Assembler::vrecpe(const QwNeonRegister dst, const QwNeonRegister src) { |
+ DCHECK(IsEnabled(NEON)); |
+ // Qd = vadd(Qn, Qm) SIMD reciprocal estimate. |
+ // Instruction details available in ARM DDI 0406C.b, A8-1024. |
+ int vd, d; |
+ dst.split_code(&vd, &d); |
+ int vm, m; |
+ src.split_code(&vm, &m); |
+ emit(0x1E7U * B23 | d * B22 | 0x3B * B16 | vd * B12 | 0x5 * B8 | B6 | m * B5 | |
+ vm); |
+} |
+ |
+void Assembler::vrsqrte(const QwNeonRegister dst, const QwNeonRegister src) { |
+ DCHECK(IsEnabled(NEON)); |
+ // Qd = vadd(Qn, Qm) SIMD reciprocal square root estimate. |
+ // Instruction details available in ARM DDI 0406C.b, A8-1038. |
+ int vd, d; |
+ dst.split_code(&vd, &d); |
+ int vm, m; |
+ src.split_code(&vm, &m); |
+ emit(0x1E7U * B23 | d * B22 | 0x3B * B16 | vd * B12 | 0x5 * B8 | 0x3 * B6 | |
+ m * B5 | vm); |
+} |
+ |
+void Assembler::vrecps(const QwNeonRegister dst, const QwNeonRegister src1, |
+ const QwNeonRegister src2) { |
+ DCHECK(IsEnabled(NEON)); |
+ // Qd = vadd(Qn, Qm) SIMD reciprocal refinement step. |
+ // Instruction details available in ARM DDI 0406C.b, A8-1026. |
+ int vd, d; |
+ dst.split_code(&vd, &d); |
+ int vn, n; |
+ src1.split_code(&vn, &n); |
+ int vm, m; |
+ src2.split_code(&vm, &m); |
+ emit(0x1E4U * B23 | d * B22 | vn * B16 | vd * B12 | 0xF * B8 | n * B7 | B6 | |
+ m * B5 | B4 | vm); |
+} |
+ |
+void Assembler::vrsqrts(const QwNeonRegister dst, const QwNeonRegister src1, |
+ const QwNeonRegister src2) { |
+ DCHECK(IsEnabled(NEON)); |
+ // Qd = vadd(Qn, Qm) SIMD reciprocal square root refinement step. |
+ // Instruction details available in ARM DDI 0406C.b, A8-1040. |
+ int vd, d; |
+ dst.split_code(&vd, &d); |
+ int vn, n; |
+ src1.split_code(&vn, &n); |
+ int vm, m; |
+ src2.split_code(&vm, &m); |
+ emit(0x1E4U * B23 | d * B22 | B21 | vn * B16 | vd * B12 | 0xF * B8 | n * B7 | |
+ B6 | m * B5 | B4 | vm); |
+} |
+ |
void Assembler::vtst(NeonSize size, QwNeonRegister dst, |
const QwNeonRegister src1, const QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |