case SIMDIntrinsicCast:
case SIMDIntrinsicConvertToSingle:
case SIMDIntrinsicConvertToInt32:
- case SIMDIntrinsicConvertToUInt32:
case SIMDIntrinsicConvertToDouble:
case SIMDIntrinsicConvertToInt64:
- case SIMDIntrinsicConvertToUInt64:
genSIMDIntrinsicUnOp(simdNode);
break;
case SIMDIntrinsicConvertToInt64:
result = INS_fcvtns;
break;
- case SIMDIntrinsicConvertToUInt32:
- case SIMDIntrinsicConvertToUInt64:
- result = INS_fcvtnu;
- break;
case SIMDIntrinsicDiv:
result = INS_fdiv;
break;
simdNode->gtSIMDIntrinsicID == SIMDIntrinsicAbs ||
simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToSingle ||
simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToInt32 ||
- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToUInt32 ||
simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToDouble ||
- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToInt64 ||
- simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToUInt64);
+ simdNode->gtSIMDIntrinsicID == SIMDIntrinsicConvertToInt64);
GenTree* op1 = simdNode->gtGetOp1();
var_types baseType = simdNode->gtSIMDBaseType;
void CodeGen::genSIMDIntrinsic32BitConvert(GenTreeSIMD* simdNode)
{
SIMDIntrinsicID intrinsicID = simdNode->gtSIMDIntrinsicID;
- assert((intrinsicID == SIMDIntrinsicConvertToSingle) || (intrinsicID == SIMDIntrinsicConvertToInt32) ||
- (intrinsicID == SIMDIntrinsicConvertToUInt32));
+ assert((intrinsicID == SIMDIntrinsicConvertToSingle) || (intrinsicID == SIMDIntrinsicConvertToInt32));
GenTree* op1 = simdNode->gtGetOp1();
var_types baseType = simdNode->gtSIMDBaseType;
void CodeGen::genSIMDIntrinsic64BitConvert(GenTreeSIMD* simdNode)
{
SIMDIntrinsicID intrinsicID = simdNode->gtSIMDIntrinsicID;
- assert((intrinsicID == SIMDIntrinsicConvertToDouble) || (intrinsicID == SIMDIntrinsicConvertToInt64) ||
- (intrinsicID == SIMDIntrinsicConvertToUInt64));
+ assert((intrinsicID == SIMDIntrinsicConvertToDouble) || (intrinsicID == SIMDIntrinsicConvertToInt64));
GenTree* op1 = simdNode->gtGetOp1();
var_types baseType = simdNode->gtSIMDBaseType;
case SIMDIntrinsicConvertToSingle:
case SIMDIntrinsicConvertToInt32:
- case SIMDIntrinsicConvertToUInt32:
genSIMDIntrinsic32BitConvert(simdNode);
break;
case SIMDIntrinsicConvertToDouble:
case SIMDIntrinsicConvertToInt64:
- case SIMDIntrinsicConvertToUInt64:
genSIMDIntrinsic64BitConvert(simdNode);
break;
SIMD_INTRINSIC("ConvertToDouble", false, ConvertToDouble, "ConvertToDouble", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_LONG, TYP_ULONG, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
// Convert single to int
SIMD_INTRINSIC("ConvertToInt32", false, ConvertToInt32, "ConvertToInt32", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_FLOAT, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
-// Convert single to uint
-SIMD_INTRINSIC("ConvertToUInt32", false, ConvertToUInt32, "ConvertToUInt32", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_FLOAT, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
// Convert double to long
SIMD_INTRINSIC("ConvertToInt64", false, ConvertToInt64, "ConvertToInt64", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_DOUBLE, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
-// Convert double to ulong
-SIMD_INTRINSIC("ConvertToUInt64", false, ConvertToUInt64, "ConvertToUInt64", TYP_STRUCT, 1, {TYP_STRUCT, TYP_UNDEF, TYP_UNDEF}, {TYP_DOUBLE, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
// Narrow two input Vector<T>s to a single Vector<T>. The return value's lower elements are the elements from src1, and the upper elements are from src2.
SIMD_INTRINSIC("Narrow", false, Narrow, "Narrow", TYP_STRUCT, 2, {TYP_STRUCT, TYP_STRUCT, TYP_UNDEF}, {TYP_INT, TYP_DOUBLE, TYP_LONG, TYP_USHORT, TYP_SHORT, TYP_UINT, TYP_ULONG, TYP_UNDEF, TYP_UNDEF, TYP_UNDEF})
// Widen one input Vector<T> to two Vector<T>s: dest1 contains the lower half of elements in src, and dest2 contains the upper half of elements in src.