[wasm-simd] [liftoff] Implement ne on x64 and ia32
Bug: v8:9909 Change-Id: I11a07dcfe3362e8476ecf361f7de1c5047a34d7c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2154330 Reviewed-by: Zhi An Ng <zhin@chromium.org> Commit-Queue: Jing Bao <jing.bao@intel.com> Cr-Commit-Position: refs/heads/master@{#67258}
This commit is contained in:
parent
7c92b0b502
commit
6f7b4c7fde
@ -2161,24 +2161,44 @@ void LiftoffAssembler::emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
liftoff::GetSimd128Register(lhs), liftoff::GetSimd128Register(rhs));
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
vceq(Neon16, liftoff::GetSimd128Register(dst),
|
||||
liftoff::GetSimd128Register(lhs), liftoff::GetSimd128Register(rhs));
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i16x8_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
vceq(Neon32, liftoff::GetSimd128Register(dst),
|
||||
liftoff::GetSimd128Register(lhs), liftoff::GetSimd128Register(rhs));
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i32x4_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
vceq(liftoff::GetSimd128Register(dst), liftoff::GetSimd128Register(lhs),
|
||||
liftoff::GetSimd128Register(rhs));
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "f32x4_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
QwNeonRegister dest = liftoff::GetSimd128Register(dst);
|
||||
@ -2199,6 +2219,11 @@ void LiftoffAssembler::emit_f64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
vmov(dest.high(), scratch, scratch);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "f64x2_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_s128_not(LiftoffRegister dst, LiftoffRegister src) {
|
||||
vmvn(liftoff::GetSimd128Register(dst), liftoff::GetSimd128Register(src));
|
||||
}
|
||||
|
@ -1514,26 +1514,51 @@ void LiftoffAssembler::emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
Cmeq(dst.fp().V16B(), lhs.fp().V16B(), rhs.fp().V16B());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Cmeq(dst.fp().V8H(), lhs.fp().V8H(), rhs.fp().V8H());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i16x8_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Cmeq(dst.fp().V4S(), lhs.fp().V4S(), rhs.fp().V4S());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i32x4_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Fcmeq(dst.fp().V4S(), lhs.fp().V4S(), rhs.fp().V4S());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "f32x4_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Fcmeq(dst.fp().V2D(), lhs.fp().V2D(), rhs.fp().V2D());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "f64x2_ne");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_s128_not(LiftoffRegister dst, LiftoffRegister src) {
|
||||
Mvn(dst.fp().V16B(), src.fp().V16B());
|
||||
}
|
||||
|
@ -2025,30 +2025,66 @@ void LiftoffAssembler::emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqb, &Assembler::pcmpeqb>(
|
||||
this, dst, lhs, rhs);
|
||||
Pcmpeqb(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg);
|
||||
Pxor(dst.fp(), liftoff::kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqw, &Assembler::pcmpeqw>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqw, &Assembler::pcmpeqw>(
|
||||
this, dst, lhs, rhs);
|
||||
Pcmpeqw(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg);
|
||||
Pxor(dst.fp(), liftoff::kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqd, &Assembler::pcmpeqd>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqd, &Assembler::pcmpeqd>(
|
||||
this, dst, lhs, rhs);
|
||||
Pcmpeqd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg);
|
||||
Pxor(dst.fp(), liftoff::kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpeqps, &Assembler::cmpeqps>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpneqps,
|
||||
&Assembler::cmpneqps>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpeqpd, &Assembler::cmpeqpd>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpneqpd,
|
||||
&Assembler::cmpneqpd>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_s128_not(LiftoffRegister dst, LiftoffRegister src) {
|
||||
if (dst.fp() != src.fp()) {
|
||||
Pcmpeqd(dst.fp(), dst.fp());
|
||||
|
@ -731,14 +731,24 @@ class LiftoffAssembler : public TurboAssembler {
|
||||
inline void emit_f64x2_splat(LiftoffRegister dst, LiftoffRegister src);
|
||||
inline void emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_f32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_f64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_f64x2_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_s128_not(LiftoffRegister dst, LiftoffRegister src);
|
||||
inline void emit_s128_and(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
|
@ -2344,14 +2344,24 @@ class LiftoffCompiler {
|
||||
return EmitUnOp<kF64, kS128>(&LiftoffAssembler::emit_f64x2_splat);
|
||||
case wasm::kExprI8x16Eq:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i8x16_eq);
|
||||
case wasm::kExprI8x16Ne:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i8x16_ne);
|
||||
case wasm::kExprI16x8Eq:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i16x8_eq);
|
||||
case wasm::kExprI16x8Ne:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i16x8_ne);
|
||||
case wasm::kExprI32x4Eq:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i32x4_eq);
|
||||
case wasm::kExprI32x4Ne:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i32x4_ne);
|
||||
case wasm::kExprF32x4Eq:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_f32x4_eq);
|
||||
case wasm::kExprF32x4Ne:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_f32x4_ne);
|
||||
case wasm::kExprF64x2Eq:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_f64x2_eq);
|
||||
case wasm::kExprF64x2Ne:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_f64x2_ne);
|
||||
case wasm::kExprS128Not:
|
||||
return EmitUnOp<kS128, kS128>(&LiftoffAssembler::emit_s128_not);
|
||||
case wasm::kExprS128And:
|
||||
|
@ -1988,30 +1988,66 @@ void LiftoffAssembler::emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqb, &Assembler::pcmpeqb>(
|
||||
this, dst, lhs, rhs);
|
||||
Pcmpeqb(kScratchDoubleReg, kScratchDoubleReg);
|
||||
Pxor(dst.fp(), kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqw, &Assembler::pcmpeqw>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqw, &Assembler::pcmpeqw>(
|
||||
this, dst, lhs, rhs);
|
||||
Pcmpeqw(kScratchDoubleReg, kScratchDoubleReg);
|
||||
Pxor(dst.fp(), kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqd, &Assembler::pcmpeqd>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpcmpeqd, &Assembler::pcmpeqd>(
|
||||
this, dst, lhs, rhs);
|
||||
Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
||||
Pxor(dst.fp(), kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpeqps, &Assembler::cmpeqps>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f32x4_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpneqps,
|
||||
&Assembler::cmpneqps>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_eq(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpeqpd, &Assembler::cmpeqpd>(
|
||||
this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_f64x2_ne(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vcmpneqpd,
|
||||
&Assembler::cmpneqpd>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_s128_not(LiftoffRegister dst, LiftoffRegister src) {
|
||||
if (dst.fp() != src.fp()) {
|
||||
Pcmpeqd(dst.fp(), dst.fp());
|
||||
|
Loading…
Reference in New Issue
Block a user