summaryrefslogtreecommitdiff
path: root/chromium/v8/src/compiler/backend/s390
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/v8/src/compiler/backend/s390
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/v8/src/compiler/backend/s390')
-rw-r--r--chromium/v8/src/compiler/backend/s390/code-generator-s390.cc133
-rw-r--r--chromium/v8/src/compiler/backend/s390/instruction-codes-s390.h31
-rw-r--r--chromium/v8/src/compiler/backend/s390/instruction-scheduler-s390.cc31
-rw-r--r--chromium/v8/src/compiler/backend/s390/instruction-selector-s390.cc47
4 files changed, 208 insertions, 34 deletions
diff --git a/chromium/v8/src/compiler/backend/s390/code-generator-s390.cc b/chromium/v8/src/compiler/backend/s390/code-generator-s390.cc
index cb79373b425..bef8e7c15aa 100644
--- a/chromium/v8/src/compiler/backend/s390/code-generator-s390.cc
+++ b/chromium/v8/src/compiler/backend/s390/code-generator-s390.cc
@@ -3853,10 +3853,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
break;
}
// vector boolean unops
- case kS390_S1x2AnyTrue:
- case kS390_S1x4AnyTrue:
- case kS390_S1x8AnyTrue:
- case kS390_S1x16AnyTrue: {
+ case kS390_V64x2AnyTrue:
+ case kS390_V32x4AnyTrue:
+ case kS390_V16x8AnyTrue:
+ case kS390_V8x16AnyTrue: {
Simd128Register src = i.InputSimd128Register(0);
Register dst = i.OutputRegister();
Register temp = i.TempRegister(0);
@@ -3879,19 +3879,19 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
__ vtm(kScratchDoubleReg, kScratchDoubleReg, Condition(0), Condition(0), \
Condition(0)); \
__ locgr(Condition(8), dst, temp);
- case kS390_S1x2AllTrue: {
+ case kS390_V64x2AllTrue: {
SIMD_ALL_TRUE(3)
break;
}
- case kS390_S1x4AllTrue: {
+ case kS390_V32x4AllTrue: {
SIMD_ALL_TRUE(2)
break;
}
- case kS390_S1x8AllTrue: {
+ case kS390_V16x8AllTrue: {
SIMD_ALL_TRUE(1)
break;
}
- case kS390_S1x16AllTrue: {
+ case kS390_V8x16AllTrue: {
SIMD_ALL_TRUE(0)
break;
}
@@ -4154,10 +4154,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
for (int i = 0, j = 0; i < 2; i++, j = +2) {
#ifdef V8_TARGET_BIG_ENDIAN
__ lgfi(i < 1 ? ip : r0, Operand(k8x16_indices[j + 1]));
- __ aih(i < 1 ? ip : r0, Operand(k8x16_indices[j]));
+ __ iihf(i < 1 ? ip : r0, Operand(k8x16_indices[j]));
#else
__ lgfi(i < 1 ? ip : r0, Operand(k8x16_indices[j]));
- __ aih(i < 1 ? ip : r0, Operand(k8x16_indices[j + 1]));
+ __ iihf(i < 1 ? ip : r0, Operand(k8x16_indices[j + 1]));
#endif
}
__ vlvgp(kScratchDoubleReg, ip, r0);
@@ -4185,6 +4185,119 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
#endif
break;
}
+ case kS390_I32x4BitMask: {
+#ifdef V8_TARGET_BIG_ENDIAN
+ __ lgfi(kScratchReg, Operand(0x204060));
+ __ iihf(kScratchReg, Operand(0x80808080)); // Zeroing the high bits.
+#else
+ __ lgfi(kScratchReg, Operand(0x80808080));
+ __ iihf(kScratchReg, Operand(0x60402000));
+#endif
+ __ vlvg(kScratchDoubleReg, kScratchReg, MemOperand(r0, 1), Condition(3));
+ __ vbperm(kScratchDoubleReg, i.InputSimd128Register(0), kScratchDoubleReg,
+ Condition(0), Condition(0), Condition(0));
+ __ vlgv(i.OutputRegister(), kScratchDoubleReg, MemOperand(r0, 7),
+ Condition(0));
+ break;
+ }
+ case kS390_I16x8BitMask: {
+#ifdef V8_TARGET_BIG_ENDIAN
+ __ lgfi(kScratchReg, Operand(0x40506070));
+ __ iihf(kScratchReg, Operand(0x102030));
+#else
+ __ lgfi(kScratchReg, Operand(0x30201000));
+ __ iihf(kScratchReg, Operand(0x70605040));
+#endif
+ __ vlvg(kScratchDoubleReg, kScratchReg, MemOperand(r0, 1), Condition(3));
+ __ vbperm(kScratchDoubleReg, i.InputSimd128Register(0), kScratchDoubleReg,
+ Condition(0), Condition(0), Condition(0));
+ __ vlgv(i.OutputRegister(), kScratchDoubleReg, MemOperand(r0, 7),
+ Condition(0));
+ break;
+ }
+ case kS390_I8x16BitMask: {
+#ifdef V8_TARGET_BIG_ENDIAN
+ __ lgfi(r0, Operand(0x60687078));
+ __ iihf(r0, Operand(0x40485058));
+ __ lgfi(ip, Operand(0x20283038));
+ __ iihf(ip, Operand(0x81018));
+#else
+ __ lgfi(ip, Operand(0x58504840));
+ __ iihf(ip, Operand(0x78706860));
+ __ lgfi(r0, Operand(0x18100800));
+ __ iihf(r0, Operand(0x38302820));
+#endif
+ __ vlvgp(kScratchDoubleReg, ip, r0);
+ __ vbperm(kScratchDoubleReg, i.InputSimd128Register(0), kScratchDoubleReg,
+ Condition(0), Condition(0), Condition(0));
+ __ vlgv(i.OutputRegister(), kScratchDoubleReg, MemOperand(r0, 3),
+ Condition(1));
+ break;
+ }
+ case kS390_F32x4Pmin: {
+ __ vfmin(i.OutputSimd128Register(), i.InputSimd128Register(0),
+ i.InputSimd128Register(1), Condition(3), Condition(0),
+ Condition(2));
+ break;
+ }
+ case kS390_F32x4Pmax: {
+ __ vfmax(i.OutputSimd128Register(), i.InputSimd128Register(0),
+ i.InputSimd128Register(1), Condition(3), Condition(0),
+ Condition(2));
+ break;
+ }
+ case kS390_F64x2Pmin: {
+ __ vfmin(i.OutputSimd128Register(), i.InputSimd128Register(0),
+ i.InputSimd128Register(1), Condition(3), Condition(0),
+ Condition(3));
+ break;
+ }
+ case kS390_F64x2Pmax: {
+ __ vfmax(i.OutputSimd128Register(), i.InputSimd128Register(0),
+ i.InputSimd128Register(1), Condition(3), Condition(0),
+ Condition(3));
+ break;
+ }
+ case kS390_F64x2Ceil: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(6),
+ Condition(0), Condition(3));
+ break;
+ }
+ case kS390_F64x2Floor: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(7),
+ Condition(0), Condition(3));
+ break;
+ }
+ case kS390_F64x2Trunc: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(5),
+ Condition(0), Condition(3));
+ break;
+ }
+ case kS390_F64x2NearestInt: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(4),
+ Condition(0), Condition(3));
+ break;
+ }
+ case kS390_F32x4Ceil: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(6),
+ Condition(0), Condition(2));
+ break;
+ }
+ case kS390_F32x4Floor: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(7),
+ Condition(0), Condition(2));
+ break;
+ }
+ case kS390_F32x4Trunc: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(5),
+ Condition(0), Condition(2));
+ break;
+ }
+ case kS390_F32x4NearestInt: {
+ __ vfi(i.OutputSimd128Register(), i.InputSimd128Register(0), Condition(4),
+ Condition(0), Condition(2));
+ break;
+ }
case kS390_StoreCompressTagged: {
CHECK(!instr->HasOutput());
size_t index = 0;
diff --git a/chromium/v8/src/compiler/backend/s390/instruction-codes-s390.h b/chromium/v8/src/compiler/backend/s390/instruction-codes-s390.h
index 6101b22166c..f588e854265 100644
--- a/chromium/v8/src/compiler/backend/s390/instruction-codes-s390.h
+++ b/chromium/v8/src/compiler/backend/s390/instruction-codes-s390.h
@@ -215,6 +215,12 @@ namespace compiler {
V(S390_F64x2ExtractLane) \
V(S390_F64x2Qfma) \
V(S390_F64x2Qfms) \
+ V(S390_F64x2Pmin) \
+ V(S390_F64x2Pmax) \
+ V(S390_F64x2Ceil) \
+ V(S390_F64x2Floor) \
+ V(S390_F64x2Trunc) \
+ V(S390_F64x2NearestInt) \
V(S390_F32x4Splat) \
V(S390_F32x4ExtractLane) \
V(S390_F32x4ReplaceLane) \
@@ -238,6 +244,12 @@ namespace compiler {
V(S390_F32x4Max) \
V(S390_F32x4Qfma) \
V(S390_F32x4Qfms) \
+ V(S390_F32x4Pmin) \
+ V(S390_F32x4Pmax) \
+ V(S390_F32x4Ceil) \
+ V(S390_F32x4Floor) \
+ V(S390_F32x4Trunc) \
+ V(S390_F32x4NearestInt) \
V(S390_I64x2Neg) \
V(S390_I64x2Add) \
V(S390_I64x2Sub) \
@@ -286,6 +298,7 @@ namespace compiler {
V(S390_I32x4UConvertI16x8Low) \
V(S390_I32x4UConvertI16x8High) \
V(S390_I32x4Abs) \
+ V(S390_I32x4BitMask) \
V(S390_I16x8Splat) \
V(S390_I16x8ExtractLaneU) \
V(S390_I16x8ExtractLaneS) \
@@ -320,6 +333,7 @@ namespace compiler {
V(S390_I16x8SubSaturateU) \
V(S390_I16x8RoundingAverageU) \
V(S390_I16x8Abs) \
+ V(S390_I16x8BitMask) \
V(S390_I8x16Splat) \
V(S390_I8x16ExtractLaneU) \
V(S390_I8x16ExtractLaneS) \
@@ -349,16 +363,17 @@ namespace compiler {
V(S390_I8x16SubSaturateU) \
V(S390_I8x16RoundingAverageU) \
V(S390_I8x16Abs) \
+ V(S390_I8x16BitMask) \
V(S390_S8x16Shuffle) \
V(S390_S8x16Swizzle) \
- V(S390_S1x2AnyTrue) \
- V(S390_S1x4AnyTrue) \
- V(S390_S1x8AnyTrue) \
- V(S390_S1x16AnyTrue) \
- V(S390_S1x2AllTrue) \
- V(S390_S1x4AllTrue) \
- V(S390_S1x8AllTrue) \
- V(S390_S1x16AllTrue) \
+ V(S390_V64x2AnyTrue) \
+ V(S390_V32x4AnyTrue) \
+ V(S390_V16x8AnyTrue) \
+ V(S390_V8x16AnyTrue) \
+ V(S390_V64x2AllTrue) \
+ V(S390_V32x4AllTrue) \
+ V(S390_V16x8AllTrue) \
+ V(S390_V8x16AllTrue) \
V(S390_S128And) \
V(S390_S128Or) \
V(S390_S128Xor) \
diff --git a/chromium/v8/src/compiler/backend/s390/instruction-scheduler-s390.cc b/chromium/v8/src/compiler/backend/s390/instruction-scheduler-s390.cc
index 502ce229f50..775590a863d 100644
--- a/chromium/v8/src/compiler/backend/s390/instruction-scheduler-s390.cc
+++ b/chromium/v8/src/compiler/backend/s390/instruction-scheduler-s390.cc
@@ -161,6 +161,12 @@ int InstructionScheduler::GetTargetInstructionFlags(
case kS390_F64x2ExtractLane:
case kS390_F64x2Qfma:
case kS390_F64x2Qfms:
+ case kS390_F64x2Pmin:
+ case kS390_F64x2Pmax:
+ case kS390_F64x2Ceil:
+ case kS390_F64x2Floor:
+ case kS390_F64x2Trunc:
+ case kS390_F64x2NearestInt:
case kS390_F32x4Splat:
case kS390_F32x4ExtractLane:
case kS390_F32x4ReplaceLane:
@@ -184,6 +190,12 @@ int InstructionScheduler::GetTargetInstructionFlags(
case kS390_F32x4Max:
case kS390_F32x4Qfma:
case kS390_F32x4Qfms:
+ case kS390_F32x4Pmin:
+ case kS390_F32x4Pmax:
+ case kS390_F32x4Ceil:
+ case kS390_F32x4Floor:
+ case kS390_F32x4Trunc:
+ case kS390_F32x4NearestInt:
case kS390_I64x2Neg:
case kS390_I64x2Add:
case kS390_I64x2Sub:
@@ -232,6 +244,7 @@ int InstructionScheduler::GetTargetInstructionFlags(
case kS390_I32x4UConvertI16x8Low:
case kS390_I32x4UConvertI16x8High:
case kS390_I32x4Abs:
+ case kS390_I32x4BitMask:
case kS390_I16x8Splat:
case kS390_I16x8ExtractLaneU:
case kS390_I16x8ExtractLaneS:
@@ -266,6 +279,7 @@ int InstructionScheduler::GetTargetInstructionFlags(
case kS390_I16x8SubSaturateU:
case kS390_I16x8RoundingAverageU:
case kS390_I16x8Abs:
+ case kS390_I16x8BitMask:
case kS390_I8x16Splat:
case kS390_I8x16ExtractLaneU:
case kS390_I8x16ExtractLaneS:
@@ -295,16 +309,17 @@ int InstructionScheduler::GetTargetInstructionFlags(
case kS390_I8x16SubSaturateU:
case kS390_I8x16RoundingAverageU:
case kS390_I8x16Abs:
+ case kS390_I8x16BitMask:
case kS390_S8x16Shuffle:
case kS390_S8x16Swizzle:
- case kS390_S1x2AnyTrue:
- case kS390_S1x4AnyTrue:
- case kS390_S1x8AnyTrue:
- case kS390_S1x16AnyTrue:
- case kS390_S1x2AllTrue:
- case kS390_S1x4AllTrue:
- case kS390_S1x8AllTrue:
- case kS390_S1x16AllTrue:
+ case kS390_V64x2AnyTrue:
+ case kS390_V32x4AnyTrue:
+ case kS390_V16x8AnyTrue:
+ case kS390_V8x16AnyTrue:
+ case kS390_V64x2AllTrue:
+ case kS390_V32x4AllTrue:
+ case kS390_V16x8AllTrue:
+ case kS390_V8x16AllTrue:
case kS390_S128And:
case kS390_S128Or:
case kS390_S128Xor:
diff --git a/chromium/v8/src/compiler/backend/s390/instruction-selector-s390.cc b/chromium/v8/src/compiler/backend/s390/instruction-selector-s390.cc
index 515e8dd127b..39089f346ed 100644
--- a/chromium/v8/src/compiler/backend/s390/instruction-selector-s390.cc
+++ b/chromium/v8/src/compiler/backend/s390/instruction-selector-s390.cc
@@ -2635,11 +2635,19 @@ void InstructionSelector::VisitWord64AtomicStore(Node* node) {
V(F64x2Abs) \
V(F64x2Neg) \
V(F64x2Sqrt) \
+ V(F64x2Ceil) \
+ V(F64x2Floor) \
+ V(F64x2Trunc) \
+ V(F64x2NearestInt) \
V(F32x4Abs) \
V(F32x4Neg) \
V(F32x4RecipApprox) \
V(F32x4RecipSqrtApprox) \
V(F32x4Sqrt) \
+ V(F32x4Ceil) \
+ V(F32x4Floor) \
+ V(F32x4Trunc) \
+ V(F32x4NearestInt) \
V(I64x2Neg) \
V(I16x8Abs) \
V(I32x4Neg) \
@@ -2672,14 +2680,14 @@ void InstructionSelector::VisitWord64AtomicStore(Node* node) {
V(I8x16ShrU)
#define SIMD_BOOL_LIST(V) \
- V(S1x2AnyTrue) \
- V(S1x4AnyTrue) \
- V(S1x8AnyTrue) \
- V(S1x16AnyTrue) \
- V(S1x2AllTrue) \
- V(S1x4AllTrue) \
- V(S1x8AllTrue) \
- V(S1x16AllTrue)
+ V(V64x2AnyTrue) \
+ V(V32x4AnyTrue) \
+ V(V16x8AnyTrue) \
+ V(V8x16AnyTrue) \
+ V(V64x2AllTrue) \
+ V(V32x4AllTrue) \
+ V(V16x8AllTrue) \
+ V(V8x16AllTrue)
#define SIMD_CONVERSION_LIST(V) \
V(I32x4SConvertF32x4) \
@@ -2794,6 +2802,29 @@ SIMD_VISIT_QFMOP(F64x2Qfms)
SIMD_VISIT_QFMOP(F32x4Qfma)
SIMD_VISIT_QFMOP(F32x4Qfms)
#undef SIMD_VISIT_QFMOP
+
+#define SIMD_VISIT_BITMASK(Opcode) \
+ void InstructionSelector::Visit##Opcode(Node* node) { \
+ S390OperandGenerator g(this); \
+ Emit(kS390_##Opcode, g.DefineAsRegister(node), \
+ g.UseUniqueRegister(node->InputAt(0))); \
+ }
+SIMD_VISIT_BITMASK(I8x16BitMask)
+SIMD_VISIT_BITMASK(I16x8BitMask)
+SIMD_VISIT_BITMASK(I32x4BitMask)
+#undef SIMD_VISIT_BITMASK
+
+#define SIMD_VISIT_PMIN_MAX(Type) \
+ void InstructionSelector::Visit##Type(Node* node) { \
+ S390OperandGenerator g(this); \
+ Emit(kS390_##Type, g.DefineAsRegister(node), \
+ g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1))); \
+ }
+SIMD_VISIT_PMIN_MAX(F64x2Pmin)
+SIMD_VISIT_PMIN_MAX(F32x4Pmin)
+SIMD_VISIT_PMIN_MAX(F64x2Pmax)
+SIMD_VISIT_PMIN_MAX(F32x4Pmax)
+#undef SIMD_VISIT_PMIN_MAX
#undef SIMD_TYPES
void InstructionSelector::VisitS8x16Shuffle(Node* node) {