Skip to content

Commit e143bbb

Browse files
committed
Fix some build failures
1 parent 8e211ce commit e143bbb

File tree

20 files changed

+323
-52
lines changed

20 files changed

+323
-52
lines changed

src/coreclr/jit/compiler.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3353,6 +3353,9 @@ class Compiler
33533353
CorInfoType simdBaseJitType,
33543354
unsigned simdSize);
33553355

3356+
GenTree* gtNewSimdRoundNode(
3357+
var_types type, GenTree* op1, CorInfoType simdBaseJitType, unsigned simdSize);
3358+
33563359
GenTree* gtNewSimdShuffleNode(var_types type,
33573360
GenTree* op1,
33583361
GenTree* op2,
@@ -3390,6 +3393,9 @@ class Compiler
33903393
CorInfoType simdBaseJitType,
33913394
unsigned simdSize);
33923395

3396+
GenTree* gtNewSimdTruncNode(
3397+
var_types type, GenTree* op1, CorInfoType simdBaseJitType, unsigned simdSize);
3398+
33933399
GenTree* gtNewSimdUnOpNode(genTreeOps op,
33943400
var_types type,
33953401
GenTree* op1,

src/coreclr/jit/gentree.cpp

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25965,6 +25965,67 @@ GenTree* Compiler::gtNewSimdNarrowNode(
2596525965
#endif // !TARGET_XARCH && !TARGET_ARM64
2596625966
}
2596725967

25968+
//------------------------------------------------------------------------
25969+
// gtNewSimdRoundNode: Creates a new simd Round node
25970+
//
25971+
// Arguments:
25972+
// type -- The type of the node
25973+
// op1 -- The node to round
25974+
// simdBaseJitType -- the base jit type of the node
25975+
// simdSize -- the simd size of the node
25976+
//
25977+
// Return Value:
25978+
// The round node
25979+
//
25980+
GenTree* Compiler::gtNewSimdRoundNode(var_types type, GenTree* op1, CorInfoType simdBaseJitType, unsigned simdSize)
25981+
{
25982+
assert(IsBaselineSimdIsaSupportedDebugOnly());
25983+
25984+
assert(varTypeIsSIMD(type));
25985+
assert(getSIMDTypeForSize(simdSize) == type);
25986+
25987+
assert(op1 != nullptr);
25988+
assert(op1->TypeIs(type));
25989+
25990+
var_types simdBaseType = JitType2PreciseVarType(simdBaseJitType);
25991+
assert(varTypeIsFloating(simdBaseType));
25992+
25993+
NamedIntrinsic intrinsic = NI_Illegal;
25994+
25995+
#if defined(TARGET_XARCH)
25996+
if (simdSize == 32)
25997+
{
25998+
assert(compIsaSupportedDebugOnly(InstructionSet_AVX));
25999+
intrinsic = NI_AVX_RoundToNearestInteger;
26000+
}
26001+
else if (simdSize == 64)
26002+
{
26003+
assert(compIsaSupportedDebugOnly(InstructionSet_AVX512F));
26004+
GenTree* op2 = gtNewIconNode(static_cast<int32_t>(FloatRoundingMode::ToNearestInteger));
26005+
return gtNewSimdHWIntrinsicNode(type, op1, op2, NI_AVX512F_RoundScale, simdBaseJitType, simdSize);
26006+
}
26007+
else
26008+
{
26009+
assert(compIsaSupportedDebugOnly(InstructionSet_SSE41));
26010+
intrinsic = NI_SSE41_RoundToNearestInteger;
26011+
}
26012+
#elif defined(TARGET_ARM64)
26013+
if (simdBaseType == TYP_DOUBLE)
26014+
{
26015+
intrinsic = (simdSize == 8) ? NI_AdvSimd_RoundToNearestScalar : NI_AdvSimd_Arm64_RoundToNearest;
26016+
}
26017+
else
26018+
{
26019+
intrinsic = NI_AdvSimd_RoundToNearest;
26020+
}
26021+
#else
26022+
#error Unsupported platform
26023+
#endif // !TARGET_XARCH && !TARGET_ARM64
26024+
26025+
assert(intrinsic != NI_Illegal);
26026+
return gtNewSimdHWIntrinsicNode(type, op1, intrinsic, simdBaseJitType, simdSize);
26027+
}
26028+
2596826029
GenTree* Compiler::gtNewSimdShuffleNode(
2596926030
var_types type, GenTree* op1, GenTree* op2, CorInfoType simdBaseJitType, unsigned simdSize)
2597026031
{
@@ -26904,6 +26965,67 @@ GenTree* Compiler::gtNewSimdToScalarNode(var_types type, GenTree* op1, CorInfoTy
2690426965
return gtNewSimdHWIntrinsicNode(type, op1, intrinsic, simdBaseJitType, simdSize);
2690526966
}
2690626967

26968+
//------------------------------------------------------------------------
26969+
// gtNewSimdTruncNode: Creates a new simd Truncate node
26970+
//
26971+
// Arguments:
26972+
// type -- The type of the node
26973+
// op1 -- The node to truncate
26974+
// simdBaseJitType -- the base jit type of the node
26975+
// simdSize -- the simd size of the node
26976+
//
26977+
// Return Value:
26978+
// The truncate node
26979+
//
26980+
GenTree* Compiler::gtNewSimdTruncNode(var_types type, GenTree* op1, CorInfoType simdBaseJitType, unsigned simdSize)
26981+
{
26982+
assert(IsBaselineSimdIsaSupportedDebugOnly());
26983+
26984+
assert(varTypeIsSIMD(type));
26985+
assert(getSIMDTypeForSize(simdSize) == type);
26986+
26987+
assert(op1 != nullptr);
26988+
assert(op1->TypeIs(type));
26989+
26990+
var_types simdBaseType = JitType2PreciseVarType(simdBaseJitType);
26991+
assert(varTypeIsFloating(simdBaseType));
26992+
26993+
NamedIntrinsic intrinsic = NI_Illegal;
26994+
26995+
#if defined(TARGET_XARCH)
26996+
if (simdSize == 32)
26997+
{
26998+
assert(compIsaSupportedDebugOnly(InstructionSet_AVX));
26999+
intrinsic = NI_AVX_RoundToZero;
27000+
}
27001+
else if (simdSize == 64)
27002+
{
27003+
assert(compIsaSupportedDebugOnly(InstructionSet_AVX512F));
27004+
GenTree* op2 = gtNewIconNode(static_cast<int32_t>(FloatRoundingMode::ToZero));
27005+
return gtNewSimdHWIntrinsicNode(type, op1, op2, NI_AVX512F_RoundScale, simdBaseJitType, simdSize);
27006+
}
27007+
else
27008+
{
27009+
assert(compIsaSupportedDebugOnly(InstructionSet_SSE41));
27010+
intrinsic = NI_SSE41_RoundToZero;
27011+
}
27012+
#elif defined(TARGET_ARM64)
27013+
if (simdBaseType == TYP_DOUBLE)
27014+
{
27015+
intrinsic = (simdSize == 8) ? NI_AdvSimd_RoundToZeroScalar : NI_AdvSimd_Arm64_RoundToZero;
27016+
}
27017+
else
27018+
{
27019+
intrinsic = NI_AdvSimd_RoundToZero;
27020+
}
27021+
#else
27022+
#error Unsupported platform
27023+
#endif // !TARGET_XARCH && !TARGET_ARM64
27024+
27025+
assert(intrinsic != NI_Illegal);
27026+
return gtNewSimdHWIntrinsicNode(type, op1, intrinsic, simdBaseJitType, simdSize);
27027+
}
27028+
2690727029
GenTree* Compiler::gtNewSimdUnOpNode(
2690827030
genTreeOps op, var_types type, GenTree* op1, CorInfoType simdBaseJitType, unsigned simdSize)
2690927031
{

src/coreclr/jit/hwintrinsicarm64.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,6 +1956,22 @@ GenTree* Compiler::impSpecialIntrinsic(NamedIntrinsic intrinsic,
19561956
break;
19571957
}
19581958

1959+
case NI_Vector64_Round:
1960+
case NI_Vector128_Round:
1961+
{
1962+
assert(sig->numArgs == 1);
1963+
1964+
if (!varTypeIsFloating(simdBaseType))
1965+
{
1966+
retNode = impSIMDPopStack();
1967+
break;
1968+
}
1969+
1970+
op1 = impSIMDPopStack();
1971+
retNode = gtNewSimdRoundNode(retType, op1, simdBaseJitType, simdSize);
1972+
break;
1973+
}
1974+
19591975
case NI_Vector64_Shuffle:
19601976
case NI_Vector128_Shuffle:
19611977
{
@@ -2298,6 +2314,22 @@ GenTree* Compiler::impSpecialIntrinsic(NamedIntrinsic intrinsic,
22982314
break;
22992315
}
23002316

2317+
case NI_Vector64_Truncate:
2318+
case NI_Vector128_Truncate:
2319+
{
2320+
assert(sig->numArgs == 1);
2321+
2322+
if (!varTypeIsFloating(simdBaseType))
2323+
{
2324+
retNode = impSIMDPopStack();
2325+
break;
2326+
}
2327+
2328+
op1 = impSIMDPopStack();
2329+
retNode = gtNewSimdTruncNode(retType, op1, simdBaseJitType, simdSize);
2330+
break;
2331+
}
2332+
23012333
case NI_Vector64_WidenLower:
23022334
case NI_Vector128_WidenLower:
23032335
{

src/coreclr/jit/hwintrinsiclistarm64.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ HARDWARE_INTRINSIC(Vector64, op_Subtraction,
9898
HARDWARE_INTRINSIC(Vector64, op_UnaryNegation, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
9999
HARDWARE_INTRINSIC(Vector64, op_UnaryPlus, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
100100
HARDWARE_INTRINSIC(Vector64, op_UnsignedRightShift, 8, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
101+
HARDWARE_INTRINSIC(Vector64, Round, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
101102
HARDWARE_INTRINSIC(Vector64, Shuffle, 8, -1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_SpecialImport|HW_Flag_SpecialCodeGen)
102103
HARDWARE_INTRINSIC(Vector64, Sqrt, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
103104
HARDWARE_INTRINSIC(Vector64, StoreAligned, 8, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
@@ -107,6 +108,7 @@ HARDWARE_INTRINSIC(Vector64, Sum,
107108
HARDWARE_INTRINSIC(Vector64, ToScalar, 8, 1, true, {INS_smov, INS_umov, INS_smov, INS_umov, INS_smov, INS_umov, INS_umov, INS_umov, INS_dup, INS_dup}, HW_Category_SIMD, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SIMDScalar|HW_Flag_SpecialCodeGen)
108109
HARDWARE_INTRINSIC(Vector64, ToVector128, 8, 1, true, {INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov}, HW_Category_SIMD, HW_Flag_SpecialCodeGen)
109110
HARDWARE_INTRINSIC(Vector64, ToVector128Unsafe, 8, 1, true, {INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov, INS_mov}, HW_Category_SIMD, HW_Flag_SpecialCodeGen)
111+
HARDWARE_INTRINSIC(Vector64, Truncate, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
110112
HARDWARE_INTRINSIC(Vector64, WidenLower, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
111113
HARDWARE_INTRINSIC(Vector64, WidenUpper, 8, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
112114
HARDWARE_INTRINSIC(Vector64, WithElement, 8, 3, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport)
@@ -208,13 +210,15 @@ HARDWARE_INTRINSIC(Vector128, op_OnesComplement,
208210
HARDWARE_INTRINSIC(Vector128, op_Subtraction, 16, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
209211
HARDWARE_INTRINSIC(Vector128, op_UnaryNegation, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
210212
HARDWARE_INTRINSIC(Vector128, op_UnaryPlus, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
213+
HARDWARE_INTRINSIC(Vector128, Round, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
211214
HARDWARE_INTRINSIC(Vector128, Shuffle, 16, -1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_SpecialImport|HW_Flag_SpecialCodeGen)
212215
HARDWARE_INTRINSIC(Vector128, Sqrt, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
213216
HARDWARE_INTRINSIC(Vector128, StoreAligned, 16, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
214217
HARDWARE_INTRINSIC(Vector128, StoreAlignedNonTemporal, 16, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
215218
HARDWARE_INTRINSIC(Vector128, StoreUnsafe, 16, -1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
216219
HARDWARE_INTRINSIC(Vector128, Sum, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
217220
HARDWARE_INTRINSIC(Vector128, ToScalar, 16, 1, true, {INS_smov, INS_umov, INS_smov, INS_umov, INS_smov, INS_umov, INS_umov, INS_umov, INS_dup, INS_dup}, HW_Category_SIMD, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SIMDScalar|HW_Flag_SpecialCodeGen)
221+
HARDWARE_INTRINSIC(Vector128, Truncate, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId)
218222
HARDWARE_INTRINSIC(Vector128, WidenLower, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
219223
HARDWARE_INTRINSIC(Vector128, WidenUpper, 16, 1, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_InvalidNodeId|HW_Flag_BaseTypeFromFirstArg)
220224
HARDWARE_INTRINSIC(Vector128, WithElement, 16, 3, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Helper, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport)

0 commit comments

Comments
 (0)