Skip to content

Commit 1cda0cd

Browse files
Implement SVE2 AbsoluteDifferenceWidening(Upper/Lower) (#116268)
* SVE2 API for AbsoluteDifferenceWideningLower Change-Id: Icac84e1e730993dbbcafe186b4e597c8536d4e58 * SVE2 API for AbsoluteDifferenceWideningUpper Change-Id: Ide6440ac0753e046ca47ad77769a179996cb1809 * Renaming variable in test template Change-Id: Idd85d335a9e46b002728699725bd1b4316e6f7fe
1 parent 7889937 commit 1cda0cd

File tree

8 files changed

+822
-60
lines changed

8 files changed

+822
-60
lines changed

src/coreclr/jit/hwintrinsiclistarm64sve.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,8 @@ HARDWARE_INTRINSIC(Sve, ZipLow,
316316
HARDWARE_INTRINSIC(Sve2, AbsoluteDifferenceAdd, -1, 3, {INS_sve_saba, INS_sve_uaba, INS_sve_saba, INS_sve_uaba, INS_sve_saba, INS_sve_uaba, INS_sve_saba, INS_sve_uaba, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics)
317317
HARDWARE_INTRINSIC(Sve2, AbsoluteDifferenceAddWideningLower, -1, 3, {INS_invalid, INS_invalid, INS_sve_sabalb, INS_sve_uabalb, INS_sve_sabalb, INS_sve_uabalb, INS_sve_sabalb, INS_sve_uabalb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasRMWSemantics)
318318
HARDWARE_INTRINSIC(Sve2, AbsoluteDifferenceAddWideningUpper, -1, 3, {INS_invalid, INS_invalid, INS_sve_sabalt, INS_sve_uabalt, INS_sve_sabalt, INS_sve_uabalt, INS_sve_sabalt, INS_sve_uabalt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasRMWSemantics)
319+
HARDWARE_INTRINSIC(Sve2, AbsoluteDifferenceWideningLower, -1, 2, {INS_invalid, INS_invalid, INS_sve_sabdlb, INS_sve_uabdlb, INS_sve_sabdlb, INS_sve_uabdlb, INS_sve_sabdlb, INS_sve_uabdlb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable)
320+
HARDWARE_INTRINSIC(Sve2, AbsoluteDifferenceWideningUpper, -1, 2, {INS_invalid, INS_invalid, INS_sve_sabdlt, INS_sve_uabdlt, INS_sve_sabdlt, INS_sve_uabdlt, INS_sve_sabdlt, INS_sve_uabdlt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable)
319321
HARDWARE_INTRINSIC(Sve2, BitwiseClearXor, -1, 3, {INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics)
320322
HARDWARE_INTRINSIC(Sve2, BitwiseSelect, -1, 3, {INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics)
321323
HARDWARE_INTRINSIC(Sve2, BitwiseSelectLeftInverted, -1, 3, {INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics)

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

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,82 @@ internal Arm64() { }
154154
/// </summary>
155155
public static Vector<ulong> AbsoluteDifferenceAddWideningUpper(Vector<ulong> addend, Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
156156

157+
// Absolute difference long (bottom)
158+
159+
/// <summary>
160+
/// svint16_t svabdlb[_s16](svint8_t op1, svint8_t op2)
161+
/// SABDLB Zresult.H, Zop1.B, Zop2.B
162+
/// </summary>
163+
public static Vector<short> AbsoluteDifferenceWideningLower(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
164+
165+
/// <summary>
166+
/// svint32_t svabdlb[_s32](svint16_t op1, svint16_t op2)
167+
/// SABDLB Zresult.S, Zop1.H, Zop2.H
168+
/// </summary>
169+
public static Vector<int> AbsoluteDifferenceWideningLower(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
170+
171+
/// <summary>
172+
/// svint64_t svabdlb[_s64](svint32_t op1, svint32_t op2)
173+
/// SABDLB Zresult.D, Zop1.S, Zop2.S
174+
/// </summary>
175+
public static Vector<long> AbsoluteDifferenceWideningLower(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
176+
177+
/// <summary>
178+
/// svuint16_t svabdlb[_u16](svuint8_t op1, svuint8_t op2)
179+
/// UABDLB Zresult.H, Zop1.B, Zop2.B
180+
/// </summary>
181+
public static Vector<ushort> AbsoluteDifferenceWideningLower(Vector<byte> left, Vector<byte> right) { throw new PlatformNotSupportedException(); }
182+
183+
/// <summary>
184+
/// svuint32_t svabdlb[_u32](svuint16_t op1, svuint16_t op2)
185+
/// UABDLB Zresult.S, Zop1.H, Zop2.H
186+
/// </summary>
187+
public static Vector<uint> AbsoluteDifferenceWideningLower(Vector<ushort> left, Vector<ushort> right) { throw new PlatformNotSupportedException(); }
188+
189+
/// <summary>
190+
/// svuint64_t svabdlb[_u64](svuint32_t op1, svuint32_t op2)
191+
/// UABDLB Zresult.D, Zop1.S, Zop2.S
192+
/// </summary>
193+
public static Vector<ulong> AbsoluteDifferenceWideningLower(Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
194+
195+
// Absolute difference long (top)
196+
197+
/// <summary>
198+
/// svint16_t svabdlt[_s16](svint8_t op1, svint8_t op2)
199+
/// SABDLT Zresult.H, Zop1.B, Zop2.B
200+
/// </summary>
201+
public static Vector<short> AbsoluteDifferenceWideningUpper(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
202+
203+
/// <summary>
204+
/// svint32_t svabdlt[_s32](svint16_t op1, svint16_t op2)
205+
/// SABDLT Zresult.S, Zop1.H, Zop2.H
206+
/// </summary>
207+
public static Vector<int> AbsoluteDifferenceWideningUpper(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
208+
209+
/// <summary>
210+
/// svint64_t svabdlt[_s64](svint32_t op1, svint32_t op2)
211+
/// SABDLT Zresult.D, Zop1.S, Zop2.S
212+
/// </summary>
213+
public static Vector<long> AbsoluteDifferenceWideningUpper(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
214+
215+
/// <summary>
216+
/// svuint16_t svabdlt[_u16](svuint8_t op1, svuint8_t op2)
217+
/// UABDLT Zresult.H, Zop1.B, Zop2.B
218+
/// </summary>
219+
public static Vector<ushort> AbsoluteDifferenceWideningUpper(Vector<byte> left, Vector<byte> right) { throw new PlatformNotSupportedException(); }
220+
221+
/// <summary>
222+
/// svuint32_t svabdlt[_u32](svuint16_t op1, svuint16_t op2)
223+
/// UABDLT Zresult.S, Zop1.H, Zop2.H
224+
/// </summary>
225+
public static Vector<uint> AbsoluteDifferenceWideningUpper(Vector<ushort> left, Vector<ushort> right) { throw new PlatformNotSupportedException(); }
226+
227+
/// <summary>
228+
/// svuint64_t svabdlt[_u64](svuint32_t op1, svuint32_t op2)
229+
/// UABDLT Zresult.D, Zop1.S, Zop2.S
230+
/// </summary>
231+
public static Vector<ulong> AbsoluteDifferenceWideningUpper(Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
232+
157233
// Bitwise clear and exclusive OR
158234

159235
/// <summary>

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

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,82 @@ internal Arm64() { }
154154
/// </summary>
155155
public static Vector<ulong> AbsoluteDifferenceAddWideningUpper(Vector<ulong> addend, Vector<uint> left, Vector<uint> right) => AbsoluteDifferenceAddWideningUpper(addend, left, right);
156156

157+
// Absolute difference long (bottom)
158+
159+
/// <summary>
160+
/// svint16_t svabdlb[_s16](svint8_t op1, svint8_t op2)
161+
/// SABDLB Zresult.H, Zop1.B, Zop2.B
162+
/// </summary>
163+
public static Vector<short> AbsoluteDifferenceWideningLower(Vector<sbyte> left, Vector<sbyte> right) => AbsoluteDifferenceWideningLower(left, right);
164+
165+
/// <summary>
166+
/// svint32_t svabdlb[_s32](svint16_t op1, svint16_t op2)
167+
/// SABDLB Zresult.S, Zop1.H, Zop2.H
168+
/// </summary>
169+
public static Vector<int> AbsoluteDifferenceWideningLower(Vector<short> left, Vector<short> right) => AbsoluteDifferenceWideningLower(left, right);
170+
171+
/// <summary>
172+
/// svint64_t svabdlb[_s64](svint32_t op1, svint32_t op2)
173+
/// SABDLB Zresult.D, Zop1.S, Zop2.S
174+
/// </summary>
175+
public static Vector<long> AbsoluteDifferenceWideningLower(Vector<int> left, Vector<int> right) => AbsoluteDifferenceWideningLower(left, right);
176+
177+
/// <summary>
178+
/// svuint16_t svabdlb[_u16](svuint8_t op1, svuint8_t op2)
179+
/// UABDLB Zresult.H, Zop1.B, Zop2.B
180+
/// </summary>
181+
public static Vector<ushort> AbsoluteDifferenceWideningLower(Vector<byte> left, Vector<byte> right) => AbsoluteDifferenceWideningLower(left, right);
182+
183+
/// <summary>
184+
/// svuint32_t svabdlb[_u32](svuint16_t op1, svuint16_t op2)
185+
/// UABDLB Zresult.S, Zop1.H, Zop2.H
186+
/// </summary>
187+
public static Vector<uint> AbsoluteDifferenceWideningLower(Vector<ushort> left, Vector<ushort> right) => AbsoluteDifferenceWideningLower(left, right);
188+
189+
/// <summary>
190+
/// svuint64_t svabdlb[_u64](svuint32_t op1, svuint32_t op2)
191+
/// UABDLB Zresult.D, Zop1.S, Zop2.S
192+
/// </summary>
193+
public static Vector<ulong> AbsoluteDifferenceWideningLower(Vector<uint> left, Vector<uint> right) => AbsoluteDifferenceWideningLower(left, right);
194+
195+
// Absolute difference long (top)
196+
197+
/// <summary>
198+
/// svint16_t svabdlt[_s16](svint8_t op1, svint8_t op2)
199+
/// SABDLT Zresult.H, Zop1.B, Zop2.B
200+
/// </summary>
201+
public static Vector<short> AbsoluteDifferenceWideningUpper(Vector<sbyte> left, Vector<sbyte> right) => AbsoluteDifferenceWideningUpper(left, right);
202+
203+
/// <summary>
204+
/// svint32_t svabdlt[_s32](svint16_t op1, svint16_t op2)
205+
/// SABDLT Zresult.S, Zop1.H, Zop2.H
206+
/// </summary>
207+
public static Vector<int> AbsoluteDifferenceWideningUpper(Vector<short> left, Vector<short> right) => AbsoluteDifferenceWideningUpper(left, right);
208+
209+
/// <summary>
210+
/// svint64_t svabdlt[_s64](svint32_t op1, svint32_t op2)
211+
/// SABDLT Zresult.D, Zop1.S, Zop2.S
212+
/// </summary>
213+
public static Vector<long> AbsoluteDifferenceWideningUpper(Vector<int> left, Vector<int> right) => AbsoluteDifferenceWideningUpper(left, right);
214+
215+
/// <summary>
216+
/// svuint16_t svabdlt[_u16](svuint8_t op1, svuint8_t op2)
217+
/// UABDLT Zresult.H, Zop1.B, Zop2.B
218+
/// </summary>
219+
public static Vector<ushort> AbsoluteDifferenceWideningUpper(Vector<byte> left, Vector<byte> right) => AbsoluteDifferenceWideningUpper(left, right);
220+
221+
/// <summary>
222+
/// svuint32_t svabdlt[_u32](svuint16_t op1, svuint16_t op2)
223+
/// UABDLT Zresult.S, Zop1.H, Zop2.H
224+
/// </summary>
225+
public static Vector<uint> AbsoluteDifferenceWideningUpper(Vector<ushort> left, Vector<ushort> right) => AbsoluteDifferenceWideningUpper(left, right);
226+
227+
/// <summary>
228+
/// svuint64_t svabdlt[_u64](svuint32_t op1, svuint32_t op2)
229+
/// UABDLT Zresult.D, Zop1.S, Zop2.S
230+
/// </summary>
231+
public static Vector<ulong> AbsoluteDifferenceWideningUpper(Vector<uint> left, Vector<uint> right) => AbsoluteDifferenceWideningUpper(left, right);
232+
157233
// Bitwise clear and exclusive OR
158234

159235
/// <summary>

src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6102,6 +6102,20 @@ internal Arm64() { }
61026102
public static System.Numerics.Vector<uint> AbsoluteDifferenceAddWideningUpper(System.Numerics.Vector<uint> addend, System.Numerics.Vector<ushort> left, System.Numerics.Vector<ushort> right) { throw null; }
61036103
public static System.Numerics.Vector<ulong> AbsoluteDifferenceAddWideningUpper(System.Numerics.Vector<ulong> addend, System.Numerics.Vector<uint> left, System.Numerics.Vector<uint> right) { throw null; }
61046104

6105+
public static System.Numerics.Vector<short> AbsoluteDifferenceWideningLower(System.Numerics.Vector<sbyte> left, System.Numerics.Vector<sbyte> right) { throw null; }
6106+
public static System.Numerics.Vector<int> AbsoluteDifferenceWideningLower(System.Numerics.Vector<short> left, System.Numerics.Vector<short> right) { throw null; }
6107+
public static System.Numerics.Vector<long> AbsoluteDifferenceWideningLower(System.Numerics.Vector<int> left, System.Numerics.Vector<int> right) { throw null; }
6108+
public static System.Numerics.Vector<ushort> AbsoluteDifferenceWideningLower(System.Numerics.Vector<byte> left, System.Numerics.Vector<byte> right) { throw null; }
6109+
public static System.Numerics.Vector<uint> AbsoluteDifferenceWideningLower(System.Numerics.Vector<ushort> left, System.Numerics.Vector<ushort> right) { throw null; }
6110+
public static System.Numerics.Vector<ulong> AbsoluteDifferenceWideningLower(System.Numerics.Vector<uint> left, System.Numerics.Vector<uint> right) { throw null; }
6111+
6112+
public static System.Numerics.Vector<short> AbsoluteDifferenceWideningUpper(System.Numerics.Vector<sbyte> left, System.Numerics.Vector<sbyte> right) { throw null; }
6113+
public static System.Numerics.Vector<int> AbsoluteDifferenceWideningUpper(System.Numerics.Vector<short> left, System.Numerics.Vector<short> right) { throw null; }
6114+
public static System.Numerics.Vector<long> AbsoluteDifferenceWideningUpper(System.Numerics.Vector<int> left, System.Numerics.Vector<int> right) { throw null; }
6115+
public static System.Numerics.Vector<ushort> AbsoluteDifferenceWideningUpper(System.Numerics.Vector<byte> left, System.Numerics.Vector<byte> right) { throw null; }
6116+
public static System.Numerics.Vector<uint> AbsoluteDifferenceWideningUpper(System.Numerics.Vector<ushort> left, System.Numerics.Vector<ushort> right) { throw null; }
6117+
public static System.Numerics.Vector<ulong> AbsoluteDifferenceWideningUpper(System.Numerics.Vector<uint> left, System.Numerics.Vector<uint> right) { throw null; }
6118+
61056119
public static System.Numerics.Vector<byte> BitwiseClearXor(System.Numerics.Vector<byte> xor, System.Numerics.Vector<byte> value, System.Numerics.Vector<byte> mask) { throw null; }
61066120
public static System.Numerics.Vector<short> BitwiseClearXor(System.Numerics.Vector<short> xor, System.Numerics.Vector<short> value, System.Numerics.Vector<short> mask) { throw null; }
61076121
public static System.Numerics.Vector<int> BitwiseClearXor(System.Numerics.Vector<int> xor, System.Numerics.Vector<int> value, System.Numerics.Vector<int> mask) { throw null; }

0 commit comments

Comments
 (0)