-
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
ARM Doubling Multiply intrinsics #36696
Labels
api-approved
API was approved in API review, it can be implemented
arch-arm64
area-System.Runtime.Intrinsics
Milestone
Comments
Tagging subscribers to this area: @tannergooding |
Dotnet-GitSync-Bot
added
the
untriaged
New issue has not been triaged by the area owner
label
May 19, 2020
CC. @CarolEidt, @echesakovMSFT, @TamarChristinaArm |
tannergooding
removed
the
untriaged
New issue has not been triaged by the area owner
label
May 26, 2020
SQRDMLAH and SQRDMLSH should not be exposed here - they belong to ARMv8.1 |
namespace System.Runtime.Intrinsics.Arm
{
public abstract class AdvSimd
{
public static Vector64<short> MultiplyDoublingSaturateHigh(Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingSaturateHigh(Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyDoublingSaturateHigh(Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyDoublingSaturateHigh(Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyDoublingBySelectedScalarSaturateHigh(Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingBySelectedScalarSaturateHigh(Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingBySelectedScalarSaturateHigh(Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingBySelectedScalarSaturateHigh(Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingBySelectedScalarSaturateHigh(Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingBySelectedScalarSaturateHigh(Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingBySelectedScalarSaturateHigh(Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingBySelectedScalarSaturateHigh(Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingSaturateHighScalar(Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingSaturateHighScalar(Vector64<int> left, Vector64<int> right);
// TODO: Scalar BySelectedScalar variant
public static Vector64<short> MultiplyRoundedDoublingSaturateHigh(Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyRoundedDoublingSaturateHigh(Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyRoundedDoublingSaturateHigh(Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyRoundedDoublingSaturateHigh(Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyRoundedDoublingBySelectedScalarSaturateHigh(Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyRoundedDoublingSaturateHighScalar(Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyRoundedDoublingSaturateHighScalar(Vector64<int> left, Vector64<int> right);
// TODO: Scalar BySelectedScalar variant
public static Vector64<short> MultiplyDoublingWideningSaturateLower(Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingWideningSaturateLower(Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyDoublingWideningSaturateLower(Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyDoublingWideningSaturateLower(Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingWideningLowerBySelectedScalarSaturate(Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingWideningSaturateLowerScalar(Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingWideningSaturateLowerScalar(Vector64<int> left, Vector64<int> right);
// TODO: Scalar BySelectedScalar variant
public static Vector64<short> MultiplyDoublingAddWideningLowerSaturate(Vector64<short> addend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingAddWideningLowerSaturate(Vector64<int> addend, Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyDoublingAddWideningLowerSaturate(Vector128<short> addend, Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyDoublingAddWideningLowerSaturate(Vector128<int> addend, Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector64<short> addend, Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector64<int> addend, Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector64<short> addend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector64<int> addend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector128<short> addend, Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector128<int> addend, Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector128<short> addend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingAddWideningLowerBySelectedScalarSaturate(Vector128<int> addend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingAddWideningLowerSaturateScalar(Vector64<short> addend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingAddWideningLowerSaturateScalar(Vector64<int> addend, Vector64<int> left, Vector64<int> right);
// TODO: Scalar BySelectedScalar variant
public static Vector64<short> MultiplyDoublingSubtractWideningLowerSaturate(Vector64<short> minuend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingSubtractWideningLowerSaturate(Vector64<int> minuend, Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyDoublingSubtractWideningLowerSaturate(Vector128<short> minuend, Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyDoublingSubtractWideningLowerSaturate(Vector128<int> minuend, Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector64<short> minuend, Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector64<int> minuend, Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector64<short> minuend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector64<int> minuend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector128<short> minuend, Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector128<int> minuend, Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector128<short> minuend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyDoublingSubtractWideningLowerBySelectedScalarSaturate(Vector128<int> minuend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyDoublingSubtractWideningLowerSaturateScalar(Vector64<short> minuend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyDoublingSubtractWideningLowerSaturateScalar(Vector64<int> minuend, Vector64<int> left, Vector64<int> right);
// TODO: Scalar BySelectedScalar variant
}
public abstract class Rdm : AdvSimd
{
public static bool IsSupported { get; }
// TODO: Scalar BySelectedScalar variant
public static Vector64<short> MultiplyRoundedDoublingAddSaturateHigh(Vector64<short> addend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyRoundedDoublingAddSaturateHigh(Vector64<int> addend, Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyRoundedDoublingAddSaturateHigh(Vector128<short> addend, Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyRoundedDoublingAddSaturateHigh(Vector128<int> addend, Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector64<short> addend, Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector64<int> addend, Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector64<short> addend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector64<int> addend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector128<short> addend, Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector128<int> addend, Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector128<short> addend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyRoundedDoublingAddBySelectedScalarSaturateHigh(Vector128<int> addend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyRoundedDoublingAddSaturateHighScalar(Vector64<short> addend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyRoundedDoublingAddSaturateHighScalar(Vector64<int> addend, Vector64<int> left, Vector64<int> right);
// TODO: Scalar BySelectedScalar variant
public static Vector64<short> MultiplyRoundedDoublingSubtractSaturateHigh(Vector64<short> minuend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyRoundedDoublingSubtractSaturateHigh(Vector64<int> minuend, Vector64<int> left, Vector64<int> right);
public static Vector128<short> MultiplyRoundedDoublingSubtractSaturateHigh(Vector128<short> minuend, Vector128<short> left, Vector128<short> right);
public static Vector128<int> MultiplyRoundedDoublingSubtractSaturateHigh(Vector128<int> minuend, Vector128<int> left, Vector128<int> right);
public static Vector64<short> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector64<short> minuend, Vector64<short> left, Vector64<short> right, byte rightIndex);
public static Vector64<int> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector64<int> minuend, Vector64<int> left, Vector64<int> right, byte rightIndex);
public static Vector64<short> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector64<short> minuend, Vector64<short> left, Vector128<short> right, byte rightIndex);
public static Vector64<int> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector64<int> minuend, Vector64<int> left, Vector128<int> right, byte rightIndex);
public static Vector128<short> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector128<short> minuend, Vector128<short> left, Vector64<short> right, byte rightIndex);
public static Vector128<int> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector128<int> minuend, Vector128<int> left, Vector64<int> right, byte rightIndex);
public static Vector128<short> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector128<short> minuend, Vector128<short> left, Vector128<short> right, byte rightIndex);
public static Vector128<int> MultiplyRoundedDoublingSubtractBySelectedScalarSaturateHigh(Vector128<int> minuend, Vector128<int> left, Vector128<int> right, byte rightIndex);
public static Vector64<short> MultiplyRoundedDoublingSubtractSaturateHighScalar(Vector64<short> minuend, Vector64<short> left, Vector64<short> right);
public static Vector64<int> MultiplyRoundedDoublingSubtractSaturateHighScalar(Vector64<int> minuend, Vector64<int> left, Vector64<int> right);
}
} |
terrajobst
added
api-approved
API was approved in API review, it can be implemented
and removed
api-ready-for-review
labels
Jun 25, 2020
This was referenced Jul 2, 2020
ghost
locked as resolved and limited conversation to collaborators
Dec 9, 2020
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
api-approved
API was approved in API review, it can be implemented
arch-arm64
area-System.Runtime.Intrinsics
The text was updated successfully, but these errors were encountered: