constexpr int maxPossibleLength = 32;
assert(len >= 8 && len <= maxPossibleLength);
- if (!compOpportunisticallyDependsOn(InstructionSet_Vector128))
+ if (!IsBaselineSimdIsaSupported())
{
- // We need SSE2 or ADVSIMD at least
+ // We need baseline SIMD support at least
return nullptr;
}
assert(simdSize <= 16);
assert(simdSize >= ((index + 1) * genTypeSize(simdBaseType)));
+#if defined(TARGET_XARCH)
+ switch (simdBaseType)
+ {
+ case TYP_BYTE:
+ case TYP_UBYTE:
+ case TYP_INT:
+ case TYP_UINT:
+ case TYP_LONG:
+ case TYP_ULONG:
+ {
+ if (!compOpportunisticallyDependsOn(InstructionSet_SSE41))
+ {
+ return tree;
+ }
+ break;
+ }
+
+ case TYP_DOUBLE:
+ case TYP_FLOAT:
+ case TYP_SHORT:
+ case TYP_USHORT:
+ {
+ if (!compOpportunisticallyDependsOn(InstructionSet_SSE2))
+ {
+ return tree;
+ }
+ break;
+ }
+
+ default:
+ {
+ unreached();
+ }
+ }
+#elif defined(TARGET_ARM64)
+ if (!compOpportunisticallyDependsOn(InstructionSet_AdvSimd))
+ {
+ return tree;
+ }
+#endif // !TARGET_XARCH && !TARGET_ARM64
+
tree = gtNewSimdGetElementNode(simdBaseType, simdStructNode, op2, simdBaseJitType, simdSize,
/* isSimdAsHWIntrinsic */ true);
}