-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Arm64] More overloads for *BySelectedScalar methods #33683
Comments
I couldn't add an area label to this Issue. Checkout this page to find out which area owner to ping, or please add exactly one area label to help train me in the future. |
@echesakovMSFT, it looks like there should also be
|
Nope, please go ahead. |
I'm slightly confused.. what was the resolution to this? :) I would say since the intrinsics is supposed to match to the instruction that we should have the |
For this one in particular, I think it would be fine to make the signature
|
Updated to include all the
These ones don't have a proposal for the corresponding "regular" overloads yet so I'll add them alongside that. |
What I don't like that we name the method BySelectedScalar that to me implies you can select a scalar and if we drop
@TamarChristinaArm I don't think we have any conclusion on this |
Updated to use |
namespace System.Runtime.Intrinsics.Arm
{
partial class AdvSimd
{
partial class Arm64
{
public static Vector64<float> FusedMultiplyAddBySelectedScalar(Vector64<float> addend, Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> FusedMultiplyAddBySelectedScalar(Vector64<float> addend, Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector128<double> FusedMultiplyAddBySelectedScalar(Vector128<double> addend, Vector128<double> left, Vector128<double> right, byte rightIndex);
public static Vector128<float> FusedMultiplyAddBySelectedScalar(Vector128<float> addend, Vector128<float> left, Vector64<float> right, byte rightIndex);
public static Vector128<float> FusedMultiplyAddBySelectedScalar(Vector128<float> addend, Vector128<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> FusedMultiplyAddScalarBySelectedScalar(Vector64<double> addend, Vector64<double> left, Vector128<double> right, byte rightIndex);
public static Vector64<float> FusedMultiplyAddScalarBySelectedScalar(Vector64<float> addend, Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> FusedMultiplyAddScalarBySelectedScalar(Vector64<float> addend, Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> FusedMultiplyAddScalar(Vector64<double> addend, Vector64<double> left, Vector64<double> right);
public static Vector128<double> FusedMultiplyAddByScalar(Vector128<double> addend, Vector128<double> left, Vector64<double> right);
public static Vector64<float> FusedMultiplySubtractBySelectedScalar(Vector64<float> minuend, Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> FusedMultiplySubtractBySelectedScalar(Vector64<float> minuend, Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector128<double> FusedMultiplySubtractBySelectedScalar(Vector128<double> minuend, Vector128<double> left, Vector128<double> right, byte rightIndex);
public static Vector128<float> FusedMultiplySubtractBySelectedScalar(Vector128<float> minuend, Vector128<float> left, Vector64<float> right, byte rightIndex);
public static Vector128<float> FusedMultiplySubtractBySelectedScalar(Vector128<float> minuend, Vector128<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> FusedMultiplySubtractScalarBySelectedScalar(Vector64<double> minuend, Vector64<double> left, Vector128<double> right, byte rightIndex);
public static Vector64<float> FusedMultiplySubtractScalarBySelectedScalar(Vector64<float> minuend, Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> FusedMultiplySubtractScalarBySelectedScalar(Vector64<float> minuend, Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> FusedMultiplySubtractScalar(Vector64<double> minuend, Vector64<double> left, Vector64<double> right);
public static Vector128<double> FusedMultiplySubtractByScalar(Vector128<double> minuend, Vector128<double> left, Vector64<double> right);
public static Vector64<float> MultiplyBySelectedScalar(Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> MultiplyBySelectedScalar(Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector128<double> MultiplyBySelectedScalar(Vector128<double> left, Vector128<double> right, byte rightIndex);
public static Vector128<float> MultiplyBySelectedScalar(Vector128<float> left, Vector64<float> right, byte rightIndex);
public static Vector128<float> MultiplyBySelectedScalar(Vector128<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> MultiplyScalarBySelectedScalar(Vector64<double> left, Vector128<double> right, byte rightIndex);
public static Vector64<float> MultiplyScalarBySelectedScalar(Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> MultiplyScalarBySelectedScalar(Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> MultiplyScalar(Vector64<double> left, Vector64<double> right);
public static Vector128<double> MultiplyByScalar(Vector128<double> left, Vector64<double> right);
public static Vector64<float> MultiplyExtendedBySelectedScalar(Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector128<float> MultiplyExtendedBySelectedScalar(Vector128<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<double> MultiplyExtendedScalarBySelectedScalar(Vector64<double> left, Vector128<double> right, byte rightIndex);
public static Vector64<float> MultiplyExtendedScalarBySelectedScalar(Vector64<float> left, Vector64<float> right, byte rightIndex);
public static Vector64<float> MultiplyExtendedScalarBySelectedScalar(Vector64<float> left, Vector128<float> right, byte rightIndex);
public static Vector64<double> MultiplyExtendedScalar(Vector64<double> left, Vector64<double> right);
public static Vector128<double> MultiplyExtendedByScalar(Vector128<double> left, Vector64<double> right);
public static Vector64<byte> MultiplyAddBySelectedScalar(Vector64<byte> addend, Vector64<byte> left, Vector128<byte> right, byte rightIndex);
public static Vector64<sbyte> MultiplyAddBySelectedScalar(Vector64<sbyte> addend, Vector64<sbyte> left, Vector128<sbyte> right, byte rightIndex);
public static Vector64<ushort> MultiplyAddBySelectedScalar(Vector64<ushort> addend, Vector64<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector64<short> MultiplyAddBySelectedScalar(Vector64<short> addend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<uint> MultiplyAddBySelectedScalar(Vector64<uint> addend, Vector64<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector64<int> MultiplyAddBySelectedScalar(Vector64<int> addend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<byte> MultiplyAddBySelectedScalar(Vector128<byte> addend, Vector128<byte> left, Vector64<byte> right, byte rightIndex);
public static Vector128<sbyte> MultiplyAddBySelectedScalar(Vector128<sbyte> addend, Vector128<sbyte> left, Vector64<sbyte> right, byte rightIndex);
public static Vector128<ushort> MultiplyAddBySelectedScalar(Vector128<ushort> addend, Vector128<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector128<short> MultiplyAddBySelectedScalar(Vector128<short> addend, Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<uint> MultiplyAddBySelectedScalar(Vector128<uint> addend, Vector128<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector128<int> MultiplyAddBySelectedScalar(Vector128<int> addend, Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<byte> MultiplySubtractBySelectedScalar(Vector64<byte> minuend, Vector64<byte> left, Vector128<byte> right, byte rightIndex);
public static Vector64<sbyte> MultiplySubtractBySelectedScalar(Vector64<sbyte> minuend, Vector64<sbyte> left, Vector128<sbyte> right, byte rightIndex);
public static Vector64<ushort> MultiplySubtractBySelectedScalar(Vector64<ushort> minuend, Vector64<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector64<short> MultiplySubtractBySelectedScalar(Vector64<short> minuend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<uint> MultiplySubtractBySelectedScalar(Vector64<uint> minuend, Vector64<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector64<int> MultiplySubtractBySelectedScalar(Vector64<int> minuend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<byte> MultiplySubtractBySelectedScalar(Vector128<byte> minuend, Vector128<byte> left, Vector64<byte> right, byte rightIndex);
public static Vector128<sbyte> MultiplySubtractBySelectedScalar(Vector128<sbyte> minuend, Vector128<sbyte> left, Vector64<sbyte> right, byte rightIndex);
public static Vector128<ushort> MultiplySubtractBySelectedScalar(Vector128<ushort> minuend, Vector128<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector128<short> MultiplySubtractBySelectedScalar(Vector128<short> minuend, Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<uint> MultiplySubtractBySelectedScalar(Vector128<uint> minuend, Vector128<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector128<int> MultiplySubtractBySelectedScalar(Vector128<int> minuend, Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<byte> MultiplyBySelectedScalar(Vector64<byte> left, Vector64<byte> right, byte rightIndex);
public static Vector64<sbyte> MultiplyBySelectedScalar(Vector64<sbyte> left, Vector64<sbyte> right, byte rightIndex);
public static Vector64<ushort> MultiplyBySelectedScalar(Vector64<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector64<short> MultiplyBySelectedScalar(Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<uint> MultiplyBySelectedScalar(Vector64<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector64<int> MultiplyBySelectedScalar(Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<byte> MultiplyBySelectedScalar(Vector64<byte> left, Vector128<byte> right, byte rightIndex);
public static Vector64<sbyte> MultiplyBySelectedScalar(Vector64<sbyte> left, Vector128<sbyte> right, byte rightIndex);
public static Vector64<ushort> MultiplyBySelectedScalar(Vector64<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector64<short> MultiplyBySelectedScalar(Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<uint> MultiplyBySelectedScalar(Vector64<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector64<int> MultiplyBySelectedScalar(Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<byte> MultiplyBySelectedScalar(Vector128<byte> left, Vector64<byte> right, byte rightIndex);
public static Vector128<sbyte> MultiplyBySelectedScalar(Vector128<sbyte> left, Vector64<sbyte> right, byte rightIndex);
public static Vector128<ushort> MultiplyBySelectedScalar(Vector128<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector128<short> MultiplyBySelectedScalar(Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalar(Vector128<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalar(Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<byte> MultiplyBySelectedScalar(Vector128<byte> left, Vector128<byte> right, byte rightIndex);
public static Vector128<sbyte> MultiplyBySelectedScalar(Vector128<sbyte> left, Vector128<sbyte> right, byte rightIndex);
public static Vector128<ushort> MultiplyBySelectedScalar(Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<short> MultiplyBySelectedScalar(Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalar(Vector128<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalar(Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<int> addend, Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<uint> addend, Vector64<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<long> addend, Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<ulong> addend, Vector64<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<int> addend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<uint> addend, Vector64<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<long> addend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningLowerAndAdd(Vector128<ulong> addend, Vector64<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<int> addend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<uint> addend, Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<long> addend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<ulong> addend, Vector128<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<int> addend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<uint> addend, Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<long> addend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningUpperAndAdd(Vector128<ulong> addend, Vector128<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<int> addend, Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<uint> addend, Vector64<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<long> addend, Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<ulong> addend, Vector64<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<int> addend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<uint> addend, Vector64<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<long> addend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningLowerAndSubtract(Vector128<ulong> addend, Vector64<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<int> addend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<uint> addend, Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<long> addend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<ulong> addend, Vector128<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<int> addend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<uint> addend, Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<long> addend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningUpperAndSubtract(Vector128<ulong> addend, Vector128<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningLower(Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningLower(Vector64<ushort> left, Vector64<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningLower(Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningLower(Vector64<uint> left, Vector64<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningLower(Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningLower(Vector64<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningLower(Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningLower(Vector64<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningUpper(Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningUpper(Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningUpper(Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningUpper(Vector128<uint> left, Vector128<uint> right, byte rightIndex);
public static Vector128<int> MultiplyBySelectedScalarWideningUpper(Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<uint> MultiplyBySelectedScalarWideningUpper(Vector128<ushort> left, Vector128<ushort> right, byte rightIndex);
public static Vector128<long> MultiplyBySelectedScalarWideningUpper(Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<ulong> MultiplyBySelectedScalarWideningUpper(Vector128<uint> left, Vector128<uint> right, byte rightIndex);
}
}
} |
Follow-up on #24794 (comment)
cc @terrajobst @tannergooding @TamarChristinaArm
One more question: do we need
rightIndex
parameter at all forFusedMultiplyAddBySelectedScalar(Vector128<double> addend, Vector128<double> left, Vector64<double> right, byte rightIndex)
since it only can have one value (i.e. 0)We might just have
FusedMultiplyAddByScalar(Vector128<double> addend, Vector128<double> left, Vector64<double> right)
for this one instead ? However, this could be confused withFusedMultiplyAddScalar(Vector64<double> acc, Vector64<double> left, Vector64<double> right)
...The text was updated successfully, but these errors were encountered: