-
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 VectorTableLookup and VectorTableExtension - Part 2 #81599
Comments
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics Issue DetailsBackground and MotivationWe reviewed and approved the variants of these instructions that take 1 input in #1277. As part of that review, we also considered the variants that take 2-4 inputs. However, we did not approve those variants due to open questions around how the JIT could efficiently handle everything and whether it should be exposed as a tuple or custom type. We're now at a point where we have settled on a design for how the JIT handles this and have opted for using ValueTuple, which we have already successfully done in several other hwintrinsic APIs. API Proposalnamespace System.Runtime.Intrinsics.Arm;
public partial class AdvSimd
{
public static Vector64<byte> VectorTableLookup((Vector128<byte> Row0, Vector128<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup((Vector128<sbyte> Row0, Vector128<byte> Row1) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension(Vector64<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension(Vector64<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1) table, Vector64<sbyte> byteIndexes);
public partial class Arm32
{
public static Vector64<byte> VectorTableLookup ((Vector64<byte> Row0, Vector64<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector64<sbyte> Row0, Vector64<sbyte> Row1) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookup ((Vector64<byte> Row0, Vector64<byte> Row1, Vector64<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector64<sbyte> Row0, Vector64<sbyte> Row1, Vector64<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookup ((Vector64<byte> Row0, Vector64<byte> Row1, Vector64<byte> Row2, Vector64<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector64<sbyte> Row0, Vector64<sbyte> Row1, Vector64<sbyte> Row2, Vector64<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<byte> Row0, Vector64<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<sbyte> Row0, Vector64<sbyte> Row1) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<byte> Row0, Vector64<byte> Row1,Vector64<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<sbyte> Row0, Vector64<sbyte> Row1,Vector64<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<byte> Row0, Vector64<byte> Row1, Vector64<byte> Row2, Vector64<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<sbyte> Row0, Vector64<sbyte> Row1, Vector64<sbyte>Row2, Vector64<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
}
public partial class Arm64
{
public static Vector64<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector128<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector128<sbyte> byteIndexes);
}
}
|
Marked as blocking since it needs to be reviewed before some of the work @kunalspathak has been doing can get merged |
Related #80297 |
namespace System.Runtime.Intrinsics.Arm;
public partial class AdvSimd
{
public static Vector64<byte> VectorTableLookup((Vector128<byte> Row0, Vector128<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup((Vector128<sbyte> Row0, Vector128<byte> Row1) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension(Vector64<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension(Vector64<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1) table, Vector64<sbyte> byteIndexes);
public partial class Arm32
{
public static Vector64<byte> VectorTableLookup ((Vector64<byte> Row0, Vector64<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector64<sbyte> Row0, Vector64<sbyte> Row1) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookup ((Vector64<byte> Row0, Vector64<byte> Row1, Vector64<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector64<sbyte> Row0, Vector64<sbyte> Row1, Vector64<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookup ((Vector64<byte> Row0, Vector64<byte> Row1, Vector64<byte> Row2, Vector64<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector64<sbyte> Row0, Vector64<sbyte> Row1, Vector64<sbyte> Row2, Vector64<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<byte> Row0, Vector64<byte> Row1) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<sbyte> Row0, Vector64<sbyte> Row1) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<byte> Row0, Vector64<byte> Row1,Vector64<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<sbyte> Row0, Vector64<sbyte> Row1,Vector64<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<byte> Row0, Vector64<byte> Row1, Vector64<byte> Row2, Vector64<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector64<sbyte> Row0, Vector64<sbyte> Row1, Vector64<sbyte>Row2, Vector64<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
}
public partial class Arm64
{
public static Vector64<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookup ((Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookup ((Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector128<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector64<sbyte> byteIndexes);
public static Vector64<byte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector64<byte> byteIndexes);
public static Vector64<sbyte> VectorTableLookupExtension (Vector64<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector64<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2) table, Vector128<sbyte> byteIndexes);
public static Vector128<byte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<byte> Row0, Vector128<byte> Row1, Vector128<byte> Row2, Vector128<byte> Row3) table, Vector128<byte> byteIndexes);
public static Vector128<sbyte> VectorTableLookupExtension (Vector128<byte> defaultValues, (Vector128<sbyte> Row0, Vector128<sbyte> Row1, Vector128<sbyte> Row2, Vector128<sbyte> Row3) table, Vector128<sbyte> byteIndexes);
}
} |
Completed by #80297 |
Background and Motivation
We reviewed and approved the variants of these instructions that take 1 input in #1277. As part of that review, we also considered the variants that take 2-4 inputs. However, we did not approve those variants due to open questions around how the JIT could efficiently handle everything and whether it should be exposed as a tuple or custom type.
We're now at a point where we have settled on a design for how the JIT handles this and have opted for using ValueTuple, which we have already successfully done in several other hwintrinsic APIs.
API Proposal
The text was updated successfully, but these errors were encountered: