Skip to content
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

Closed
tannergooding opened this issue Feb 3, 2023 · 5 comments
Closed

Arm VectorTableLookup and VectorTableExtension - Part 2 #81599

tannergooding opened this issue Feb 3, 2023 · 5 comments
Labels
api-approved API was approved in API review, it can be implemented area-System.Runtime.Intrinsics blocking Marks issues that we want to fast track in order to unblock other important work
Milestone

Comments

@tannergooding
Copy link
Member

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

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);
    }
}
@tannergooding tannergooding added area-System.Runtime.Intrinsics blocking Marks issues that we want to fast track in order to unblock other important work api-ready-for-review API is ready for review, it is NOT ready for implementation labels Feb 3, 2023
@ghost ghost added the untriaged New issue has not been triaged by the area owner label Feb 3, 2023
@ghost
Copy link

ghost commented Feb 3, 2023

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

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

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);
    }
}
Author: tannergooding
Assignees: -
Labels:

area-System.Runtime.Intrinsics, blocking, api-ready-for-review

Milestone: -

@tannergooding
Copy link
Member Author

Marked as blocking since it needs to be reviewed before some of the work @kunalspathak has been doing can get merged

@tannergooding tannergooding removed the untriaged New issue has not been triaged by the area owner label Feb 3, 2023
@dakersnar dakersnar added this to the 8.0.0 milestone Feb 3, 2023
@kunalspathak
Copy link
Member

Related #80297

@terrajobst
Copy link
Member

terrajobst commented Feb 23, 2023

Video

  • Looks good as proposed.
    • There seem to be some copy & paste error where some sbyte should be byte
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);
    }
}

@kunalspathak
Copy link
Member

Completed by #80297

@ghost ghost locked as resolved and limited conversation to collaborators May 4, 2023
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 area-System.Runtime.Intrinsics blocking Marks issues that we want to fast track in order to unblock other important work
Projects
None yet
Development

No branches or pull requests

4 participants