* Fixing the simdHandleCache to add entries for Vector64FloatHandle and Vector128FloatHandle
* Fixing two places that were calling just OperIsSIMD() rather than OperIsSIMDorSimdHWintrinsic()
#ifdef FEATURE_HW_INTRINSICS
#if defined(_TARGET_ARM64_)
CORINFO_CLASS_HANDLE Vector64FloatHandle;
- CORINFO_CLASS_HANDLE Vector64UIntHandle;
+ CORINFO_CLASS_HANDLE Vector64IntHandle;
CORINFO_CLASS_HANDLE Vector64UShortHandle;
CORINFO_CLASS_HANDLE Vector64UByteHandle;
CORINFO_CLASS_HANDLE Vector64ShortHandle;
CORINFO_CLASS_HANDLE Vector64ByteHandle;
- CORINFO_CLASS_HANDLE Vector64IntHandle;
+ CORINFO_CLASS_HANDLE Vector64UIntHandle;
#endif // defined(_TARGET_ARM64_)
CORINFO_CLASS_HANDLE Vector128FloatHandle;
CORINFO_CLASS_HANDLE Vector128DoubleHandle;
{
case TYP_FLOAT:
return m_simdHandleCache->Vector64FloatHandle;
- case TYP_UINT:
- return m_simdHandleCache->Vector64UIntHandle;
+ case TYP_INT:
+ return m_simdHandleCache->Vector64IntHandle;
case TYP_USHORT:
return m_simdHandleCache->Vector64UShortHandle;
case TYP_UBYTE:
return m_simdHandleCache->Vector64ShortHandle;
case TYP_BYTE:
return m_simdHandleCache->Vector64ByteHandle;
- case TYP_INT:
- return m_simdHandleCache->Vector64IntHandle;
+ case TYP_UINT:
+ return m_simdHandleCache->Vector64UIntHandle;
default:
assert(!"Didn't find a class handle for simdType");
}
addr->ClearContained();
}
}
- else if (!source->IsMultiRegCall() && !source->OperIsSIMD())
+ else if (!source->IsMultiRegCall() && !source->OperIsSIMDorSimdHWintrinsic())
{
assert(source->IsLocal());
MakeSrcContained(blkNode, source);
else if (isMultiRegArg && varTypeIsSIMD(argx->TypeGet()))
{
// SIMD types do not need the optimization below due to their sizes
- if (argx->OperIs(GT_SIMD) || (argx->OperIs(GT_OBJ) && argx->AsObj()->gtOp1->OperIs(GT_ADDR) &&
- argx->AsObj()->gtOp1->gtOp.gtOp1->OperIs(GT_SIMD)))
+ if (argx->OperIsSIMDorSimdHWintrinsic() ||
+ (argx->OperIs(GT_OBJ) && argx->AsObj()->gtOp1->OperIs(GT_ADDR) &&
+ argx->AsObj()->gtOp1->gtOp.gtOp1->OperIsSIMDorSimdHWintrinsic()))
{
curArgTabEntry->needTmp = true;
}
size = Vector256SizeBytes;
JITDUMP(" Known type Vector256<ulong>\n");
}
- else if (typeHnd == m_simdHandleCache->Vector256FloatHandle)
+ else
+#endif // defined(_TARGET_XARCH)
+ if (typeHnd == m_simdHandleCache->Vector128FloatHandle)
{
simdBaseType = TYP_FLOAT;
- size = Vector256SizeBytes;
- JITDUMP(" Known type Vector256<float>\n");
+ size = Vector128SizeBytes;
+ JITDUMP(" Known type Vector128<float>\n");
}
- else
-#endif // defined(_TARGET_XARCH)
- if (typeHnd == m_simdHandleCache->Vector128DoubleHandle)
+ else if (typeHnd == m_simdHandleCache->Vector128DoubleHandle)
{
simdBaseType = TYP_DOUBLE;
size = Vector128SizeBytes;
size = Vector128SizeBytes;
JITDUMP(" Known type Vector128<ulong>\n");
}
+ else
#if defined(_TARGET_ARM64_)
+ if (typeHnd == m_simdHandleCache->Vector64FloatHandle)
+ {
+ simdBaseType = TYP_FLOAT;
+ size = Vector64SizeBytes;
+ JITDUMP(" Known type Vector64<float>\n");
+ }
else if (typeHnd == m_simdHandleCache->Vector64IntHandle)
{
simdBaseType = TYP_INT;