[wasm-simd] [liftoff] Implement sub_saturate on x64 and ia32
Bug: v8:9909 Change-Id: I13d7ae7b304fe55645ef7bcc9ac404782bb55d4e Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2131323 Reviewed-by: Zhi An Ng <zhin@chromium.org> Commit-Queue: Fanchen Kong <fanchen.kong@intel.com> Cr-Commit-Position: refs/heads/master@{#67099}
This commit is contained in:
parent
ffb4f2b77f
commit
c054847d0c
@ -1834,6 +1834,18 @@ void LiftoffAssembler::emit_i16x8_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
liftoff::GetSimd128Register(lhs), liftoff::GetSimd128Register(rhs));
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i16x8subsaturate_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i16x8subsaturate_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
vmul(Neon16, liftoff::GetSimd128Register(dst),
|
||||
@ -1948,6 +1960,18 @@ void LiftoffAssembler::emit_i8x16_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
liftoff::GetSimd128Register(lhs), liftoff::GetSimd128Register(rhs));
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16subsaturate_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16subsaturate_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
vmul(Neon8, liftoff::GetSimd128Register(dst),
|
||||
|
@ -1336,6 +1336,18 @@ void LiftoffAssembler::emit_i16x8_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
Sub(dst.fp().V8H(), lhs.fp().V8H(), rhs.fp().V8H());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i16x8subsaturate_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i16x8subsaturate_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Mul(dst.fp().V8H(), lhs.fp().V8H(), rhs.fp().V8H());
|
||||
@ -1419,6 +1431,18 @@ void LiftoffAssembler::emit_i8x16_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
Sub(dst.fp().V16B(), lhs.fp().V16B(), rhs.fp().V16B());
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16subsaturate_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16subsaturate_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Mul(dst.fp().V16B(), lhs.fp().V16B(), rhs.fp().V16B());
|
||||
|
@ -2050,6 +2050,20 @@ void LiftoffAssembler::emit_i8x16_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubsb, &Assembler::psubsb>(this, dst, lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubusb, &Assembler::psubusb>(this, dst,
|
||||
lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
static constexpr RegClass tmp_rc = reg_class_for(ValueType::kS128);
|
||||
@ -2177,6 +2191,20 @@ void LiftoffAssembler::emit_i16x8_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubsw, &Assembler::psubsw>(this, dst, lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubusw, &Assembler::psubusw>(this, dst,
|
||||
lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpmullw, &Assembler::pmullw>(
|
||||
|
@ -732,6 +732,12 @@ class LiftoffAssembler : public TurboAssembler {
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_min_s(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
@ -753,6 +759,12 @@ class LiftoffAssembler : public TurboAssembler {
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i16x8_min_s(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
|
@ -2355,6 +2355,12 @@ class LiftoffCompiler {
|
||||
&LiftoffAssembler::emit_i8x16_add_saturate_u);
|
||||
case wasm::kExprI8x16Sub:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i8x16_sub);
|
||||
case wasm::kExprI8x16SubSaturateS:
|
||||
return EmitBinOp<kS128, kS128>(
|
||||
&LiftoffAssembler::emit_i8x16_sub_saturate_s);
|
||||
case wasm::kExprI8x16SubSaturateU:
|
||||
return EmitBinOp<kS128, kS128>(
|
||||
&LiftoffAssembler::emit_i8x16_sub_saturate_u);
|
||||
case wasm::kExprI8x16Mul:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i8x16_mul);
|
||||
case wasm::kExprI8x16MinS:
|
||||
@ -2377,6 +2383,12 @@ class LiftoffCompiler {
|
||||
&LiftoffAssembler::emit_i16x8_add_saturate_u);
|
||||
case wasm::kExprI16x8Sub:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i16x8_sub);
|
||||
case wasm::kExprI16x8SubSaturateS:
|
||||
return EmitBinOp<kS128, kS128>(
|
||||
&LiftoffAssembler::emit_i16x8_sub_saturate_s);
|
||||
case wasm::kExprI16x8SubSaturateU:
|
||||
return EmitBinOp<kS128, kS128>(
|
||||
&LiftoffAssembler::emit_i16x8_sub_saturate_u);
|
||||
case wasm::kExprI16x8Mul:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i16x8_mul);
|
||||
case wasm::kExprI16x8MinS:
|
||||
|
@ -1994,6 +1994,20 @@ void LiftoffAssembler::emit_i8x16_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubsb, &Assembler::psubsb>(this, dst, lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubusb, &Assembler::psubusb>(this, dst,
|
||||
lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
static constexpr RegClass tmp_rc = reg_class_for(ValueType::kS128);
|
||||
@ -2121,6 +2135,20 @@ void LiftoffAssembler::emit_i16x8_sub(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubsw, &Assembler::psubsw>(this, dst, lhs,
|
||||
rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_sub_saturate_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdSub<&Assembler::vpsubusw, &Assembler::psubusw>(this, dst,
|
||||
lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i16x8_mul(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpmullw, &Assembler::pmullw>(
|
||||
|
Loading…
Reference in New Issue
Block a user