[wasm] Implement remaining SIMD x64 compare ops, unops.
Ops Implemented: I32x4Neg, I32x4GtS, I32x4GeS, I32x4GtU, I32x4GeU, I16x8Neg, I16x8GtS, I16x8GeS, I16x8GtU, I16x8GeU I8x16Neg, I8x16GtS, I8x16GeS, I8x16GtU, I8x16GeU S128Not BUG=v8:6020 R=bbudge@chromium.org, zvi.rackover@intel.com, mtrofin@chromium.org Review-Url: https://codereview.chromium.org/2951793003 Cr-Commit-Position: refs/heads/master@{#46329}
This commit is contained in:
parent
36cfdf9e57
commit
3a9cd45423
@ -2182,8 +2182,8 @@ void InstructionSelector::VisitI16x8SConvertI32x4(Node* node) {
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS
|
||||
// && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS && \
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64 && \
|
||||
!V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI32x4Neg(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI32x4GtS(Node* node) { UNIMPLEMENTED(); }
|
||||
@ -2193,11 +2193,7 @@ void InstructionSelector::VisitI32x4GeS(Node* node) { UNIMPLEMENTED(); }
|
||||
void InstructionSelector::VisitI32x4GtU(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI32x4GeU(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS
|
||||
// && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64 && \
|
||||
!V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI16x8Splat(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI16x8ExtractLane(Node* node) { UNIMPLEMENTED(); }
|
||||
@ -2253,15 +2249,11 @@ void InstructionSelector::VisitI16x8SubSaturateU(Node* node) {
|
||||
void InstructionSelector::VisitI16x8MinU(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI16x8MaxU(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI16x8Neg(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64
|
||||
// && !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS && \
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI16x8Neg(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS
|
||||
// && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS && \
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI16x8UConvertI32x4(Node* node) {
|
||||
@ -2278,8 +2270,8 @@ void InstructionSelector::VisitI16x8UConvertI8x16High(Node* node) {
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS
|
||||
// && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS && \
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64 && \
|
||||
!V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI16x8GtS(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI16x8GeS(Node* node) { UNIMPLEMENTED(); }
|
||||
@ -2289,7 +2281,11 @@ void InstructionSelector::VisitI16x8GtU(Node* node) { UNIMPLEMENTED(); }
|
||||
void InstructionSelector::VisitI16x8GeU(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16Neg(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64
|
||||
// && !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS && \
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI8x16Shl(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16ShrS(Node* node) { UNIMPLEMENTED(); }
|
||||
@ -2335,6 +2331,10 @@ void InstructionSelector::VisitI8x16MaxS(Node* node) { UNIMPLEMENTED(); }
|
||||
void InstructionSelector::VisitI8x16Eq(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16Ne(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16GtS(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16GeS(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64
|
||||
// && !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
@ -2342,10 +2342,6 @@ void InstructionSelector::VisitI8x16Ne(Node* node) { UNIMPLEMENTED(); }
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI8x16Mul(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16GtS(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16GeS(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16ShrU(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS
|
||||
// && !V8_TARGET_ARCH_MIPS64
|
||||
@ -2371,19 +2367,11 @@ void InstructionSelector::VisitI8x16SubSaturateU(Node* node) {
|
||||
void InstructionSelector::VisitI8x16MinU(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16MaxU(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64
|
||||
// && !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS && \
|
||||
!V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitI8x16GtU(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitI8x16GeU(Node* node) { UNIMPLEMENTED(); }
|
||||
#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS
|
||||
// && !V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_X64 && \
|
||||
!V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
|
||||
void InstructionSelector::VisitS128And(Node* node) { UNIMPLEMENTED(); }
|
||||
|
||||
void InstructionSelector::VisitS128Or(Node* node) { UNIMPLEMENTED(); }
|
||||
|
@ -2188,6 +2188,19 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kX64I32x4Neg: {
|
||||
CpuFeatureScope sse_scope(masm(), SSSE3);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(0);
|
||||
if (dst.is(src)) {
|
||||
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
||||
__ psignd(dst, kScratchDoubleReg);
|
||||
} else {
|
||||
__ pxor(dst, dst);
|
||||
__ psubd(dst, src);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kX64I32x4Shl: {
|
||||
__ pslld(i.OutputSimd128Register(), i.InputInt8(1));
|
||||
break;
|
||||
@ -2234,6 +2247,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
__ pxor(i.OutputSimd128Register(), kScratchDoubleReg);
|
||||
break;
|
||||
}
|
||||
case kX64I32x4GtS: {
|
||||
__ pcmpgtd(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
}
|
||||
case kX64I32x4GeS: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pminsd(dst, src);
|
||||
__ pcmpeqd(dst, src);
|
||||
break;
|
||||
}
|
||||
case kX64I32x4ShrU: {
|
||||
__ psrld(i.OutputSimd128Register(), i.InputInt8(1));
|
||||
break;
|
||||
@ -2248,6 +2273,24 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
__ pmaxud(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
}
|
||||
case kX64I32x4GtU: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pmaxud(dst, src);
|
||||
__ pcmpeqd(dst, src);
|
||||
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
||||
__ pxor(dst, kScratchDoubleReg);
|
||||
break;
|
||||
}
|
||||
case kX64I32x4GeU: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pminud(dst, src);
|
||||
__ pcmpeqd(dst, src);
|
||||
break;
|
||||
}
|
||||
case kX64S128Zero: {
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
__ xorps(dst, dst);
|
||||
@ -2278,6 +2321,19 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kX64I16x8Neg: {
|
||||
CpuFeatureScope sse_scope(masm(), SSSE3);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(0);
|
||||
if (dst.is(src)) {
|
||||
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
||||
__ psignw(dst, kScratchDoubleReg);
|
||||
} else {
|
||||
__ pxor(dst, dst);
|
||||
__ psubw(dst, src);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kX64I16x8Shl: {
|
||||
__ psllw(i.OutputSimd128Register(), i.InputInt8(1));
|
||||
break;
|
||||
@ -2332,6 +2388,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
__ pxor(i.OutputSimd128Register(), kScratchDoubleReg);
|
||||
break;
|
||||
}
|
||||
case kX64I16x8GtS: {
|
||||
__ pcmpgtw(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
}
|
||||
case kX64I16x8GeS: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pminsw(dst, src);
|
||||
__ pcmpeqw(dst, src);
|
||||
break;
|
||||
}
|
||||
case kX64I16x8ShrU: {
|
||||
__ psrlw(i.OutputSimd128Register(), i.InputInt8(1));
|
||||
break;
|
||||
@ -2354,6 +2422,24 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
__ pmaxuw(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
}
|
||||
case kX64I16x8GtU: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pmaxuw(dst, src);
|
||||
__ pcmpeqw(dst, src);
|
||||
__ pcmpeqw(kScratchDoubleReg, kScratchDoubleReg);
|
||||
__ pxor(dst, kScratchDoubleReg);
|
||||
break;
|
||||
}
|
||||
case kX64I16x8GeU: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pminuw(dst, src);
|
||||
__ pcmpeqw(dst, src);
|
||||
break;
|
||||
}
|
||||
case kX64I8x16Splat: {
|
||||
CpuFeatureScope sse_scope(masm(), SSSE3);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
@ -2379,6 +2465,19 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kX64I8x16Neg: {
|
||||
CpuFeatureScope sse_scope(masm(), SSSE3);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(0);
|
||||
if (dst.is(src)) {
|
||||
__ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
||||
__ psignb(dst, kScratchDoubleReg);
|
||||
} else {
|
||||
__ pxor(dst, dst);
|
||||
__ psubb(dst, src);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kX64I8x16Add: {
|
||||
__ paddb(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
@ -2415,6 +2514,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
__ pxor(i.OutputSimd128Register(), kScratchDoubleReg);
|
||||
break;
|
||||
}
|
||||
case kX64I8x16GtS: {
|
||||
__ pcmpgtb(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
}
|
||||
case kX64I8x16GeS: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pminsb(dst, src);
|
||||
__ pcmpeqb(dst, src);
|
||||
break;
|
||||
}
|
||||
case kX64I8x16AddSaturateU: {
|
||||
__ paddusb(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
@ -2433,6 +2544,24 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
__ pmaxub(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
}
|
||||
case kX64I8x16GtU: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pmaxub(dst, src);
|
||||
__ pcmpeqb(dst, src);
|
||||
__ pcmpeqb(kScratchDoubleReg, kScratchDoubleReg);
|
||||
__ pxor(dst, kScratchDoubleReg);
|
||||
break;
|
||||
}
|
||||
case kX64I8x16GeU: {
|
||||
CpuFeatureScope sse_scope(masm(), SSE4_1);
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
XMMRegister src = i.InputSimd128Register(1);
|
||||
__ pminub(dst, src);
|
||||
__ pcmpeqb(dst, src);
|
||||
break;
|
||||
}
|
||||
case kX64S128And: {
|
||||
__ pand(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
||||
break;
|
||||
@ -2447,8 +2576,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
}
|
||||
case kX64S128Not: {
|
||||
XMMRegister dst = i.OutputSimd128Register();
|
||||
__ pcmpeqd(dst, dst);
|
||||
__ pxor(dst, i.InputSimd128Register(1));
|
||||
XMMRegister src = i.InputSimd128Register(0);
|
||||
if (dst.is(src)) {
|
||||
__ movaps(kScratchDoubleReg, dst);
|
||||
__ pcmpeqd(dst, dst);
|
||||
__ pxor(dst, kScratchDoubleReg);
|
||||
} else {
|
||||
__ pcmpeqd(dst, dst);
|
||||
__ pxor(dst, src);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case kX64S128Select: {
|
||||
|
@ -147,6 +147,7 @@ namespace compiler {
|
||||
V(X64I32x4Splat) \
|
||||
V(X64I32x4ExtractLane) \
|
||||
V(X64I32x4ReplaceLane) \
|
||||
V(X64I32x4Neg) \
|
||||
V(X64I32x4Shl) \
|
||||
V(X64I32x4ShrS) \
|
||||
V(X64I32x4Add) \
|
||||
@ -157,12 +158,17 @@ namespace compiler {
|
||||
V(X64I32x4MaxS) \
|
||||
V(X64I32x4Eq) \
|
||||
V(X64I32x4Ne) \
|
||||
V(X64I32x4GtS) \
|
||||
V(X64I32x4GeS) \
|
||||
V(X64I32x4ShrU) \
|
||||
V(X64I32x4MinU) \
|
||||
V(X64I32x4MaxU) \
|
||||
V(X64I32x4GtU) \
|
||||
V(X64I32x4GeU) \
|
||||
V(X64I16x8Splat) \
|
||||
V(X64I16x8ExtractLane) \
|
||||
V(X64I16x8ReplaceLane) \
|
||||
V(X64I16x8Neg) \
|
||||
V(X64I16x8Shl) \
|
||||
V(X64I16x8ShrS) \
|
||||
V(X64I16x8Add) \
|
||||
@ -175,14 +181,19 @@ namespace compiler {
|
||||
V(X64I16x8MaxS) \
|
||||
V(X64I16x8Eq) \
|
||||
V(X64I16x8Ne) \
|
||||
V(X64I16x8GtS) \
|
||||
V(X64I16x8GeS) \
|
||||
V(X64I16x8ShrU) \
|
||||
V(X64I16x8AddSaturateU) \
|
||||
V(X64I16x8SubSaturateU) \
|
||||
V(X64I16x8MinU) \
|
||||
V(X64I16x8MaxU) \
|
||||
V(X64I16x8GtU) \
|
||||
V(X64I16x8GeU) \
|
||||
V(X64I8x16Splat) \
|
||||
V(X64I8x16ExtractLane) \
|
||||
V(X64I8x16ReplaceLane) \
|
||||
V(X64I8x16Neg) \
|
||||
V(X64I8x16Add) \
|
||||
V(X64I8x16AddSaturateS) \
|
||||
V(X64I8x16Sub) \
|
||||
@ -191,10 +202,14 @@ namespace compiler {
|
||||
V(X64I8x16MaxS) \
|
||||
V(X64I8x16Eq) \
|
||||
V(X64I8x16Ne) \
|
||||
V(X64I8x16GtS) \
|
||||
V(X64I8x16GeS) \
|
||||
V(X64I8x16AddSaturateU) \
|
||||
V(X64I8x16SubSaturateU) \
|
||||
V(X64I8x16MinU) \
|
||||
V(X64I8x16MaxU) \
|
||||
V(X64I8x16GtU) \
|
||||
V(X64I8x16GeU) \
|
||||
V(X64S128And) \
|
||||
V(X64S128Or) \
|
||||
V(X64S128Xor) \
|
||||
|
@ -126,6 +126,7 @@ int InstructionScheduler::GetTargetInstructionFlags(
|
||||
case kX64I32x4Splat:
|
||||
case kX64I32x4ExtractLane:
|
||||
case kX64I32x4ReplaceLane:
|
||||
case kX64I32x4Neg:
|
||||
case kX64I32x4Shl:
|
||||
case kX64I32x4ShrS:
|
||||
case kX64I32x4Add:
|
||||
@ -136,12 +137,17 @@ int InstructionScheduler::GetTargetInstructionFlags(
|
||||
case kX64I32x4MaxS:
|
||||
case kX64I32x4Eq:
|
||||
case kX64I32x4Ne:
|
||||
case kX64I32x4GtS:
|
||||
case kX64I32x4GeS:
|
||||
case kX64I32x4ShrU:
|
||||
case kX64I32x4MinU:
|
||||
case kX64I32x4MaxU:
|
||||
case kX64I32x4GtU:
|
||||
case kX64I32x4GeU:
|
||||
case kX64I16x8Splat:
|
||||
case kX64I16x8ExtractLane:
|
||||
case kX64I16x8ReplaceLane:
|
||||
case kX64I16x8Neg:
|
||||
case kX64I16x8Shl:
|
||||
case kX64I16x8ShrS:
|
||||
case kX64I16x8Add:
|
||||
@ -154,14 +160,19 @@ int InstructionScheduler::GetTargetInstructionFlags(
|
||||
case kX64I16x8MaxS:
|
||||
case kX64I16x8Eq:
|
||||
case kX64I16x8Ne:
|
||||
case kX64I16x8GtS:
|
||||
case kX64I16x8GeS:
|
||||
case kX64I16x8ShrU:
|
||||
case kX64I16x8AddSaturateU:
|
||||
case kX64I16x8SubSaturateU:
|
||||
case kX64I16x8MinU:
|
||||
case kX64I16x8MaxU:
|
||||
case kX64I16x8GtU:
|
||||
case kX64I16x8GeU:
|
||||
case kX64I8x16Splat:
|
||||
case kX64I8x16ExtractLane:
|
||||
case kX64I8x16ReplaceLane:
|
||||
case kX64I8x16Neg:
|
||||
case kX64I8x16Add:
|
||||
case kX64I8x16AddSaturateS:
|
||||
case kX64I8x16Sub:
|
||||
@ -170,10 +181,14 @@ int InstructionScheduler::GetTargetInstructionFlags(
|
||||
case kX64I8x16MaxS:
|
||||
case kX64I8x16Eq:
|
||||
case kX64I8x16Ne:
|
||||
case kX64I8x16GtS:
|
||||
case kX64I8x16GeS:
|
||||
case kX64I8x16AddSaturateU:
|
||||
case kX64I8x16SubSaturateU:
|
||||
case kX64I8x16MinU:
|
||||
case kX64I8x16MaxU:
|
||||
case kX64I8x16GtU:
|
||||
case kX64I8x16GeU:
|
||||
case kX64S128And:
|
||||
case kX64S128Or:
|
||||
case kX64S128Xor:
|
||||
|
@ -2457,8 +2457,12 @@ VISIT_ATOMIC_BINOP(Xor)
|
||||
V(I32x4MaxS) \
|
||||
V(I32x4Eq) \
|
||||
V(I32x4Ne) \
|
||||
V(I32x4GtS) \
|
||||
V(I32x4GeS) \
|
||||
V(I32x4MinU) \
|
||||
V(I32x4MaxU) \
|
||||
V(I32x4GtU) \
|
||||
V(I32x4GeU) \
|
||||
V(I16x8Add) \
|
||||
V(I16x8AddSaturateS) \
|
||||
V(I16x8AddHoriz) \
|
||||
@ -2469,10 +2473,14 @@ VISIT_ATOMIC_BINOP(Xor)
|
||||
V(I16x8MaxS) \
|
||||
V(I16x8Eq) \
|
||||
V(I16x8Ne) \
|
||||
V(I16x8GtS) \
|
||||
V(I16x8GeS) \
|
||||
V(I16x8AddSaturateU) \
|
||||
V(I16x8SubSaturateU) \
|
||||
V(I16x8MinU) \
|
||||
V(I16x8MaxU) \
|
||||
V(I16x8GtU) \
|
||||
V(I16x8GeU) \
|
||||
V(I8x16Add) \
|
||||
V(I8x16AddSaturateS) \
|
||||
V(I8x16Sub) \
|
||||
@ -2481,15 +2489,23 @@ VISIT_ATOMIC_BINOP(Xor)
|
||||
V(I8x16MaxS) \
|
||||
V(I8x16Eq) \
|
||||
V(I8x16Ne) \
|
||||
V(I8x16GtS) \
|
||||
V(I8x16GeS) \
|
||||
V(I8x16AddSaturateU) \
|
||||
V(I8x16SubSaturateU) \
|
||||
V(I8x16MinU) \
|
||||
V(I8x16MaxU) \
|
||||
V(I8x16GtU) \
|
||||
V(I8x16GeU) \
|
||||
V(S128And) \
|
||||
V(S128Or) \
|
||||
V(S128Xor)
|
||||
|
||||
#define SIMD_UNOP_LIST(V) V(S128Not)
|
||||
#define SIMD_UNOP_LIST(V) \
|
||||
V(I32x4Neg) \
|
||||
V(I16x8Neg) \
|
||||
V(I8x16Neg) \
|
||||
V(S128Not)
|
||||
|
||||
#define SIMD_SHIFT_OPCODES(V) \
|
||||
V(I32x4Shl) \
|
||||
|
@ -932,7 +932,7 @@ WASM_SIMD_TEST(I32x4ConvertI16x8) {
|
||||
// V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
|
||||
void RunI32x4UnOpTest(WasmOpcode simd_op, Int32UnOp expected_op) {
|
||||
WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
|
||||
byte a = 0;
|
||||
@ -947,11 +947,13 @@ void RunI32x4UnOpTest(WasmOpcode simd_op, Int32UnOp expected_op) {
|
||||
|
||||
WASM_SIMD_TEST(I32x4Neg) { RunI32x4UnOpTest(kExprI32x4Neg, Negate); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_X64
|
||||
WASM_SIMD_TEST(S128Not) { RunI32x4UnOpTest(kExprS128Not, Not); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET
|
||||
// V8_TARGET_ARCH_X64
|
||||
|
||||
void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) {
|
||||
WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
|
||||
@ -1018,11 +1020,7 @@ void RunI32x4CompareOpTest(WasmOpcode simd_op, Int32CompareOp expected_op) {
|
||||
WASM_SIMD_TEST(I32x4Eq) { RunI32x4CompareOpTest(kExprI32x4Eq, Equal); }
|
||||
|
||||
WASM_SIMD_TEST(I32x4Ne) { RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I32x4LtS) { RunI32x4CompareOpTest(kExprI32x4LtS, Less); }
|
||||
|
||||
WASM_SIMD_TEST(I32x4LeS) { RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual); }
|
||||
@ -1044,11 +1042,7 @@ WASM_SIMD_TEST(I32x4GtU) {
|
||||
WASM_SIMD_TEST(I32x4GeU) {
|
||||
RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
|
||||
SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op,
|
||||
int shift) {
|
||||
WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
|
||||
@ -1106,7 +1100,7 @@ WASM_SIMD_TEST(I16x8ConvertI8x16) {
|
||||
// V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if SIMD_LOWERING_TARGET || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
|
||||
void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) {
|
||||
WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
|
||||
byte a = 0;
|
||||
@ -1121,8 +1115,7 @@ void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) {
|
||||
|
||||
WASM_SIMD_TEST(I16x8Neg) { RunI16x8UnOpTest(kExprI16x8Neg, Negate); }
|
||||
#endif // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 ||
|
||||
// V8_TARGET_ARCH_MIPS ||
|
||||
// V8_TARGET_ARCH_MIPS64
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \
|
||||
V8_TARGET_ARCH_MIPS64
|
||||
@ -1187,11 +1180,7 @@ WASM_SIMD_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); }
|
||||
WASM_SIMD_TEST(I16x8SubSaturateS) {
|
||||
RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
|
||||
SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); }
|
||||
|
||||
WASM_SIMD_TEST(I16x8MinS) { RunI16x8BinOpTest(kExprI16x8MinS, Minimum); }
|
||||
@ -1235,11 +1224,7 @@ void RunI16x8CompareOpTest(WasmOpcode simd_op, Int16CompareOp expected_op) {
|
||||
WASM_SIMD_TEST(I16x8Eq) { RunI16x8CompareOpTest(kExprI16x8Eq, Equal); }
|
||||
|
||||
WASM_SIMD_TEST(I16x8Ne) { RunI16x8CompareOpTest(kExprI16x8Ne, NotEqual); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I16x8LtS) { RunI16x8CompareOpTest(kExprI16x8LtS, Less); }
|
||||
|
||||
WASM_SIMD_TEST(I16x8LeS) { RunI16x8CompareOpTest(kExprI16x8LeS, LessEqual); }
|
||||
@ -1261,11 +1246,7 @@ WASM_SIMD_TEST(I16x8LtU) { RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess); }
|
||||
WASM_SIMD_TEST(I16x8LeU) {
|
||||
RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
|
||||
SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op,
|
||||
int shift) {
|
||||
WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
|
||||
@ -1291,11 +1272,7 @@ WASM_SIMD_TEST(I16x8ShrS) {
|
||||
WASM_SIMD_TEST(I16x8ShrU) {
|
||||
RunI16x8ShiftOpTest(kExprI16x8ShrU, LogicalShiftRight, 1);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \
|
||||
V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
|
||||
void RunI8x16UnOpTest(WasmOpcode simd_op, Int8UnOp expected_op) {
|
||||
WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
|
||||
byte a = 0;
|
||||
@ -1309,8 +1286,8 @@ void RunI8x16UnOpTest(WasmOpcode simd_op, Int8UnOp expected_op) {
|
||||
}
|
||||
|
||||
WASM_SIMD_TEST(I8x16Neg) { RunI8x16UnOpTest(kExprI8x16Neg, Negate); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS ||
|
||||
// V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \
|
||||
V8_TARGET_ARCH_MIPS64
|
||||
@ -1417,17 +1394,7 @@ void RunI8x16CompareOpTest(WasmOpcode simd_op, Int8CompareOp expected_op) {
|
||||
WASM_SIMD_TEST(I8x16Eq) { RunI8x16CompareOpTest(kExprI8x16Eq, Equal); }
|
||||
|
||||
WASM_SIMD_TEST(I8x16Ne) { RunI8x16CompareOpTest(kExprI8x16Ne, NotEqual); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I8x16Mul) { RunI8x16BinOpTest(kExprI8x16Mul, Mul); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I8x16GtS) { RunI8x16CompareOpTest(kExprI8x16GtS, Greater); }
|
||||
|
||||
WASM_SIMD_TEST(I8x16GeS) { RunI8x16CompareOpTest(kExprI8x16GeS, GreaterEqual); }
|
||||
@ -1449,8 +1416,14 @@ WASM_SIMD_TEST(I8x16LtU) { RunI8x16CompareOpTest(kExprI8x16LtU, UnsignedLess); }
|
||||
WASM_SIMD_TEST(I8x16LeU) {
|
||||
RunI8x16CompareOpTest(kExprI8x16LeU, UnsignedLessEqual);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET
|
||||
// || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I8x16Mul) { RunI8x16BinOpTest(kExprI8x16Mul, Mul); }
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
||||
void RunI8x16ShiftOpTest(WasmOpcode simd_op, Int8ShiftOp expected_op,
|
||||
int shift) {
|
||||
@ -1475,16 +1448,12 @@ WASM_SIMD_TEST(I8x16Shl) {
|
||||
WASM_SIMD_TEST(I8x16ShrS) {
|
||||
RunI8x16ShiftOpTest(kExprI8x16ShrS, ArithmeticShiftRight, 1);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS ||
|
||||
// V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
WASM_SIMD_TEST(I8x16ShrU) {
|
||||
RunI8x16ShiftOpTest(kExprI8x16ShrU, LogicalShiftRight, 1);
|
||||
}
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
|
||||
// V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS ||
|
||||
// V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
|
||||
|
||||
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
|
||||
V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
||||
|
Loading…
Reference in New Issue
Block a user