Skip to content

Commit f9c0846

Browse files
ARM64-SVE: Add support for Add Sve.GatherVectorUInt*ZeroExtendFirstFaulting() (#105030)
1 parent 6093112 commit f9c0846

File tree

11 files changed

+1557
-47
lines changed

11 files changed

+1557
-47
lines changed

src/coreclr/jit/gentree.cpp

+28-8
Original file line numberDiff line numberDiff line change
@@ -26675,16 +26675,26 @@ bool GenTreeHWIntrinsic::OperIsMemoryLoad(GenTree** pAddr) const
2667526675

2667626676
case NI_Sve_GatherVector:
2667726677
case NI_Sve_GatherVectorByteZeroExtend:
26678+
case NI_Sve_GatherVectorByteZeroExtendFirstFaulting:
2667826679
case NI_Sve_GatherVectorFirstFaulting:
2667926680
case NI_Sve_GatherVectorInt16SignExtend:
26681+
case NI_Sve_GatherVectorInt16SignExtendFirstFaulting:
2668026682
case NI_Sve_GatherVectorInt16WithByteOffsetsSignExtend:
26683+
case NI_Sve_GatherVectorInt16WithByteOffsetsSignExtendFirstFaulting:
2668126684
case NI_Sve_GatherVectorInt32SignExtend:
26685+
case NI_Sve_GatherVectorInt32SignExtendFirstFaulting:
2668226686
case NI_Sve_GatherVectorInt32WithByteOffsetsSignExtend:
26687+
case NI_Sve_GatherVectorInt32WithByteOffsetsSignExtendFirstFaulting:
2668326688
case NI_Sve_GatherVectorSByteSignExtend:
26689+
case NI_Sve_GatherVectorSByteSignExtendFirstFaulting:
2668426690
case NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtend:
26691+
case NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtendFirstFaulting:
2668526692
case NI_Sve_GatherVectorUInt16ZeroExtend:
26693+
case NI_Sve_GatherVectorUInt16ZeroExtendFirstFaulting:
2668626694
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend:
26695+
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtendFirstFaulting:
2668726696
case NI_Sve_GatherVectorUInt32ZeroExtend:
26697+
case NI_Sve_GatherVectorUInt32ZeroExtendFirstFaulting:
2668826698
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
2668926699
case NI_Sve_GatherVectorWithByteOffsets:
2669026700
case NI_Sve_LoadVector:
@@ -26806,14 +26816,24 @@ bool GenTreeHWIntrinsic::OperIsMemoryLoad(GenTree** pAddr) const
2680626816
{
2680726817
#ifdef TARGET_ARM64
2680826818
static_assert_no_msg(
26809-
AreContiguous(NI_Sve_GatherVector, NI_Sve_GatherVectorByteZeroExtend, NI_Sve_GatherVectorFirstFaulting,
26810-
NI_Sve_GatherVectorInt16SignExtend, NI_Sve_GatherVectorInt16WithByteOffsetsSignExtend,
26811-
NI_Sve_GatherVectorInt32SignExtend, NI_Sve_GatherVectorInt32WithByteOffsetsSignExtend,
26812-
NI_Sve_GatherVectorSByteSignExtend, NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtend,
26813-
NI_Sve_GatherVectorUInt16ZeroExtend, NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend,
26814-
NI_Sve_GatherVectorUInt32ZeroExtend));
26815-
assert(varTypeIsI(addr) || (varTypeIsSIMD(addr) && ((intrinsicId >= NI_Sve_GatherVector) &&
26816-
(intrinsicId <= NI_Sve_GatherVectorUInt32ZeroExtend))));
26819+
AreContiguous(NI_Sve_GatherVector, NI_Sve_GatherVectorByteZeroExtend,
26820+
NI_Sve_GatherVectorByteZeroExtendFirstFaulting, NI_Sve_GatherVectorFirstFaulting,
26821+
NI_Sve_GatherVectorInt16SignExtend, NI_Sve_GatherVectorInt16SignExtendFirstFaulting,
26822+
NI_Sve_GatherVectorInt16WithByteOffsetsSignExtend,
26823+
NI_Sve_GatherVectorInt16WithByteOffsetsSignExtendFirstFaulting,
26824+
NI_Sve_GatherVectorInt32SignExtend, NI_Sve_GatherVectorInt32SignExtendFirstFaulting,
26825+
NI_Sve_GatherVectorInt32WithByteOffsetsSignExtend,
26826+
NI_Sve_GatherVectorInt32WithByteOffsetsSignExtendFirstFaulting,
26827+
NI_Sve_GatherVectorSByteSignExtend, NI_Sve_GatherVectorSByteSignExtendFirstFaulting,
26828+
NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtend,
26829+
NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtendFirstFaulting,
26830+
NI_Sve_GatherVectorUInt16ZeroExtend, NI_Sve_GatherVectorUInt16ZeroExtendFirstFaulting,
26831+
NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend,
26832+
NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtendFirstFaulting,
26833+
NI_Sve_GatherVectorUInt32ZeroExtend, NI_Sve_GatherVectorUInt32ZeroExtendFirstFaulting));
26834+
assert(varTypeIsI(addr) ||
26835+
(varTypeIsSIMD(addr) && ((intrinsicId >= NI_Sve_GatherVector) &&
26836+
(intrinsicId <= NI_Sve_GatherVectorUInt32ZeroExtendFirstFaulting))));
2681726837
#else
2681826838
assert(varTypeIsI(addr));
2681926839
#endif

src/coreclr/jit/hwintrinsic.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -2175,18 +2175,28 @@ GenTree* Compiler::impHWIntrinsic(NamedIntrinsic intrinsic,
21752175
#elif defined(TARGET_ARM64)
21762176
case NI_Sve_GatherVector:
21772177
case NI_Sve_GatherVectorByteZeroExtend:
2178+
case NI_Sve_GatherVectorByteZeroExtendFirstFaulting:
21782179
case NI_Sve_GatherVectorFirstFaulting:
21792180
case NI_Sve_GatherVectorInt16SignExtend:
2181+
case NI_Sve_GatherVectorInt16SignExtendFirstFaulting:
21802182
case NI_Sve_GatherVectorInt16WithByteOffsetsSignExtend:
2183+
case NI_Sve_GatherVectorInt16WithByteOffsetsSignExtendFirstFaulting:
21812184
case NI_Sve_GatherVectorInt32SignExtend:
2185+
case NI_Sve_GatherVectorInt32SignExtendFirstFaulting:
21822186
case NI_Sve_GatherVectorInt32WithByteOffsetsSignExtend:
2187+
case NI_Sve_GatherVectorInt32WithByteOffsetsSignExtendFirstFaulting:
21832188
case NI_Sve_GatherVectorSByteSignExtend:
2189+
case NI_Sve_GatherVectorSByteSignExtendFirstFaulting:
21842190
case NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtend:
2191+
case NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtendFirstFaulting:
21852192
case NI_Sve_GatherVectorUInt16ZeroExtend:
2193+
case NI_Sve_GatherVectorUInt16ZeroExtendFirstFaulting:
21862194
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend:
2195+
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtendFirstFaulting:
21872196
case NI_Sve_GatherVectorUInt32ZeroExtend:
21882197
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
21892198
case NI_Sve_GatherVectorWithByteOffsets:
2199+
case NI_Sve_GatherVectorUInt32ZeroExtendFirstFaulting:
21902200
assert(varTypeIsSIMD(op3->TypeGet()));
21912201
if (numArgs == 3)
21922202
{

src/coreclr/jit/hwintrinsiccodegenarm64.cpp

+14-1
Original file line numberDiff line numberDiff line change
@@ -2114,7 +2114,17 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
21142114
break;
21152115
}
21162116

2117+
case NI_Sve_GatherVectorByteZeroExtendFirstFaulting:
21172118
case NI_Sve_GatherVectorFirstFaulting:
2119+
case NI_Sve_GatherVectorInt16SignExtendFirstFaulting:
2120+
case NI_Sve_GatherVectorInt16WithByteOffsetsSignExtendFirstFaulting:
2121+
case NI_Sve_GatherVectorInt32SignExtendFirstFaulting:
2122+
case NI_Sve_GatherVectorInt32WithByteOffsetsSignExtendFirstFaulting:
2123+
case NI_Sve_GatherVectorSByteSignExtendFirstFaulting:
2124+
case NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtendFirstFaulting:
2125+
case NI_Sve_GatherVectorUInt16ZeroExtendFirstFaulting:
2126+
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtendFirstFaulting:
2127+
case NI_Sve_GatherVectorUInt32ZeroExtendFirstFaulting:
21182128
{
21192129
if (node->GetAuxiliaryType() == TYP_UNKNOWN)
21202130
{
@@ -2139,6 +2149,7 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
21392149
GetEmitter()->emitIns_R(INS_sve_wrffr, emitSize, op4Reg, opt);
21402150
}
21412151
}
2152+
21422153
FALLTHROUGH;
21432154
}
21442155
case NI_Sve_GatherVector:
@@ -2161,7 +2172,9 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
21612172
emitAttr baseSize = emitActualTypeSize(intrin.baseType);
21622173
bool isLoadingBytes =
21632174
((ins == INS_sve_ld1b) || (ins == INS_sve_ld1sb) || (ins == INS_sve_ldff1b) ||
2164-
(ins == INS_sve_ldff1sb) || (intrin.id == NI_Sve_GatherVectorWithByteOffsetFirstFaulting));
2175+
(ins == INS_sve_ldff1sb) || (intrin.id == NI_Sve_GatherVectorWithByteOffsetFirstFaulting) ||
2176+
(intrin.id == NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtendFirstFaulting) ||
2177+
(intrin.id == NI_Sve_GatherVectorUInt16WithByteOffsetsZeroExtendFirstFaulting));
21652178
insScalableOpts sopt = INS_SCALABLE_OPTS_NONE;
21662179

21672180
if (baseSize == EA_4BYTE)

0 commit comments

Comments
 (0)