Commit 08544f06 authored by Milad Fa's avatar Milad Fa Committed by V8 LUCI CQ

S390 [liftoff]: Implement simd select

all_ones and all_zero is also moved to the macro assembler
which will be used later.

Change-Id: I72787c9bb217dd78f6fd8a818b95939e936bc68d
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3439916Reviewed-by: 's avatarJunliang Yan <junyan@redhat.com>
Commit-Queue: Milad Farazmand <mfarazma@redhat.com>
Cr-Commit-Position: refs/heads/main@{#78982}
parent 171fb3b9
...@@ -5281,6 +5281,19 @@ void TurboAssembler::S128Not(Simd128Register dst, Simd128Register src) { ...@@ -5281,6 +5281,19 @@ void TurboAssembler::S128Not(Simd128Register dst, Simd128Register src) {
vno(dst, src, src, Condition(0), Condition(0), Condition(0)); vno(dst, src, src, Condition(0), Condition(0), Condition(0));
} }
void TurboAssembler::S128Zero(Simd128Register dst, Simd128Register src) {
vx(dst, src, src, Condition(0), Condition(0), Condition(0));
}
void TurboAssembler::S128AllOnes(Simd128Register dst, Simd128Register src) {
vceq(dst, src, src, Condition(0), Condition(3));
}
void TurboAssembler::S128Select(Simd128Register dst, Simd128Register src1,
Simd128Register src2, Simd128Register mask) {
vsel(dst, src1, src2, mask, Condition(0), Condition(0));
}
#define SIMD_UNOP_LIST_VRR_A(V) \ #define SIMD_UNOP_LIST_VRR_A(V) \
V(F64x2Abs, vfpso, 2, 0, 3) \ V(F64x2Abs, vfpso, 2, 0, 3) \
V(F64x2Neg, vfpso, 0, 0, 3) \ V(F64x2Neg, vfpso, 0, 0, 3) \
......
...@@ -1134,6 +1134,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -1134,6 +1134,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
Simd128Register src2, Simd128Register scratch); Simd128Register src2, Simd128Register scratch);
void I8x16UConvertI16x8(Simd128Register dst, Simd128Register src1, void I8x16UConvertI16x8(Simd128Register dst, Simd128Register src1,
Simd128Register src2, Simd128Register scratch); Simd128Register src2, Simd128Register scratch);
void S128Select(Simd128Register dst, Simd128Register src1,
Simd128Register src2, Simd128Register mask);
#define SIMD_UNOP_LIST(V) \ #define SIMD_UNOP_LIST(V) \
V(F64x2Abs) \ V(F64x2Abs) \
...@@ -1173,7 +1175,9 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -1173,7 +1175,9 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
V(I8x16Abs) \ V(I8x16Abs) \
V(I8x16Neg) \ V(I8x16Neg) \
V(I8x16Popcnt) \ V(I8x16Popcnt) \
V(S128Not) V(S128Not) \
V(S128Zero) \
V(S128AllOnes)
#define PROTOTYPE_SIMD_UNOP(name) \ #define PROTOTYPE_SIMD_UNOP(name) \
void name(Simd128Register dst, Simd128Register src); void name(Simd128Register dst, Simd128Register src);
......
...@@ -2836,12 +2836,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -2836,12 +2836,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
} }
case kS390_S128Zero: { case kS390_S128Zero: {
Simd128Register dst = i.OutputSimd128Register(); Simd128Register dst = i.OutputSimd128Register();
__ vx(dst, dst, dst, Condition(0), Condition(0), Condition(0)); __ S128Zero(dst, dst);
break; break;
} }
case kS390_S128AllOnes: { case kS390_S128AllOnes: {
Simd128Register dst = i.OutputSimd128Register(); Simd128Register dst = i.OutputSimd128Register();
__ vceq(dst, dst, dst, Condition(0), Condition(3)); __ S128AllOnes(dst, dst);
break; break;
} }
case kS390_S128Select: { case kS390_S128Select: {
...@@ -2849,7 +2849,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -2849,7 +2849,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
Simd128Register mask = i.InputSimd128Register(0); Simd128Register mask = i.InputSimd128Register(0);
Simd128Register src1 = i.InputSimd128Register(1); Simd128Register src1 = i.InputSimd128Register(1);
Simd128Register src2 = i.InputSimd128Register(2); Simd128Register src2 = i.InputSimd128Register(2);
__ vsel(dst, src1, src2, mask, Condition(0), Condition(0)); __ S128Select(dst, src1, src2, mask);
break; break;
} }
// vector conversions // vector conversions
......
...@@ -2675,7 +2675,7 @@ void LiftoffAssembler::emit_s128_select(LiftoffRegister dst, ...@@ -2675,7 +2675,7 @@ void LiftoffAssembler::emit_s128_select(LiftoffRegister dst,
LiftoffRegister src1, LiftoffRegister src1,
LiftoffRegister src2, LiftoffRegister src2,
LiftoffRegister mask) { LiftoffRegister mask) {
bailout(kUnsupportedArchitecture, "emit_s128select"); S128Select(dst.fp(), src1.fp(), src2.fp(), mask.fp());
} }
void LiftoffAssembler::emit_i32x4_sconvert_f32x4(LiftoffRegister dst, void LiftoffAssembler::emit_i32x4_sconvert_f32x4(LiftoffRegister dst,
......
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