[wasm-simd][liftoff][arm][arm64] Implement i8x16 shr
Only for arm and arm64 now. The ia32 and x64 ones are more complicated and will be included in subsequent changes. Bug: v8:9909 Change-Id: I6597efbccd780e12234f8674e09e60bb3f803630 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2202722 Commit-Queue: Zhi An Ng <zhin@chromium.org> Reviewed-by: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#67840}
This commit is contained in:
parent
013ad9e23d
commit
99e4ef48e1
@ -2707,6 +2707,28 @@ void LiftoffAssembler::emit_i8x16_shli(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
liftoff::GetSimd128Register(lhs), rhs & 7);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdShift<liftoff::kRight, NeonS8, Neon8>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
liftoff::EmitSimdShiftImmediate<liftoff::kRight, NeonS8>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdShift<liftoff::kRight, NeonU8, Neon8>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
liftoff::EmitSimdShiftImmediate<liftoff::kRight, NeonU8>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
vadd(Neon8, liftoff::GetSimd128Register(dst),
|
||||
|
@ -1658,6 +1658,35 @@ void LiftoffAssembler::emit_i8x16_shli(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
Shl(dst.fp().V16B(), lhs.fp().V16B(), rhs & 7);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdShift<liftoff::ShiftDirection::kRight,
|
||||
liftoff::ShiftSign::kSigned>(
|
||||
this, dst.fp().V16B(), lhs.fp().V16B(), rhs.gp(), kFormat16B);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
liftoff::EmitSimdShiftRightImmediate<kFormat16B, liftoff::ShiftSign::kSigned>(
|
||||
this, dst.fp().V16B(), lhs.fp().V16B(), rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdShift<liftoff::ShiftDirection::kRight,
|
||||
liftoff::ShiftSign::kUnsigned>(
|
||||
this, dst.fp().V16B(), lhs.fp().V16B(), rhs.gp(), kFormat16B);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
liftoff::EmitSimdShiftRightImmediate<kFormat16B,
|
||||
liftoff::ShiftSign::kUnsigned>(
|
||||
this, dst.fp().V16B(), lhs.fp().V16B(), rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
Add(dst.fp().V16B(), lhs.fp().V16B(), rhs.fp().V16B());
|
||||
|
@ -2402,6 +2402,28 @@ void LiftoffAssembler::emit_i8x16_shli(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
Pand(dst.fp(), liftoff::kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16_shr_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
bailout(kSimd, "i8x16_shri_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16_shr_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
bailout(kSimd, "i8x16_shri_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpaddb, &Assembler::paddb>(
|
||||
|
@ -814,6 +814,14 @@ class LiftoffAssembler : public TurboAssembler {
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_shli(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
int32_t rhs);
|
||||
inline void emit_i8x16_shr_s(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_shri_s(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
int32_t rhs);
|
||||
inline void emit_i8x16_shr_u(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_shri_u(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
int32_t rhs);
|
||||
inline void emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs);
|
||||
inline void emit_i8x16_add_saturate_s(LiftoffRegister dst,
|
||||
|
@ -2504,6 +2504,12 @@ class LiftoffCompiler {
|
||||
case wasm::kExprI8x16Shl:
|
||||
return EmitSimdShiftOp(&LiftoffAssembler::emit_i8x16_shl,
|
||||
&LiftoffAssembler::emit_i8x16_shli);
|
||||
case wasm::kExprI8x16ShrS:
|
||||
return EmitSimdShiftOp(&LiftoffAssembler::emit_i8x16_shr_s,
|
||||
&LiftoffAssembler::emit_i8x16_shri_s);
|
||||
case wasm::kExprI8x16ShrU:
|
||||
return EmitSimdShiftOp(&LiftoffAssembler::emit_i8x16_shr_u,
|
||||
&LiftoffAssembler::emit_i8x16_shri_u);
|
||||
case wasm::kExprI8x16Add:
|
||||
return EmitBinOp<kS128, kS128>(&LiftoffAssembler::emit_i8x16_add);
|
||||
case wasm::kExprI8x16AddSaturateS:
|
||||
|
@ -2431,6 +2431,28 @@ void LiftoffAssembler::emit_i8x16_shli(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
Pand(dst.fp(), kScratchDoubleReg);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16_shr_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_s(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
bailout(kSimd, "i8x16_shri_s");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shr_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
bailout(kSimd, "i8x16_shr_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_shri_u(LiftoffRegister dst,
|
||||
LiftoffRegister lhs, int32_t rhs) {
|
||||
bailout(kSimd, "i8x16_shri_u");
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
|
||||
LiftoffRegister rhs) {
|
||||
liftoff::EmitSimdCommutativeBinOp<&Assembler::vpaddb, &Assembler::paddb>(
|
||||
|
Loading…
Reference in New Issue
Block a user