Skip to content

Commit 6169e41

Browse files
ARM64-SVE: Add GatherVectorWithByteOffsetFirstFaulting (#106199)
Co-authored-by: Jakob Botsch Nielsen <[email protected]>
1 parent adb1fee commit 6169e41

File tree

12 files changed

+1048
-47
lines changed

12 files changed

+1048
-47
lines changed

src/coreclr/jit/gentree.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -26690,6 +26690,7 @@ bool GenTreeHWIntrinsic::OperIsMemoryLoad(GenTree** pAddr) const
2669026690
case NI_Sve_GatherVectorUInt16ZeroExtend:
2669126691
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend:
2669226692
case NI_Sve_GatherVectorUInt32ZeroExtend:
26693+
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
2669326694
case NI_Sve_GatherVectorWithByteOffsets:
2669426695
case NI_Sve_LoadVector:
2669526696
case NI_Sve_LoadVectorNonTemporal:

src/coreclr/jit/hwintrinsic.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -2185,6 +2185,7 @@ GenTree* Compiler::impHWIntrinsic(NamedIntrinsic intrinsic,
21852185
case NI_Sve_GatherVectorUInt16ZeroExtend:
21862186
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend:
21872187
case NI_Sve_GatherVectorUInt32ZeroExtend:
2188+
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
21882189
case NI_Sve_GatherVectorWithByteOffsets:
21892190
assert(varTypeIsSIMD(op3->TypeGet()));
21902191
if (numArgs == 3)

src/coreclr/jit/hwintrinsiccodegenarm64.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -2090,14 +2090,16 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
20902090
case NI_Sve_GatherVectorUInt16ZeroExtend:
20912091
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend:
20922092
case NI_Sve_GatherVectorUInt32ZeroExtend:
2093+
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
20932094
{
20942095
if (!varTypeIsSIMD(intrin.op2->gtType))
20952096
{
20962097
// GatherVector...(Vector<T> mask, T* address, Vector<T2> indices)
20972098

2098-
emitAttr baseSize = emitActualTypeSize(intrin.baseType);
2099-
bool isLoadingBytes = ((ins == INS_sve_ld1b) || (ins == INS_sve_ld1sb) || (ins == INS_sve_ldff1b) ||
2100-
(ins == INS_sve_ldff1sb));
2099+
emitAttr baseSize = emitActualTypeSize(intrin.baseType);
2100+
bool isLoadingBytes =
2101+
((ins == INS_sve_ld1b) || (ins == INS_sve_ld1sb) || (ins == INS_sve_ldff1b) ||
2102+
(ins == INS_sve_ldff1sb) || (intrin.id == NI_Sve_GatherVectorWithByteOffsetFirstFaulting));
21012103
insScalableOpts sopt = INS_SCALABLE_OPTS_NONE;
21022104

21032105
if (baseSize == EA_4BYTE)

src/coreclr/jit/hwintrinsiclistarm64sve.h

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ HARDWARE_INTRINSIC(Sve, GatherVectorUInt16WithByteOffsetsZeroExtend,
121121
HARDWARE_INTRINSIC(Sve, GatherVectorUInt16ZeroExtend, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ld1h, INS_sve_ld1h, INS_sve_ld1h, INS_sve_ld1h, INS_invalid, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation)
122122
HARDWARE_INTRINSIC(Sve, GatherVectorUInt32WithByteOffsetsZeroExtend, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ld1w, INS_sve_ld1w, INS_sve_ld1w, INS_sve_ld1w, INS_invalid, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation)
123123
HARDWARE_INTRINSIC(Sve, GatherVectorUInt32ZeroExtend, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ld1w, INS_sve_ld1w, INS_sve_ld1w, INS_sve_ld1w, INS_invalid, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation)
124+
HARDWARE_INTRINSIC(Sve, GatherVectorWithByteOffsetFirstFaulting, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ldff1w, INS_sve_ldff1w, INS_sve_ldff1d, INS_sve_ldff1d, INS_sve_ldff1w, INS_sve_ldff1d}, HW_Category_MemoryLoad, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_SpecialSideEffect_Other)
124125
HARDWARE_INTRINSIC(Sve, GatherVectorWithByteOffsets, -1, 3, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ld1w, INS_sve_ld1w, INS_sve_ld1d, INS_sve_ld1d, INS_sve_ld1w, INS_sve_ld1d}, HW_Category_MemoryLoad, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation)
125126
HARDWARE_INTRINSIC(Sve, GetActiveElementCount, -1, 2, {INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_ExplicitMaskedOperation)
126127
HARDWARE_INTRINSIC(Sve, GetFfrByte, -1, 0, {INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other)

src/coreclr/jit/lowerarmarch.cpp

+9-41
Original file line numberDiff line numberDiff line change
@@ -1782,6 +1782,14 @@ GenTree* Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node)
17821782
break;
17831783
}
17841784
case NI_Sve_GatherVectorFirstFaulting:
1785+
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
1786+
case NI_Sve_LoadVectorByteZeroExtendFirstFaulting:
1787+
case NI_Sve_LoadVectorFirstFaulting:
1788+
case NI_Sve_LoadVectorInt16SignExtendFirstFaulting:
1789+
case NI_Sve_LoadVectorInt32SignExtendFirstFaulting:
1790+
case NI_Sve_LoadVectorSByteSignExtendFirstFaulting:
1791+
case NI_Sve_LoadVectorUInt16ZeroExtendFirstFaulting:
1792+
case NI_Sve_LoadVectorUInt32ZeroExtendFirstFaulting:
17851793
{
17861794
LIR::Use use;
17871795
bool foundUse = BlockRange().TryGetUse(node, &use);
@@ -1825,47 +1833,6 @@ GenTree* Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node)
18251833
StoreFFRValue(node);
18261834
break;
18271835
}
1828-
case NI_Sve_LoadVectorByteZeroExtendFirstFaulting:
1829-
case NI_Sve_LoadVectorFirstFaulting:
1830-
case NI_Sve_LoadVectorInt16SignExtendFirstFaulting:
1831-
case NI_Sve_LoadVectorInt32SignExtendFirstFaulting:
1832-
case NI_Sve_LoadVectorSByteSignExtendFirstFaulting:
1833-
case NI_Sve_LoadVectorUInt16ZeroExtendFirstFaulting:
1834-
case NI_Sve_LoadVectorUInt32ZeroExtendFirstFaulting:
1835-
{
1836-
LIR::Use use;
1837-
bool foundUse = BlockRange().TryGetUse(node, &use);
1838-
1839-
if (m_ffrTrashed)
1840-
{
1841-
// Consume the FFR register value from local variable to simulate "use" of FFR,
1842-
// only if it was trashed. If it was not trashed, we do not have to reload the
1843-
// contents of the FFR register.
1844-
1845-
unsigned lclNum = comp->getFFRegisterVarNum();
1846-
GenTree* lclVar = comp->gtNewLclvNode(lclNum, TYP_MASK);
1847-
BlockRange().InsertBefore(node, lclVar);
1848-
LowerNode(lclVar);
1849-
1850-
node->ResetHWIntrinsicId(intrinsicId, comp, node->Op(1), node->Op(2), lclVar);
1851-
}
1852-
1853-
if (foundUse)
1854-
{
1855-
unsigned tmpNum = comp->lvaGrabTemp(true DEBUGARG("Return value result/FFR"));
1856-
LclVarDsc* tmpVarDsc = comp->lvaGetDesc(tmpNum);
1857-
tmpVarDsc->lvType = node->TypeGet();
1858-
GenTree* storeLclVar;
1859-
use.ReplaceWithLclVar(comp, tmpNum, &storeLclVar);
1860-
}
1861-
else
1862-
{
1863-
node->SetUnusedValue();
1864-
}
1865-
1866-
StoreFFRValue(node);
1867-
break;
1868-
}
18691836
default:
18701837
break;
18711838
}
@@ -4146,6 +4113,7 @@ void Lowering::StoreFFRValue(GenTreeHWIntrinsic* node)
41464113
switch (node->GetHWIntrinsicId())
41474114
{
41484115
case NI_Sve_GatherVectorFirstFaulting:
4116+
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
41494117
case NI_Sve_LoadVectorByteZeroExtendFirstFaulting:
41504118
case NI_Sve_LoadVectorFirstFaulting:
41514119
case NI_Sve_LoadVectorInt16SignExtendFirstFaulting:

src/coreclr/jit/lsraarm64.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -2113,6 +2113,7 @@ int LinearScan::BuildHWIntrinsic(GenTreeHWIntrinsic* intrinsicTree, int* pDstCou
21132113
case NI_Sve_GatherVectorUInt16ZeroExtend:
21142114
case NI_Sve_GatherVectorUInt32WithByteOffsetsZeroExtend:
21152115
case NI_Sve_GatherVectorUInt32ZeroExtend:
2116+
case NI_Sve_GatherVectorWithByteOffsetFirstFaulting:
21162117
assert(intrinsicTree->OperIsMemoryLoadOrStore());
21172118
FALLTHROUGH;
21182119

src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs

+76-1
Original file line numberDiff line numberDiff line change
@@ -4290,7 +4290,82 @@ internal Arm64() { }
42904290
public static unsafe Vector<ulong> GatherVectorUInt32ZeroExtend(Vector<ulong> mask, uint* address, Vector<ulong> indices) { throw new PlatformNotSupportedException(); }
42914291

42924292

4293-
// Unextended load
4293+
/// Unextended load, first-faulting
4294+
4295+
/// <summary>
4296+
/// svfloat64_t svldff1_gather_[s64]offset[_f64](svbool_t pg, const float64_t *base, svint64_t offsets)
4297+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4298+
/// </summary>
4299+
public static unsafe Vector<double> GatherVectorWithByteOffsetFirstFaulting(Vector<double> mask, double* address, Vector<long> offsets) { throw new PlatformNotSupportedException(); }
4300+
4301+
/// <summary>
4302+
/// svfloat64_t svldff1_gather_[u64]offset[_f64](svbool_t pg, const float64_t *base, svuint64_t offsets)
4303+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4304+
/// </summary>
4305+
public static unsafe Vector<double> GatherVectorWithByteOffsetFirstFaulting(Vector<double> mask, double* address, Vector<ulong> offsets) { throw new PlatformNotSupportedException(); }
4306+
4307+
/// <summary>
4308+
/// svint32_t svldff1_gather_[s32]offset[_s32](svbool_t pg, const int32_t *base, svint32_t offsets)
4309+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, SXTW]
4310+
/// </summary>
4311+
public static unsafe Vector<int> GatherVectorWithByteOffsetFirstFaulting(Vector<int> mask, int* address, Vector<int> offsets) { throw new PlatformNotSupportedException(); }
4312+
4313+
/// <summary>
4314+
/// svint32_t svldff1_gather_[u32]offset[_s32](svbool_t pg, const int32_t *base, svuint32_t offsets)
4315+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, UXTW]
4316+
/// </summary>
4317+
public static unsafe Vector<int> GatherVectorWithByteOffsetFirstFaulting(Vector<int> mask, int* address, Vector<uint> offsets) { throw new PlatformNotSupportedException(); }
4318+
4319+
/// <summary>
4320+
/// svint64_t svldff1_gather_[s64]offset[_s64](svbool_t pg, const int64_t *base, svint64_t offsets)
4321+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4322+
/// </summary>
4323+
public static unsafe Vector<long> GatherVectorWithByteOffsetFirstFaulting(Vector<long> mask, long* address, Vector<long> offsets) { throw new PlatformNotSupportedException(); }
4324+
4325+
/// <summary>
4326+
/// svint64_t svldff1_gather_[u64]offset[_s64](svbool_t pg, const int64_t *base, svuint64_t offsets)
4327+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4328+
/// </summary>
4329+
public static unsafe Vector<long> GatherVectorWithByteOffsetFirstFaulting(Vector<long> mask, long* address, Vector<ulong> offsets) { throw new PlatformNotSupportedException(); }
4330+
4331+
/// <summary>
4332+
/// svfloat32_t svldff1_gather_[s32]offset[_f32](svbool_t pg, const float32_t *base, svint32_t offsets)
4333+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, SXTW]
4334+
/// </summary>
4335+
public static unsafe Vector<float> GatherVectorWithByteOffsetFirstFaulting(Vector<float> mask, float* address, Vector<int> offsets) { throw new PlatformNotSupportedException(); }
4336+
4337+
/// <summary>
4338+
/// svfloat32_t svldff1_gather_[u32]offset[_f32](svbool_t pg, const float32_t *base, svuint32_t offsets)
4339+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, UXTW]
4340+
/// </summary>
4341+
public static unsafe Vector<float> GatherVectorWithByteOffsetFirstFaulting(Vector<float> mask, float* address, Vector<uint> offsets) { throw new PlatformNotSupportedException(); }
4342+
4343+
/// <summary>
4344+
/// svuint32_t svldff1_gather_[s32]offset[_u32](svbool_t pg, const uint32_t *base, svint32_t offsets)
4345+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, SXTW]
4346+
/// </summary>
4347+
public static unsafe Vector<uint> GatherVectorWithByteOffsetFirstFaulting(Vector<uint> mask, uint* address, Vector<int> offsets) { throw new PlatformNotSupportedException(); }
4348+
4349+
/// <summary>
4350+
/// svuint32_t svldff1_gather_[u32]offset[_u32](svbool_t pg, const uint32_t *base, svuint32_t offsets)
4351+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, UXTW]
4352+
/// </summary>
4353+
public static unsafe Vector<uint> GatherVectorWithByteOffsetFirstFaulting(Vector<uint> mask, uint* address, Vector<uint> offsets) { throw new PlatformNotSupportedException(); }
4354+
4355+
/// <summary>
4356+
/// svuint64_t svldff1_gather_[s64]offset[_u64](svbool_t pg, const uint64_t *base, svint64_t offsets)
4357+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4358+
/// </summary>
4359+
public static unsafe Vector<ulong> GatherVectorWithByteOffsetFirstFaulting(Vector<ulong> mask, ulong* address, Vector<long> offsets) { throw new PlatformNotSupportedException(); }
4360+
4361+
/// <summary>
4362+
/// svuint64_t svldff1_gather_[u64]offset[_u64](svbool_t pg, const uint64_t *base, svuint64_t offsets)
4363+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4364+
/// </summary>
4365+
public static unsafe Vector<ulong> GatherVectorWithByteOffsetFirstFaulting(Vector<ulong> mask, ulong* address, Vector<ulong> offsets) { throw new PlatformNotSupportedException(); }
4366+
4367+
4368+
/// Unextended load
42944369

42954370
/// <summary>
42964371
/// svfloat64_t svld1_gather_[s64]offset[_f64](svbool_t pg, const float64_t *base, svint64_t offsets)

src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs

+76-1
Original file line numberDiff line numberDiff line change
@@ -4287,7 +4287,82 @@ internal Arm64() { }
42874287
public static unsafe Vector<ulong> GatherVectorUInt32ZeroExtend(Vector<ulong> mask, uint* address, Vector<ulong> indices) => GatherVectorUInt32ZeroExtend(mask, address, indices);
42884288

42894289

4290-
// Unextended load
4290+
/// Unextended load, first-faulting
4291+
4292+
/// <summary>
4293+
/// svfloat64_t svldff1_gather_[s64]offset[_f64](svbool_t pg, const float64_t *base, svint64_t offsets)
4294+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4295+
/// </summary>
4296+
public static unsafe Vector<double> GatherVectorWithByteOffsetFirstFaulting(Vector<double> mask, double* address, Vector<long> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4297+
4298+
/// <summary>
4299+
/// svfloat64_t svldff1_gather_[u64]offset[_f64](svbool_t pg, const float64_t *base, svuint64_t offsets)
4300+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4301+
/// </summary>
4302+
public static unsafe Vector<double> GatherVectorWithByteOffsetFirstFaulting(Vector<double> mask, double* address, Vector<ulong> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4303+
4304+
/// <summary>
4305+
/// svint32_t svldff1_gather_[s32]offset[_s32](svbool_t pg, const int32_t *base, svint32_t offsets)
4306+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, SXTW]
4307+
/// </summary>
4308+
public static unsafe Vector<int> GatherVectorWithByteOffsetFirstFaulting(Vector<int> mask, int* address, Vector<int> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4309+
4310+
/// <summary>
4311+
/// svint32_t svldff1_gather_[u32]offset[_s32](svbool_t pg, const int32_t *base, svuint32_t offsets)
4312+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, UXTW]
4313+
/// </summary>
4314+
public static unsafe Vector<int> GatherVectorWithByteOffsetFirstFaulting(Vector<int> mask, int* address, Vector<uint> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4315+
4316+
/// <summary>
4317+
/// svint64_t svldff1_gather_[s64]offset[_s64](svbool_t pg, const int64_t *base, svint64_t offsets)
4318+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4319+
/// </summary>
4320+
public static unsafe Vector<long> GatherVectorWithByteOffsetFirstFaulting(Vector<long> mask, long* address, Vector<long> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4321+
4322+
/// <summary>
4323+
/// svint64_t svldff1_gather_[u64]offset[_s64](svbool_t pg, const int64_t *base, svuint64_t offsets)
4324+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4325+
/// </summary>
4326+
public static unsafe Vector<long> GatherVectorWithByteOffsetFirstFaulting(Vector<long> mask, long* address, Vector<ulong> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4327+
4328+
/// <summary>
4329+
/// svfloat32_t svldff1_gather_[s32]offset[_f32](svbool_t pg, const float32_t *base, svint32_t offsets)
4330+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, SXTW]
4331+
/// </summary>
4332+
public static unsafe Vector<float> GatherVectorWithByteOffsetFirstFaulting(Vector<float> mask, float* address, Vector<int> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4333+
4334+
/// <summary>
4335+
/// svfloat32_t svldff1_gather_[u32]offset[_f32](svbool_t pg, const float32_t *base, svuint32_t offsets)
4336+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, UXTW]
4337+
/// </summary>
4338+
public static unsafe Vector<float> GatherVectorWithByteOffsetFirstFaulting(Vector<float> mask, float* address, Vector<uint> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4339+
4340+
/// <summary>
4341+
/// svuint32_t svldff1_gather_[s32]offset[_u32](svbool_t pg, const uint32_t *base, svint32_t offsets)
4342+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, SXTW]
4343+
/// </summary>
4344+
public static unsafe Vector<uint> GatherVectorWithByteOffsetFirstFaulting(Vector<uint> mask, uint* address, Vector<int> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4345+
4346+
/// <summary>
4347+
/// svuint32_t svldff1_gather_[u32]offset[_u32](svbool_t pg, const uint32_t *base, svuint32_t offsets)
4348+
/// LDFF1W Zresult.S, Pg/Z, [Xbase, Zoffsets.S, UXTW]
4349+
/// </summary>
4350+
public static unsafe Vector<uint> GatherVectorWithByteOffsetFirstFaulting(Vector<uint> mask, uint* address, Vector<uint> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4351+
4352+
/// <summary>
4353+
/// svuint64_t svldff1_gather_[s64]offset[_u64](svbool_t pg, const uint64_t *base, svint64_t offsets)
4354+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4355+
/// </summary>
4356+
public static unsafe Vector<ulong> GatherVectorWithByteOffsetFirstFaulting(Vector<ulong> mask, ulong* address, Vector<long> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4357+
4358+
/// <summary>
4359+
/// svuint64_t svldff1_gather_[u64]offset[_u64](svbool_t pg, const uint64_t *base, svuint64_t offsets)
4360+
/// LDFF1D Zresult.D, Pg/Z, [Xbase, Zoffsets.D]
4361+
/// </summary>
4362+
public static unsafe Vector<ulong> GatherVectorWithByteOffsetFirstFaulting(Vector<ulong> mask, ulong* address, Vector<ulong> offsets) => GatherVectorWithByteOffsetFirstFaulting(mask, address, offsets);
4363+
4364+
4365+
/// Unextended load
42914366

42924367
/// <summary>
42934368
/// svfloat64_t svld1_gather_[s64]offset[_f64](svbool_t pg, const float64_t *base, svint64_t offsets)

0 commit comments

Comments
 (0)