Uh oh!
There was an error while loading. Please reload this page.
Implement StoreVectorNxM for Arm64 - #94129
Conversation
ghost
commented
Oct 28, 2023
Note regarding the This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change. |
ghost
commented
Oct 28, 2023
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics Issue DetailsContribute towards #84510 // ST3 (multiple structures)publicstaticunsafevoidStoreVector128x3(byte*address,(Vector128<byte>Value1,Vector128<byte>Value2,Vector128<byte>Value3)value);publicstaticunsafevoidStoreVector128x3(sbyte*address,(Vector128<sbyte>Value1,Vector128<sbyte>Value2,Vector128<sbyte>Value3)value);publicstaticunsafevoidStoreVector128x3(short*address,(Vector128<short>Value1,Vector128<short>Value2,Vector128<short>Value3)value);publicstaticunsafevoidStoreVector128x3(ushort*address,(Vector128<ushort>Value1,Vector128<ushort>Value2,Vector128<ushort>Value3)value);publicstaticunsafevoidStoreVector128x3(int*address,(Vector128<int>Value1,Vector128<int>Value2,Vector128<int>Value3)value);publicstaticunsafevoidStoreVector128x3(uint*address,(Vector128<uint>Value1,Vector128<uint>Value2,Vector128<uint>Value3)value);publicstaticunsafevoidStoreVector128x3(long*address,(Vector128<long>Value1,Vector128<long>Value2,Vector128<long>Value3)value);publicstaticunsafevoidStoreVector128x3(ulong*address,(Vector128<ulong>Value1,Vector128<ulong>Value2,Vector128<ulong>Value3)value);publicstaticunsafevoidStoreVector128x3(float*address,(Vector128<float>Value1,Vector128<float>Value2,Vector128<float>Value3)value);publicstaticunsafevoidStoreVector128x3(double*address,(Vector128<double>Value1,Vector128<double>Value2,Vector128<double>Value3)value);publicstaticunsafevoidStoreVector64x3(byte*address,(Vector64<byte>Value1,Vector64<byte>Value2,Vector64<byte>Value3)value);publicstaticunsafevoidStoreVector64x3(sbyte*address,(Vector64<sbyte>Value1,Vector64<sbyte>Value2,Vector64<sbyte>Value3)value);publicstaticunsafevoidStoreVector64x3(short*address,(Vector64<short>Value1,Vector64<short>Value2,Vector64<short>Value3)value);publicstaticunsafevoidStoreVector64x3(ushort*address,(Vector64<ushort>Value1,Vector64<ushort>Value2,Vector64<ushort>Value3)value);publicstaticunsafevoidStoreVector64x3(int*address,(Vector64<int>Value1,Vector64<int>Value2,Vector64<int>Value3)value);publicstaticunsafevoidStoreVector64x3(uint*address,(Vector64<uint>Value1,Vector64<uint>Value2,Vector64<uint>Value3)value);publicstaticunsafevoidStoreVector64x3(float*address,(Vector64<float>Value1,Vector64<float>Value2,Vector64<float>Value3)value);// ST4 (multiple structures)publicstaticunsafevoidStoreVector128x4(byte*address,(Vector128<byte>Value1,Vector128<byte>Value2,Vector128<byte>Value3,Vector128<byte>Value4)value);publicstaticunsafevoidStoreVector128x4(sbyte*address,(Vector128<sbyte>Value1,Vector128<sbyte>Value2,Vector128<sbyte>Value3,Vector128<sbyte>Value4)value);publicstaticunsafevoidStoreVector128x4(short*address,(Vector128<short>Value1,Vector128<short>Value2,Vector128<short>Value3,Vector128<short>Value4)value);publicstaticunsafevoidStoreVector128x4(ushort*address,(Vector128<ushort>Value1,Vector128<ushort>Value2,Vector128<ushort>Value3,Vector128<ushort>Value4)value);publicstaticunsafevoidStoreVector128x4(int*address,(Vector128<int>Value1,Vector128<int>Value2,Vector128<int>Value3,Vector128<int>Value4)value);publicstaticunsafevoidStoreVector128x4(uint*address,(Vector128<uint>Value1,Vector128<uint>Value2,Vector128<uint>Value3,Vector128<uint>Value4)value);publicstaticunsafevoidStoreVector128x4(long*address,(Vector128<long>Value1,Vector128<long>Value2,Vector128<long>Value3,Vector128<long>Value4)value);publicstaticunsafevoidStoreVector128x4(ulong*address,(Vector128<ulong>Value1,Vector128<ulong>Value2,Vector128<ulong>Value3,Vector128<ulong>Value4)value);publicstaticunsafevoidStoreVector128x4(float*address,(Vector128<float>Value1,Vector128<float>Value2,Vector128<float>Value3,Vector128<float>Value4)value);publicstaticunsafevoidStoreVector128x4(double*address,(Vector128<double>Value1,Vector128<double>Value2,Vector128<double>Value3,Vector128<double>Value4)value);publicstaticunsafevoidStoreVector64x4(byte*address,(Vector64<byte>Value1,Vector64<byte>Value2,Vector64<byte>Value3,Vector64<byte>Value4)value);publicstaticunsafevoidStoreVector64x4(sbyte*address,(Vector64<sbyte>Value1,Vector64<sbyte>Value2,Vector64<sbyte>Value3,Vector64<sbyte>Value4)value);publicstaticunsafevoidStoreVector64x4(short*address,(Vector64<short>Value1,Vector64<short>Value2,Vector64<short>Value3,Vector64<short>Value4)value);publicstaticunsafevoidStoreVector64x4(ushort*address,(Vector64<ushort>Value1,Vector64<ushort>Value2,Vector64<ushort>Value3,Vector64<ushort>Value4)value);publicstaticunsafevoidStoreVector64x4(int*address,(Vector64<int>Value1,Vector64<int>Value2,Vector64<int>Value3,Vector64<int>Value4)value);publicstaticunsafevoidStoreVector64x4(uint*address,(Vector64<uint>Value1,Vector64<uint>Value2,Vector64<uint>Value3,Vector64<uint>Value4)value);publicstaticunsafevoidStoreVector64x4(float*address,(Vector64<float>Value1,Vector64<float>Value2,Vector64<float>Value3,Vector64<float>Value4)value);
|
SwapnilGaikwad
commented
Oct 28, 2023
Hi @kunalspathak , would you prefer an overloaded name for the interleaved multi-structure stores like we did for |
kunalspathak
commented
Oct 29, 2023
sorry, but could you confirm which APIs are you asking about? |
SwapnilGaikwad
commented
Oct 29, 2023
The StoreVectorNX2, StoreVectorNx3, StoreVectorNx3 that result in ST2, ST3 and ST4 instructions respectively. |
Hi @kunalspathak, Could you please confirm if my understanding is correct?
If this is correct, then aren't these names a little confusing? |
kunalspathak
left a comment
There was a problem hiding this comment.
Changes looks good, some minor fixes needed.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
kunalspathak
commented
Oct 31, 2023
Looking carefully, yes, you are right. I swapped the two. I will send a PR to fix it. Thanks for spotting it. |
SwapnilGaikwad
commented
Nov 1, 2023
Cool, I'll update this PR accordingly 👍 |
SwapnilGaikwad
commented
Nov 3, 2023
After merging #93223, I'll rebase/merge this PR and then mark it ready for review. |
SwapnilGaikwad
commented
Nov 9, 2023
kunalspathak
left a comment
There was a problem hiding this comment.
LGTM. Just a request to update the documentation for LoadVector equivalent.
Uh oh!
There was an error while loading. Please reload this page.
Contribute towards #84510