Commit ca0c1f8f authored by Ng Zhi An's avatar Ng Zhi An Committed by Commit Bot

[wasm-simd][liftoff][arm][arm64] Implement i64x2.eq

For ARM, factor the code sequence out into a macro-assembler function to
allow sharing between TurboFan and Liftoff.

Bug: v8:11215
Change-Id: Ib337e3f3dd90174b71a9bcd951b3779275c7465c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2648820
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#72380}
parent 7f91017a
...@@ -2640,6 +2640,15 @@ void TurboAssembler::I64x2BitMask(Register dst, QwNeonRegister src) { ...@@ -2640,6 +2640,15 @@ void TurboAssembler::I64x2BitMask(Register dst, QwNeonRegister src) {
add(dst, dst, Operand(tmp, LSL, 1)); add(dst, dst, Operand(tmp, LSL, 1));
} }
void TurboAssembler::I64x2Eq(QwNeonRegister dst, QwNeonRegister src1,
QwNeonRegister src2) {
UseScratchRegisterScope temps(this);
Simd128Register scratch = temps.AcquireQ();
vceq(Neon32, dst, src1, src2);
vrev64(Neon32, scratch, dst);
vand(dst, dst, scratch);
}
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
......
...@@ -569,6 +569,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -569,6 +569,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
// instructions. These helpers allow us to define the optimal code sequence, // instructions. These helpers allow us to define the optimal code sequence,
// and be used in both TurboFan and Liftoff. // and be used in both TurboFan and Liftoff.
void I64x2BitMask(Register dst, QwNeonRegister src); void I64x2BitMask(Register dst, QwNeonRegister src);
void I64x2Eq(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2);
private: private:
// Compare single values and then load the fpscr flags to a register. // Compare single values and then load the fpscr flags to a register.
......
...@@ -2429,13 +2429,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -2429,13 +2429,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
break; break;
} }
case kArmI64x2Eq: { case kArmI64x2Eq: {
Simd128Register dst = i.OutputSimd128Register(); __ I64x2Eq(i.OutputSimd128Register(), i.InputSimd128Register(0),
UseScratchRegisterScope temps(tasm()); i.InputSimd128Register(1));
Simd128Register scratch = temps.AcquireQ();
__ vceq(Neon32, dst, i.InputSimd128Register(0),
i.InputSimd128Register(1));
__ vrev64(Neon32, scratch, dst);
__ vand(dst, dst, scratch);
break; break;
} }
case kArmI32x4Eq: { case kArmI32x4Eq: {
......
...@@ -3707,7 +3707,8 @@ void LiftoffAssembler::emit_i32x4_ge_u(LiftoffRegister dst, LiftoffRegister lhs, ...@@ -3707,7 +3707,8 @@ void LiftoffAssembler::emit_i32x4_ge_u(LiftoffRegister dst, LiftoffRegister lhs,
void LiftoffAssembler::emit_i64x2_eq(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
LiftoffRegister rhs) { LiftoffRegister rhs) {
bailout(kSimd, "i64x2.eq"); I64x2Eq(liftoff::GetSimd128Register(dst), liftoff::GetSimd128Register(lhs),
liftoff::GetSimd128Register(rhs));
} }
void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
......
...@@ -2718,7 +2718,7 @@ void LiftoffAssembler::emit_i32x4_ge_u(LiftoffRegister dst, LiftoffRegister lhs, ...@@ -2718,7 +2718,7 @@ void LiftoffAssembler::emit_i32x4_ge_u(LiftoffRegister dst, LiftoffRegister lhs,
void LiftoffAssembler::emit_i64x2_eq(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
LiftoffRegister rhs) { LiftoffRegister rhs) {
bailout(kSimd, "i64x2.eq"); Cmeq(dst.fp().V2D(), lhs.fp().V2D(), rhs.fp().V2D());
} }
void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment