Index: src/arm/assembler-arm.cc |
diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc |
index 1350dc41a3183b699f1b55f9ab4990a47fb4203a..6fef17b0b120039a72f5beef463c3ddf3092c28e 100644 |
--- a/src/arm/assembler-arm.cc |
+++ b/src/arm/assembler-arm.cc |
@@ -3878,8 +3878,10 @@ void Assembler::vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src) { |
dst.split_code(&vd, &d); |
int vm, m; |
src.split_code(&vm, &m); |
- emit(0xFU*B28 | B25 | (dt & NeonDataTypeUMask) | B23 | d*B22 | |
- (dt & NeonDataTypeSizeMask)*B19 | vd*B12 | 0xA*B8 | m*B5 | B4 | vm); |
+ int U = NeonU(dt); |
+ int imm3 = 1 << NeonSz(dt); |
+ emit(0xFU * B28 | B25 | U * B24 | B23 | d * B22 | imm3 * B19 | vd * B12 | |
+ 0xA * B8 | m * B5 | B4 | vm); |
} |
static int EncodeScalar(NeonDataType dt, int index) { |
@@ -3928,7 +3930,7 @@ void Assembler::vmov(NeonDataType dt, Register dst, DwVfpRegister src, |
int vn, n; |
src.split_code(&vn, &n); |
int opc1_opc2 = EncodeScalar(dt, index); |
- int u = (dt & NeonDataTypeUMask) != 0 ? 1 : 0; |
+ int u = NeonU(dt); |
emit(0xEEu * B24 | u * B23 | B20 | vn * B16 | dst.code() * B12 | 0xB * B8 | |
n * B7 | B4 | opc1_opc2); |
} |
@@ -4209,81 +4211,165 @@ void Assembler::vorr(QwNeonRegister dst, QwNeonRegister src1, |
emit(EncodeNeonBinaryBitwiseOp(VORR, dst, src1, src2)); |
} |
-void Assembler::vadd(QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
- DCHECK(IsEnabled(NEON)); |
- // Qd = vadd(Qn, Qm) SIMD floating point addition. |
- // Instruction details available in ARM DDI 0406C.b, A8-830. |
+enum FPBinOp { |
+ VADDF, |
+ VSUBF, |
+ VMULF, |
+ VMINF, |
+ VMAXF, |
+ VRECPS, |
+ VRSQRTS, |
+ VCEQF, |
+ VCGEF, |
+ VCGTF |
+}; |
+ |
+static Instr EncodeNeonBinOp(FPBinOp op, QwNeonRegister dst, |
+ QwNeonRegister src1, QwNeonRegister src2) { |
+ int op_encoding = 0; |
+ switch (op) { |
+ case VADDF: |
+ op_encoding = 0xD * B8; |
+ break; |
+ case VSUBF: |
+ op_encoding = B21 | 0xD * B8; |
+ break; |
+ case VMULF: |
+ op_encoding = B24 | 0xD * B8 | B4; |
+ break; |
+ case VMINF: |
+ op_encoding = B21 | 0xF * B8; |
+ break; |
+ case VMAXF: |
+ op_encoding = 0xF * B8; |
+ break; |
+ case VRECPS: |
+ op_encoding = 0xF * B8 | B4; |
+ break; |
+ case VRSQRTS: |
+ op_encoding = B21 | 0xF * B8 | B4; |
+ break; |
+ case VCEQF: |
+ op_encoding = 0xE * B8; |
+ break; |
+ case VCGEF: |
+ op_encoding = B24 | 0xE * B8; |
+ break; |
+ case VCGTF: |
+ op_encoding = B24 | B21 | 0xE * B8; |
+ break; |
+ default: |
+ UNREACHABLE(); |
+ break; |
+ } |
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 | 0xD * B8 | n * B7 | B6 | |
- m * B5 | vm); |
+ return 0x1E4U * B23 | d * B22 | vn * B16 | vd * B12 | n * B7 | B6 | m * B5 | |
+ vm | op_encoding; |
} |
-void Assembler::vadd(NeonSize size, QwNeonRegister dst, |
- const QwNeonRegister src1, const QwNeonRegister src2) { |
- DCHECK(IsEnabled(NEON)); |
- // Qd = vadd(Qn, Qm) SIMD integer addition. |
- // Instruction details available in ARM DDI 0406C.b, A8-828. |
+enum IntegerBinOp { VADD, VSUB, VMUL, VMIN, VMAX, VTST, VCEQ, VCGE, VCGT }; |
+ |
+static Instr EncodeNeonBinOp(IntegerBinOp op, NeonDataType dt, |
+ const QwNeonRegister dst, |
+ const QwNeonRegister src1, |
+ const QwNeonRegister src2) { |
+ int op_encoding = 0; |
+ switch (op) { |
+ case VADD: |
+ op_encoding = 0x8 * B8; |
+ break; |
+ case VSUB: |
+ op_encoding = B24 | 0x8 * B8; |
+ break; |
+ case VMUL: |
+ op_encoding = 0x9 * B8 | B4; |
+ break; |
+ case VMIN: |
+ op_encoding = 0x6 * B8 | B4; |
+ break; |
+ case VMAX: |
+ op_encoding = 0x6 * B8; |
+ break; |
+ case VTST: |
+ op_encoding = 0x8 * B8 | B4; |
+ break; |
+ case VCEQ: |
+ op_encoding = B24 | 0x8 * B8 | B4; |
+ break; |
+ case VCGE: |
+ op_encoding = 0x3 * B8 | B4; |
+ break; |
+ case VCGT: |
+ op_encoding = 0x3 * B8; |
+ break; |
+ default: |
+ UNREACHABLE(); |
+ break; |
+ } |
int vd, d; |
dst.split_code(&vd, &d); |
int vn, n; |
src1.split_code(&vn, &n); |
int vm, m; |
src2.split_code(&vm, &m); |
- int sz = static_cast<int>(size); |
- emit(0x1E4U * B23 | d * B22 | sz * B20 | vn * B16 | vd * B12 | 0x8 * B8 | |
- n * B7 | B6 | m * B5 | vm); |
+ int size = NeonSz(dt); |
+ int u = NeonU(dt); |
+ return 0x1E4U * B23 | u * B24 | d * B22 | size * B20 | vn * B16 | vd * B12 | |
+ n * B7 | B6 | m * B5 | vm | op_encoding; |
} |
-void Assembler::vsub(QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+static Instr EncodeNeonBinOp(IntegerBinOp op, NeonSize size, |
+ const QwNeonRegister dst, |
+ const QwNeonRegister src1, |
+ const QwNeonRegister src2) { |
+ // Map NeonSize values to the signed values in NeonDataType, so the U bit |
+ // will be 0. |
+ return EncodeNeonBinOp(op, static_cast<NeonDataType>(size), dst, src1, src2); |
+} |
+ |
+void Assembler::vadd(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
+ DCHECK(IsEnabled(NEON)); |
+ // Qd = vadd(Qn, Qm) SIMD floating point addition. |
+ // Instruction details available in ARM DDI 0406C.b, A8-830. |
+ emit(EncodeNeonBinOp(VADDF, dst, src1, src2)); |
+} |
+ |
+void Assembler::vadd(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
+ DCHECK(IsEnabled(NEON)); |
+ // Qd = vadd(Qn, Qm) SIMD integer addition. |
+ // Instruction details available in ARM DDI 0406C.b, A8-828. |
+ emit(EncodeNeonBinOp(VADD, size, dst, src1, src2)); |
+} |
+ |
+void Assembler::vsub(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vsub(Qn, Qm) SIMD floating point subtraction. |
// Instruction details available in ARM DDI 0406C.b, A8-1086. |
- 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 | 0xD * B8 | n * B7 | |
- B6 | m * B5 | vm); |
+ emit(EncodeNeonBinOp(VSUBF, dst, src1, src2)); |
} |
-void Assembler::vsub(NeonSize size, QwNeonRegister dst, |
- const QwNeonRegister src1, const QwNeonRegister src2) { |
+void Assembler::vsub(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vsub(Qn, Qm) SIMD integer subtraction. |
// Instruction details available in ARM DDI 0406C.b, A8-1084. |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int sz = static_cast<int>(size); |
- emit(0x1E6U * B23 | d * B22 | sz * B20 | vn * B16 | vd * B12 | 0x8 * B8 | |
- n * B7 | B6 | m * B5 | vm); |
+ emit(EncodeNeonBinOp(VSUB, size, dst, src1, src2)); |
} |
-void Assembler::vmul(QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+void Assembler::vmul(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vadd(Qn, Qm) SIMD floating point multiply. |
// Instruction details available in ARM DDI 0406C.b, A8-958. |
- 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(0x1E6U * B23 | d * B22 | vn * B16 | vd * B12 | 0xD * B8 | n * B7 | B6 | |
- m * B5 | B4 | vm); |
+ emit(EncodeNeonBinOp(VMULF, dst, src1, src2)); |
} |
void Assembler::vmul(NeonSize size, QwNeonRegister dst, |
@@ -4291,43 +4377,7 @@ void Assembler::vmul(NeonSize size, QwNeonRegister dst, |
DCHECK(IsEnabled(NEON)); |
// Qd = vadd(Qn, Qm) SIMD integer multiply. |
// Instruction details available in ARM DDI 0406C.b, A8-960. |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int sz = static_cast<int>(size); |
- emit(0x1E4U * B23 | d * B22 | sz * B20 | vn * B16 | vd * B12 | 0x9 * B8 | |
- n * B7 | B6 | m * B5 | B4 | vm); |
-} |
- |
-static Instr EncodeNeonMinMax(bool is_min, QwNeonRegister dst, |
- QwNeonRegister src1, QwNeonRegister src2) { |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int min = is_min ? 1 : 0; |
- return 0x1E4U * B23 | d * B22 | min * B21 | vn * B16 | vd * B12 | 0xF * B8 | |
- n * B7 | B6 | m * B5 | vm; |
-} |
- |
-static Instr EncodeNeonMinMax(bool is_min, NeonDataType dt, QwNeonRegister dst, |
- QwNeonRegister src1, QwNeonRegister src2) { |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int min = is_min ? 1 : 0; |
- int size = (dt & NeonDataTypeSizeMask) / 2; |
- int U = dt & NeonDataTypeUMask; |
- return 0x1E4U * B23 | U | d * B22 | size * B20 | vn * B16 | vd * B12 | |
- 0x6 * B8 | B6 | m * B5 | min * B4 | vm; |
+ emit(EncodeNeonBinOp(VMUL, size, dst, src1, src2)); |
} |
void Assembler::vmin(const QwNeonRegister dst, const QwNeonRegister src1, |
@@ -4335,7 +4385,7 @@ void Assembler::vmin(const QwNeonRegister dst, const QwNeonRegister src1, |
DCHECK(IsEnabled(NEON)); |
// Qd = vmin(Qn, Qm) SIMD floating point MIN. |
// Instruction details available in ARM DDI 0406C.b, A8-928. |
- emit(EncodeNeonMinMax(true, dst, src1, src2)); |
+ emit(EncodeNeonBinOp(VMINF, dst, src1, src2)); |
} |
void Assembler::vmin(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |
@@ -4343,7 +4393,7 @@ void Assembler::vmin(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |
DCHECK(IsEnabled(NEON)); |
// Qd = vmin(Qn, Qm) SIMD integer MIN. |
// Instruction details available in ARM DDI 0406C.b, A8-926. |
- emit(EncodeNeonMinMax(true, dt, dst, src1, src2)); |
+ emit(EncodeNeonBinOp(VMIN, dt, dst, src1, src2)); |
} |
void Assembler::vmax(QwNeonRegister dst, QwNeonRegister src1, |
@@ -4351,7 +4401,7 @@ void Assembler::vmax(QwNeonRegister dst, QwNeonRegister src1, |
DCHECK(IsEnabled(NEON)); |
// Qd = vmax(Qn, Qm) SIMD floating point MAX. |
// Instruction details available in ARM DDI 0406C.b, A8-928. |
- emit(EncodeNeonMinMax(false, dst, src1, src2)); |
+ emit(EncodeNeonBinOp(VMAXF, dst, src1, src2)); |
} |
void Assembler::vmax(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |
@@ -4359,7 +4409,7 @@ void Assembler::vmax(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |
DCHECK(IsEnabled(NEON)); |
// Qd = vmax(Qn, Qm) SIMD integer MAX. |
// Instruction details available in ARM DDI 0406C.b, A8-926. |
- emit(EncodeNeonMinMax(false, dt, dst, src1, src2)); |
+ emit(EncodeNeonBinOp(VMAX, dt, dst, src1, src2)); |
} |
static Instr EncodeNeonEstimateOp(bool is_rsqrt, QwNeonRegister dst, |
@@ -4373,158 +4423,90 @@ static Instr EncodeNeonEstimateOp(bool is_rsqrt, QwNeonRegister dst, |
rsqrt * B7 | B6 | m * B5 | vm; |
} |
-void Assembler::vrecpe(const QwNeonRegister dst, const QwNeonRegister src) { |
+void Assembler::vrecpe(QwNeonRegister dst, QwNeonRegister src) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vrecpe(Qm) SIMD reciprocal estimate. |
// Instruction details available in ARM DDI 0406C.b, A8-1024. |
emit(EncodeNeonEstimateOp(false, dst, src)); |
} |
-void Assembler::vrsqrte(const QwNeonRegister dst, const QwNeonRegister src) { |
+void Assembler::vrsqrte(QwNeonRegister dst, QwNeonRegister src) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vrsqrte(Qm) SIMD reciprocal square root estimate. |
// Instruction details available in ARM DDI 0406C.b, A8-1038. |
emit(EncodeNeonEstimateOp(true, dst, src)); |
} |
-static Instr EncodeNeonRefinementOp(bool is_rsqrt, QwNeonRegister dst, |
- QwNeonRegister src1, QwNeonRegister src2) { |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int rsqrt = is_rsqrt ? 1 : 0; |
- return 0x1E4U * B23 | d * B22 | rsqrt * B21 | vn * B16 | vd * B12 | 0xF * B8 | |
- n * B7 | B6 | m * B5 | B4 | vm; |
-} |
- |
-void Assembler::vrecps(const QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+void Assembler::vrecps(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vrecps(Qn, Qm) SIMD reciprocal refinement step. |
// Instruction details available in ARM DDI 0406C.b, A8-1026. |
- emit(EncodeNeonRefinementOp(false, dst, src1, src2)); |
+ emit(EncodeNeonBinOp(VRECPS, dst, src1, src2)); |
} |
-void Assembler::vrsqrts(const QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+void Assembler::vrsqrts(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vrsqrts(Qn, Qm) SIMD reciprocal square root refinement step. |
// Instruction details available in ARM DDI 0406C.b, A8-1040. |
- emit(EncodeNeonRefinementOp(true, dst, src1, src2)); |
+ emit(EncodeNeonBinOp(VRSQRTS, dst, src1, src2)); |
} |
-void Assembler::vtst(NeonSize size, QwNeonRegister dst, |
- const QwNeonRegister src1, const QwNeonRegister src2) { |
+void Assembler::vtst(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vtst(Qn, Qm) SIMD test integer operands. |
// Instruction details available in ARM DDI 0406C.b, A8-1098. |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int sz = static_cast<int>(size); |
- emit(0x1E4U * B23 | d * B22 | sz * B20 | vn * B16 | vd * B12 | 0x8 * B8 | |
- n * B7 | B6 | m * B5 | B4 | vm); |
+ emit(EncodeNeonBinOp(VTST, size, dst, src1, src2)); |
} |
-void Assembler::vceq(const QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+void Assembler::vceq(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vceq(Qn, Qm) SIMD floating point compare equal. |
// Instruction details available in ARM DDI 0406C.b, A8-844. |
- 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 | 0xe * B8 | n * B7 | B6 | |
- m * B5 | vm); |
+ emit(EncodeNeonBinOp(VCEQF, dst, src1, src2)); |
} |
-void Assembler::vceq(NeonSize size, QwNeonRegister dst, |
- const QwNeonRegister src1, const QwNeonRegister src2) { |
+void Assembler::vceq(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vceq(Qn, Qm) SIMD integer compare equal. |
// Instruction details available in ARM DDI 0406C.b, A8-844. |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int sz = static_cast<int>(size); |
- emit(0x1E6U * B23 | d * B22 | sz * B20 | vn * B16 | vd * B12 | 0x8 * B8 | |
- n * B7 | B6 | m * B5 | B4 | vm); |
-} |
- |
-static Instr EncodeNeonCompareOp(const QwNeonRegister dst, |
- const QwNeonRegister src1, |
- const QwNeonRegister src2, Condition cond) { |
- DCHECK(cond == ge || cond == gt); |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int is_gt = (cond == gt) ? 1 : 0; |
- return 0x1E6U * B23 | d * B22 | is_gt * B21 | vn * B16 | vd * B12 | 0xe * B8 | |
- n * B7 | B6 | m * B5 | vm; |
+ emit(EncodeNeonBinOp(VCEQ, size, dst, src1, src2)); |
} |
-static Instr EncodeNeonCompareOp(NeonDataType dt, const QwNeonRegister dst, |
- const QwNeonRegister src1, |
- const QwNeonRegister src2, Condition cond) { |
- DCHECK(cond == ge || cond == gt); |
- int vd, d; |
- dst.split_code(&vd, &d); |
- int vn, n; |
- src1.split_code(&vn, &n); |
- int vm, m; |
- src2.split_code(&vm, &m); |
- int size = (dt & NeonDataTypeSizeMask) / 2; |
- int U = dt & NeonDataTypeUMask; |
- int is_ge = (cond == ge) ? 1 : 0; |
- return 0x1E4U * B23 | U | d * B22 | size * B20 | vn * B16 | vd * B12 | |
- 0x3 * B8 | n * B7 | B6 | m * B5 | is_ge * B4 | vm; |
-} |
- |
-void Assembler::vcge(const QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+void Assembler::vcge(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vcge(Qn, Qm) SIMD floating point compare greater or equal. |
// Instruction details available in ARM DDI 0406C.b, A8-848. |
- emit(EncodeNeonCompareOp(dst, src1, src2, ge)); |
+ emit(EncodeNeonBinOp(VCGEF, dst, src1, src2)); |
} |
-void Assembler::vcge(NeonDataType dt, QwNeonRegister dst, |
- const QwNeonRegister src1, const QwNeonRegister src2) { |
+void Assembler::vcge(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vcge(Qn, Qm) SIMD integer compare greater or equal. |
// Instruction details available in ARM DDI 0406C.b, A8-848. |
- emit(EncodeNeonCompareOp(dt, dst, src1, src2, ge)); |
+ emit(EncodeNeonBinOp(VCGE, dt, dst, src1, src2)); |
} |
-void Assembler::vcgt(const QwNeonRegister dst, const QwNeonRegister src1, |
- const QwNeonRegister src2) { |
+void Assembler::vcgt(QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vcgt(Qn, Qm) SIMD floating point compare greater than. |
// Instruction details available in ARM DDI 0406C.b, A8-852. |
- emit(EncodeNeonCompareOp(dst, src1, src2, gt)); |
+ emit(EncodeNeonBinOp(VCGTF, dst, src1, src2)); |
} |
-void Assembler::vcgt(NeonDataType dt, QwNeonRegister dst, |
- const QwNeonRegister src1, const QwNeonRegister src2) { |
+void Assembler::vcgt(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src1, |
+ QwNeonRegister src2) { |
DCHECK(IsEnabled(NEON)); |
// Qd = vcgt(Qn, Qm) SIMD integer compare greater than. |
// Instruction details available in ARM DDI 0406C.b, A8-852. |
- emit(EncodeNeonCompareOp(dt, dst, src1, src2, gt)); |
+ emit(EncodeNeonBinOp(VCGT, dt, dst, src1, src2)); |
} |
void Assembler::vext(QwNeonRegister dst, const QwNeonRegister src1, |