first commit
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Data.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Globalization.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.SecureString" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
6498e90e8843e51fdb3a37b709a1f1e4b86d3e57
|
||||
|
||||
Repository: https://github.cds.internal.unity3d.com/unity/burst
|
||||
@@ -0,0 +1 @@
|
||||
{"timestamp":1737466918,"signature":"qgj8p/GQY6ZwqGFuy0wkd0Jozcy+tQsZ2WlZ1BOgO+Kc0NBlkD/aZeSHpT640rn44x8YZqZFFJbzv7bai/XYkxBejSDxIjit4FfbGV1iK5c8+j4Gk+WGSFfB/u/1J+YMiS0V8rMr02jwt9C20zIahRRhIStQ/YnNlfcXrGdc8ELuXe5Gm+tB7xqw0GFSrzFQFm9h+NJq6uIi2C7Txm6zR4AnO/qT/isOkmcZT2NQuQ+UMc2FODoHgmiIiW9Z6GG5iRP9Gg2BeoQNgs6/wNbXFQfpmklO2QI2j6Fh16bRPMnVbdFgrn7sLTmPIecKE95CgnmiSgfnt5sbofZLcxAiCmfKqlV/64KjIpTZ85Y8Yter6EDbLKFICaURnHgqn69y1uol2J322Ku20epadcgIOZ/DoUWoM/YVUh6HAMbZcsJOvaN9Hp0ZC4lmcpVfPk7oGu5P+x5MHodj5bumeOR/ypod22ijX1R6sLCY1u1cpa/movU38zwzV61ZCdZ0WQOg","publicKey":"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFzdUhXYUhsZ0I1cVF4ZEJjTlJKSAordHR4SmoxcVY1NTdvMlZaRE1XaXhYRVBkRTBEMVFkT1JIRXNSS1RscmplUXlERU83ZlNQS0ZwZ1A3MU5TTnJCCkFHM2NFSU45aHNQVDhOVmllZmdWem5QTkVMenFkVmdEbFhpb2VpUnV6OERKWFgvblpmU1JWKytwbk9ySTRibG4KS0twelJlNW14OTc1SjhxZ1FvRktKT0NNRlpHdkJMR2MxSzZZaEIzOHJFODZCZzgzbUovWjBEYkVmQjBxZm13cgo2ZDVFUXFsd0E5Y3JZT1YyV1VpWXprSnBLNmJZNzRZNmM1TmpBcEFKeGNiaTFOaDlRVEhUcU44N0ZtMDF0R1ZwCjVNd1pXSWZuYVRUemEvTGZLelR5U0pka0tldEZMVGdkYXpMYlpzUEE2aHBSK0FJRTJhc0tLTi84UUk1N3UzU2cKL2xyMnZKS1IvU2l5eEN1Q20vQWJkYnJMbXk0WjlSdm1jMGdpclA4T0lLQWxBRWZ2TzV5Z2hSKy8vd1RpTFlzUQp1SllDM0V2UE16ZGdKUzdGR2FscnFLZzlPTCsxVzROY05yNWdveVdSUUJ0cktKaWlTZEJVWmVxb0RvSUY5NHpCCndGbzJJT1JFdXFqcU51M3diMWZIM3p1dGdtalFra3IxVjJhd3hmcExLWlROQWdNQkFBRT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg"}
|
||||
1831
Library/PackageCache/com.unity.burst@7a907cf5a459/CHANGELOG.md
Normal file
1831
Library/PackageCache/com.unity.burst@7a907cf5a459/CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 544e4fbf839e39e1b693958db86e8cc8
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,40 @@
|
||||
* [About Burst](index.md)
|
||||
* [Getting started](getting-started.md)
|
||||
* [C# language support](csharp-language-support.md)
|
||||
* [HPC# overview](csharp-hpc-overview.md)
|
||||
* [Static read-only fields and static constructor support](csharp-static-read-only-support.md)
|
||||
* [String support](csharp-string-support.md)
|
||||
* [Calling Burst compiled code](csharp-calling-burst-code.md)
|
||||
* [Function pointers](csharp-function-pointers.md)
|
||||
* [C#/.NET type support](csharp-type-support.md)
|
||||
* [C#/.NET System namespace support](csharp-system-support.md)
|
||||
* [DllImport and internal calls](csharp-burst-intrinsics-dllimport.md)
|
||||
* [SharedStatic struct](csharp-shared-static.md)
|
||||
* [Burst instrinsics](csharp-burst-intrinsics.md)
|
||||
* [Burst intrinsics Common class](csharp-burst-intrinsics-common.md)
|
||||
* [Processor specific SIMD extensions](csharp-burst-intrinsics-processors.md)
|
||||
* [Arm Neon intrinsics reference](csharp-burst-intrinsics-neon.md)
|
||||
* [Editor reference](editor-reference-overview.md)
|
||||
* [Burst menu](editor-burst-menu.md)
|
||||
* [Burst Inspector](editor-burst-inspector.md)
|
||||
* [Burst compilation](compilation.md)
|
||||
* [Compilation overview](compilation-overview.md)
|
||||
* [Synchronous compilation](compilation-synchronous.md)
|
||||
* [BurstCompile attribute](compilation-burstcompile.md)
|
||||
* [Assembly level BurstCompile](compilation-burstcompile-assembly.md)
|
||||
* [BurstDiscard attribute](compilation-burstdiscard.md)
|
||||
* [Generic jobs](compilation-generic-jobs.md)
|
||||
* [Compilation warnings](compilation-warnings.md)
|
||||
* [Building your project](building-projects.md)
|
||||
* [Burst AOT Player Settings reference](building-aot-settings.md)
|
||||
* [Optimization](optimization-overview.md)
|
||||
* [Debugging and profiling tools](debugging-profiling-tools.md)
|
||||
* [Loop vectorization optimization](optimization-loop-vectorization.md)
|
||||
* [Memory aliasing](aliasing.md)
|
||||
* [NoAlias attribute](aliasing-noalias.md)
|
||||
* [Aliasing and the job system](aliasing-job-system.md)
|
||||
* [AssumeRange attribute](optimization-assumerange.md)
|
||||
* [Hint intrinsic](optimization-hint.md)
|
||||
* [Constant intrinsic](optimization-constant.md)
|
||||
* [SkipLocalsInit attribute](optimization-skiplocalsinit.md)
|
||||
* [Modding support](modding-support.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Aliasing and the job system
|
||||
|
||||
Unity's job system infrastructure has some limitations on what can alias within a job struct:
|
||||
|
||||
* Structs attributed with [`[NativeContainer]`](https://docs.unity3d.com/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeContainerAttribute.html) (for example, [`NativeArray`](https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeArray_1.html) and [`NativeSlice`](https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeSlice_1.html)) that are members of a job struct don't alias.
|
||||
* Job struct members with the [`[NativeDisableContainerSafetyRestriction]`](https://docs.unity3d.com/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeDisableContainerSafetyRestrictionAttribute.html) attribute can alias with other members. This is because this attribute explicitly opts in to this kind of aliasing.
|
||||
* Pointers to structs attributed with `[NativeContainer]` can't appear in other structs attributed with `[NativeContainer]`. For example, you can't have a `NativeArray<NativeSlice<T>>`.
|
||||
|
||||
The following example job shows how these limitations work in practice:
|
||||
|
||||
```c#
|
||||
[BurstCompile]
|
||||
private struct MyJob : IJob
|
||||
{
|
||||
public NativeArray<float> a;
|
||||
public NativeArray<float> b;
|
||||
public NativeSlice<int> c;
|
||||
|
||||
[NativeDisableContainerSafetyRestriction]
|
||||
public NativeArray<byte> d;
|
||||
|
||||
public void Execute() { ... }
|
||||
}
|
||||
```
|
||||
|
||||
* `a`, `b`, and `c` don't alias with each other.
|
||||
* `d` can alias with `a`, `b`, or `c`.
|
||||
|
||||
>[!TIP]
|
||||
>If you're used to working with C/C++'s [Type Based Alias Analysis (TBAA)](https://en.wikipedia.org/wiki/Alias_analysis#Type-based_alias_analysis), then you might assume that because `d` has a different type from `a`, `b`, or `c`, it shouldn't alias. However, in C#, pointers don't have any assumptions that pointing to a different type results in no aliasing. This is why `d` is assumed to alias with `a`, `b`, or `c`.
|
||||
@@ -0,0 +1,357 @@
|
||||
# NoAlias attribute
|
||||
|
||||
Use the [`[NoAlias]`](xref:Unity.Burst.NoAliasAttribute) attribute to give Burst additional information on the aliasing of pointers and structs.
|
||||
|
||||
In most use cases, you won't need to use the `[NoAlias]` attribute. You don't need to use it with [`[NativeContainer]`](https://docs.unity3d.com/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeContainerAttribute.html) attributed structs, or with fields in job structs. This is because the Burst compiler infers the no-alias information.
|
||||
|
||||
The `[NoAlias]` attribute is exposed so that you can construct complex data structures where Burst can't infer the aliasing. If you use the `[NoAlias]` attribute on a pointer that could alias with another, it might result in undefined behavior and make it hard to track down bugs.
|
||||
|
||||
You can use this attribute in the following ways:
|
||||
|
||||
* On a function parameter it signifies that the parameter doesn't alias with any other parameter to the function.
|
||||
* On a struct field it signifies that the field doesn't alias with any other `[NoAlias]` field of the struct.
|
||||
* On a struct it signifies that the address of the struct can't appear within the struct itself.
|
||||
* On a function return value it signifies that the returned pointer doesn't alias with any other pointer returned from the same function.
|
||||
|
||||
## NoAlias function parameter
|
||||
|
||||
The following is an example of aliasing:
|
||||
|
||||
```c#
|
||||
int Foo(ref int a, ref int b)
|
||||
{
|
||||
b = 13;
|
||||
a = 42;
|
||||
return b;
|
||||
}
|
||||
```
|
||||
|
||||
For this, Burst produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov dword ptr [rdx], 13
|
||||
mov dword ptr [rcx], 42
|
||||
mov eax, dword ptr [rdx]
|
||||
ret
|
||||
```
|
||||
|
||||
This means that Burst does the following:
|
||||
|
||||
* Stores 13 into `b`.
|
||||
* Stores 42 into `a`.
|
||||
* Reloads the value from `b` to return it.
|
||||
|
||||
Burst has to reload `b` because it doesn't know whether `a` and `b` are backed by the same memory or not.
|
||||
|
||||
Add the `[NoAlias]` attribute to the code to change this:
|
||||
|
||||
```c#
|
||||
int Foo([NoAlias] ref int a, ref int b)
|
||||
{
|
||||
b = 13;
|
||||
a = 42;
|
||||
return b;
|
||||
}
|
||||
```
|
||||
|
||||
For this, Burst produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov dword ptr [rdx], 13
|
||||
mov dword ptr [rcx], 42
|
||||
mov eax, 13
|
||||
ret
|
||||
```
|
||||
|
||||
In this case, the load from `b` has been replaced with moving the constant 13 into the return register.
|
||||
|
||||
## NoAlias struct field
|
||||
|
||||
The following example is the same as the previous, but applied to a struct:
|
||||
|
||||
```c#
|
||||
struct Bar
|
||||
{
|
||||
public NativeArray<int> a;
|
||||
public NativeArray<float> b;
|
||||
}
|
||||
|
||||
int Foo(ref Bar bar)
|
||||
{
|
||||
bar.b[0] = 42.0f;
|
||||
bar.a[0] = 13;
|
||||
return (int)bar.b[0];
|
||||
}
|
||||
```
|
||||
|
||||
For this, Burst produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov rax, qword ptr [rcx + 16]
|
||||
mov dword ptr [rax], 1109917696
|
||||
mov rcx, qword ptr [rcx]
|
||||
mov dword ptr [rcx], 13
|
||||
cvttss2si eax, dword ptr [rax]
|
||||
ret
|
||||
```
|
||||
|
||||
In this case, Burst does the following:
|
||||
|
||||
* Loads the address of the data in `b` into `rax`.
|
||||
* Stores 42 into it (`1109917696` is `0x42280000`, which is `42.0f`).
|
||||
* Loads the address of the data in `a` into `rcx`.
|
||||
* Stores 13 into it.
|
||||
* Reloads the data in `b` and converts it to an integer for returning.
|
||||
|
||||
If you know that the two `NativeArrays` aren't backed by the same memory, you can change the code to the following:
|
||||
|
||||
```c#
|
||||
struct Bar
|
||||
{
|
||||
[NoAlias]
|
||||
public NativeArray<int> a;
|
||||
|
||||
[NoAlias]
|
||||
public NativeArray<float> b;
|
||||
}
|
||||
|
||||
int Foo(ref Bar bar)
|
||||
{
|
||||
bar.b[0] = 42.0f;
|
||||
bar.a[0] = 13;
|
||||
return (int)bar.b[0];
|
||||
}
|
||||
```
|
||||
|
||||
If you attribute both `a` and `b` with `[NoAlias]` it tells Burst that they don't alias with each other within the struct, which produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov rax, qword ptr [rcx + 16]
|
||||
mov dword ptr [rax], 1109917696
|
||||
mov rax, qword ptr [rcx]
|
||||
mov dword ptr [rax], 13
|
||||
mov eax, 42
|
||||
ret
|
||||
```
|
||||
|
||||
This means that Burst can return the integer constant 42.
|
||||
|
||||
## NoAlias struct
|
||||
|
||||
Burst assumes that the pointer to a struct doesn't appear within the struct itself. However, there are cases where this isn't true:
|
||||
|
||||
```c#
|
||||
unsafe struct CircularList
|
||||
{
|
||||
public CircularList* next;
|
||||
|
||||
public CircularList()
|
||||
{
|
||||
// The 'empty' list just points to itself.
|
||||
next = this;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Lists are one of the few structures where it's normal to have the pointer to the struct accessible from somewhere within the struct itself.
|
||||
|
||||
The following example indicates where `[NoAlias]` on a struct can help:
|
||||
|
||||
```c#
|
||||
unsafe struct Bar
|
||||
{
|
||||
public int i;
|
||||
public void* p;
|
||||
}
|
||||
|
||||
float Foo(ref Bar bar)
|
||||
{
|
||||
*(int*)bar.p = 42;
|
||||
return ((float*)bar.p)[bar.i];
|
||||
}
|
||||
```
|
||||
|
||||
This produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov rax, qword ptr [rcx + 8]
|
||||
mov dword ptr [rax], 42
|
||||
mov rax, qword ptr [rcx + 8]
|
||||
mov ecx, dword ptr [rcx]
|
||||
movss xmm0, dword ptr [rax + 4*rcx]
|
||||
ret
|
||||
```
|
||||
|
||||
In this case, Burst:
|
||||
* Loads `p` into `rax`.
|
||||
* Stores 42 into `p`.
|
||||
* Loads `p` into `rax` again.
|
||||
* Loads `i` into `ecx`.
|
||||
* Returns the index into `p` by `i`.
|
||||
|
||||
In this situation, Burst loads `p` twice. This is because it doesn't know if `p` points to the address of the struct `bar`. Once it stores 42 into `p` it has to reload the address of `p` from `bar`, which is a costly operation.
|
||||
|
||||
Add `[NoAlias]` to prevent this:
|
||||
|
||||
```c#
|
||||
[NoAlias]
|
||||
unsafe struct Bar
|
||||
{
|
||||
public int i;
|
||||
public void* p;
|
||||
}
|
||||
|
||||
float Foo(ref Bar bar)
|
||||
{
|
||||
*(int*)bar.p = 42;
|
||||
return ((float*)bar.p)[bar.i];
|
||||
}
|
||||
```
|
||||
|
||||
This produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov rax, qword ptr [rcx + 8]
|
||||
mov dword ptr [rax], 42
|
||||
mov ecx, dword ptr [rcx]
|
||||
movss xmm0, dword ptr [rax + 4*rcx]
|
||||
ret
|
||||
```
|
||||
|
||||
In this situation, Burst only loads the address of `p` once, because `[NoAlias]` tells it that `p` can't be the pointer to `bar`.
|
||||
|
||||
## NoAlias function return
|
||||
|
||||
Some functions can only return a unique pointer. For instance, `malloc` only returns a unique pointer. In this case, `[return:NoAlias]` gives some useful information to Burst.
|
||||
|
||||
>[!IMPORTANT]
|
||||
>Only use `[return: NoAlias]` on functions that are guaranteed to produce a unique pointer. For example, with bump-allocations, or with things like `malloc`. Burst aggressively inlines functions for performance considerations, so with small functions, Burst inlines them into their parents to produce the same result without the attribute.
|
||||
|
||||
The following example uses a bump allocator backed with a stack allocation:
|
||||
|
||||
```c#
|
||||
// Only ever returns a unique address into the stackalloc'ed memory.
|
||||
// We've made this no-inline because Burst will always try and inline
|
||||
// small functions like these, which would defeat the purpose of this
|
||||
// example
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
unsafe int* BumpAlloc(int* alloca)
|
||||
{
|
||||
int location = alloca[0]++;
|
||||
return alloca + location;
|
||||
}
|
||||
|
||||
unsafe int Func()
|
||||
{
|
||||
int* alloca = stackalloc int[128];
|
||||
|
||||
// Store our size at the start of the alloca.
|
||||
alloca[0] = 1;
|
||||
|
||||
int* ptr1 = BumpAlloc(alloca);
|
||||
int* ptr2 = BumpAlloc(alloca);
|
||||
|
||||
*ptr1 = 42;
|
||||
*ptr2 = 13;
|
||||
|
||||
return *ptr1;
|
||||
}
|
||||
```
|
||||
|
||||
This produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
push rsi
|
||||
push rdi
|
||||
push rbx
|
||||
sub rsp, 544
|
||||
lea rcx, [rsp + 36]
|
||||
movabs rax, offset memset
|
||||
mov r8d, 508
|
||||
xor edx, edx
|
||||
call rax
|
||||
mov dword ptr [rsp + 32], 1
|
||||
movabs rbx, offset "BumpAlloc(int* alloca)"
|
||||
lea rsi, [rsp + 32]
|
||||
mov rcx, rsi
|
||||
call rbx
|
||||
mov rdi, rax
|
||||
mov rcx, rsi
|
||||
call rbx
|
||||
mov dword ptr [rdi], 42
|
||||
mov dword ptr [rax], 13
|
||||
mov eax, dword ptr [rdi]
|
||||
add rsp, 544
|
||||
pop rbx
|
||||
pop rdi
|
||||
pop rsi
|
||||
ret
|
||||
```
|
||||
|
||||
The key things that Burst does:
|
||||
|
||||
* Has `ptr1` in `rdi`.
|
||||
* Has `ptr2` in `rax`.
|
||||
* Stores 42 into `ptr1`.
|
||||
* Stores 13 into `ptr2`.
|
||||
* Loads `ptr1` again to return it.
|
||||
|
||||
If you add the `[return: NoAlias]` attribute:
|
||||
|
||||
```c#
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
[return: NoAlias]
|
||||
unsafe int* BumpAlloc(int* alloca)
|
||||
{
|
||||
int location = alloca[0]++;
|
||||
return alloca + location;
|
||||
}
|
||||
|
||||
unsafe int Func()
|
||||
{
|
||||
int* alloca = stackalloc int[128];
|
||||
|
||||
// Store our size at the start of the alloca.
|
||||
alloca[0] = 1;
|
||||
|
||||
int* ptr1 = BumpAlloc(alloca);
|
||||
int* ptr2 = BumpAlloc(alloca);
|
||||
|
||||
*ptr1 = 42;
|
||||
*ptr2 = 13;
|
||||
|
||||
return *ptr1;
|
||||
}
|
||||
```
|
||||
|
||||
It produces the following assembly:
|
||||
|
||||
```x86asm
|
||||
push rsi
|
||||
push rdi
|
||||
push rbx
|
||||
sub rsp, 544
|
||||
lea rcx, [rsp + 36]
|
||||
movabs rax, offset memset
|
||||
mov r8d, 508
|
||||
xor edx, edx
|
||||
call rax
|
||||
mov dword ptr [rsp + 32], 1
|
||||
movabs rbx, offset "BumpAlloc(int* alloca)"
|
||||
lea rsi, [rsp + 32]
|
||||
mov rcx, rsi
|
||||
call rbx
|
||||
mov rdi, rax
|
||||
mov rcx, rsi
|
||||
call rbx
|
||||
mov dword ptr [rdi], 42
|
||||
mov dword ptr [rax], 13
|
||||
mov eax, 42
|
||||
add rsp, 544
|
||||
pop rbx
|
||||
pop rdi
|
||||
pop rsi
|
||||
ret
|
||||
```
|
||||
|
||||
In this case, Burst doesn't reload `ptr2`, and moves 42 into the return register.
|
||||
@@ -0,0 +1,174 @@
|
||||
# Memory aliasing
|
||||
|
||||
Memory aliasing is a way to tell Burst how your code uses data. This can improve and optimize the performance of your application.
|
||||
|
||||
Memory aliasing happens when locations in the memory overlap each other. The following documentation outlines the difference between memory aliasing, and no memory aliasing.
|
||||
|
||||
The following example shows a job that copies data from an input array to an output array:
|
||||
|
||||
```c#
|
||||
[BurstCompile]
|
||||
private struct CopyJob : IJob
|
||||
{
|
||||
[ReadOnly]
|
||||
public NativeArray<float> Input;
|
||||
|
||||
[WriteOnly]
|
||||
public NativeArray<float> Output;
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
for (int i = 0; i < Input.Length; i++)
|
||||
{
|
||||
Output[i] = Input[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
## No memory aliasing
|
||||
|
||||
If the arrays `Input` and `Output` don't overlap, which means that their respective memory location doesn't overlap, the code returns the following result after running this job on a sample input/output:
|
||||
|
||||
</br>_Memory with no aliasing_
|
||||
|
||||
If Burst is [noalias](aliasing-noalias.md) aware, it can work at the scalar level to optimize the previous scalar loop. It does this through a process called vectorizing, where it rewrites the loop to process elements in a small batch. For example, Burst could work at vector level in 4 by 4 elements:
|
||||
|
||||
<br/>_Memory with no aliasing vectorized_
|
||||
|
||||
## Memory aliasing
|
||||
|
||||
If the `Output` array overlaps the `Input` array by one element (for example `Output[0]` points to `Input[1]`), then this means that the memory is aliasing. This gives the following result when you run `CopyJob` without the auto vectorizer:
|
||||
|
||||
<br>_Memory with aliasing_
|
||||
|
||||
If [Burst isn't aware of the memory aliasing](aliasing-noalias.md), it tries to auto vectorize the loop, which results in the following:
|
||||
|
||||
<br/>_Memory with aliasing and invalid vectorized code_
|
||||
|
||||
The result of this code is invalid and might lead to bugs if Burst can't identify them.
|
||||
|
||||
## Generated code
|
||||
|
||||
In the `CopyJob` example, there is an `x64` assembly targeted at `AVX2` in its loop. The instruction `vmovups` moves 8 floats, so a single auto vectorized loop moves 4 × 8 floats, which equals 32 floats copied per loop iteration, instead of just one:
|
||||
|
||||
```x86asm
|
||||
.LBB0_4:
|
||||
vmovups ymm0, ymmword ptr [rcx - 96]
|
||||
vmovups ymm1, ymmword ptr [rcx - 64]
|
||||
vmovups ymm2, ymmword ptr [rcx - 32]
|
||||
vmovups ymm3, ymmword ptr [rcx]
|
||||
vmovups ymmword ptr [rdx - 96], ymm0
|
||||
vmovups ymmword ptr [rdx - 64], ymm1
|
||||
vmovups ymmword ptr [rdx - 32], ymm2
|
||||
vmovups ymmword ptr [rdx], ymm3
|
||||
sub rdx, -128
|
||||
sub rcx, -128
|
||||
add rsi, -32
|
||||
jne .LBB0_4
|
||||
test r10d, r10d
|
||||
je .LBB0_8
|
||||
```
|
||||
|
||||
The following example shows the same Burst compiled loop, but Burst's aliasing is artificially disabled:
|
||||
|
||||
```x86asm
|
||||
.LBB0_2:
|
||||
mov r8, qword ptr [rcx]
|
||||
mov rdx, qword ptr [rcx + 16]
|
||||
cdqe
|
||||
mov edx, dword ptr [rdx + 4*rax]
|
||||
mov dword ptr [r8 + 4*rax], edx
|
||||
inc eax
|
||||
cmp eax, dword ptr [rcx + 8]
|
||||
jl .LBB0_2
|
||||
```
|
||||
|
||||
The result is entirely scalar and runs approximately 32 times slower than the highly optimized, vectorized variant that the original alias analysis produces.
|
||||
|
||||
## Function cloning
|
||||
|
||||
For function calls where Burst knows about the aliasing between parameters to the function, Burst can infer the aliasing. It can then propagate this onto the called function to improve optimization:
|
||||
|
||||
```c#
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
int Bar(ref int a, ref int b)
|
||||
{
|
||||
a = 42;
|
||||
b = 13;
|
||||
return a;
|
||||
}
|
||||
|
||||
int Foo()
|
||||
{
|
||||
var a = 53;
|
||||
var b = -2;
|
||||
|
||||
return Bar(ref a, ref b);
|
||||
}
|
||||
```
|
||||
|
||||
The assembly for `Bar` would be:
|
||||
|
||||
```x86asm
|
||||
mov dword ptr [rcx], 42
|
||||
mov dword ptr [rdx], 13
|
||||
mov eax, dword ptr [rcx]
|
||||
ret
|
||||
```
|
||||
|
||||
This is because Burst doesn't know the aliasing of `a` and `b` within the `Bar` function. This is in line with what other compiler technologies do with this code snippet.
|
||||
|
||||
Burst is smarter than this though. Through a process of function cloning, Burst creates a copy of `Bar` where it knows that the aliasing properties of `a` and `b` don't alias. It then replaces the original call to `Bar` with a call to the copy. This results in the following assembly:
|
||||
|
||||
```x86asm
|
||||
mov dword ptr [rcx], 42
|
||||
mov dword ptr [rdx], 13
|
||||
mov eax, 42
|
||||
ret
|
||||
```
|
||||
|
||||
In this scenario, Burst doesn't perform the second load from `a`.
|
||||
|
||||
## Aliasing checks
|
||||
|
||||
Because aliasing is key to Burst's ability to optimize for performance, there are some aliasing intrinsics:
|
||||
|
||||
- [`Unity.Burst.CompilerServices.Aliasing.ExpectAliased`](xref:Unity.Burst.CompilerServices.Aliasing.ExpectAliased*) expects that the two pointers do alias, and generates a compiler error if not.
|
||||
- [`Unity.Burst.CompilerServices.Aliasing.ExpectNotAliased`](xref:Unity.Burst.CompilerServices.Aliasing.ExpectNotAliased*) expects that the two pointers don't alias, and generates a compiler error if not.
|
||||
|
||||
An example:
|
||||
|
||||
```c#
|
||||
using static Unity.Burst.CompilerServices.Aliasing;
|
||||
|
||||
[BurstCompile]
|
||||
private struct CopyJob : IJob
|
||||
{
|
||||
[ReadOnly]
|
||||
public NativeArray<float> Input;
|
||||
|
||||
[WriteOnly]
|
||||
public NativeArray<float> Output;
|
||||
|
||||
public unsafe void Execute()
|
||||
{
|
||||
// NativeContainer attributed structs (like NativeArray) cannot alias with each other in a job struct!
|
||||
ExpectNotAliased(Input.getUnsafePtr(), Output.getUnsafePtr());
|
||||
|
||||
// NativeContainer structs cannot appear in other NativeContainer structs.
|
||||
ExpectNotAliased(in Input, in Output);
|
||||
ExpectNotAliased(in Input, Input.getUnsafePtr());
|
||||
ExpectNotAliased(in Input, Output.getUnsafePtr());
|
||||
ExpectNotAliased(in Output, Input.getUnsafePtr());
|
||||
ExpectNotAliased(in Output, Output.getUnsafePtr());
|
||||
|
||||
// But things definitely alias with themselves!
|
||||
ExpectAliased(in Input, in Input);
|
||||
ExpectAliased(Input.getUnsafePtr(), Input.getUnsafePtr());
|
||||
ExpectAliased(in Output, in Output);
|
||||
ExpectAliased(Output.getUnsafePtr(), Output.getUnsafePtr());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
These checks only run when optimizations are enabled, because proper aliasing deduction is intrinsically linked to the optimizer's ability to see through functions via inlining.
|
||||
@@ -0,0 +1,39 @@
|
||||
# Burst AOT Player Settings reference
|
||||
|
||||
To control Burst's AOT compilation, use the [Player Settings window](https://docs.unity3d.com/Manual/class-PlayerSettings.html) (**Edit > Player Settings > Burst AOT Settings**). These settings override the Burst settings in the [Jobs menu](editor-burst-menu.md) when you make a build of your project.
|
||||
|
||||

|
||||
|
||||
|**Setting**|**Function**|
|
||||
|---|---|
|
||||
|**Target Platform**| Displays the current platform. To change the platform, go to **File > Build Settings**. You can set these Player Settings per platform.|
|
||||
|**Enable Burst Compilation**| Enable this setting to turn Burst compilation on. Disable this setting to deactivate Burst compilation for the selected platform.|
|
||||
|**Enable Optimizations**| Enable this setting to activate Burst optimizations.|
|
||||
|**Force Debug Information**| Enable this setting to make Burst generate debug information. This adds debug symbols to your project, even in release builds of your project, so that when you load it in a debugger you can see file and line information.|
|
||||
|**Use Platform SDK Linker**<br/>(Windows, macOS, and Linux builds only)| Disables cross compilation support. When you enable this setting, you must use platform-specific tools for your target platform. Only enable this setting for debugging purposes. For more information, see [Platforms with cross compilation disabled](building-projects.md#cross-compilation).|
|
||||
|**Target 32Bit CPU Architectures**<br/>(Displayed if the architecture is supported)| Select the CPU architectures that you want to use for 32 bit builds. By default, SSE2 and SSE4 are selected.|
|
||||
|**Target 64Bit CPU Architectures**<br/>(Displayed if the architecture is supported)| Select the CPU architectures that you want to use for 64-bit builds. By default, SSE2 and SSE4 are selected.|
|
||||
|**Target Arm 64Bit CPU Architectures**<br/>(Displayed if the architecture is supported)| Select the CPU architectures that you want to use for Arm 64-bit builds. By default, ARMV8A is selected.|
|
||||
|**Optimize For**| Select which optimization settings to compile Burst code for. For more information see [`OptimizeFor`](xref:Unity.Burst.OptimizeFor).|
|
||||
|Performance|Optimizes the job to run as fast as possible.|
|
||||
|Size|Optimizes to make the code generation as small as possible.|
|
||||
|Fast Compilation|Compiles code as fast as possible, with minimal optimization. Burst doesn't perform any vectorization, inlining, or loop optimizations. |
|
||||
|Balanced</br>(Default)|Optimizes for code that runs fast but keeps compile time as low as possible.|
|
||||
|**Disabled Warnings**| Specify a semi-colon separated list of Burst warning numbers to disable the warnings for a player build. Unity shares this setting across all platforms. This can be useful if you want to ignore specific [compilation warnings](compilation-warnings.md) while testing your application. |
|
||||
|
||||
The **CPU Architecture** setting is only supported for Windows, macOS, Linux and Android. Unity builds a Player that supports the CPU architectures you've selected. Burst generates a special dispatch into the module, so that the code generated detects the CPU the target platform uses and selects the appropriate CPU architecture at runtime.
|
||||
|
||||
## Optimize For setting
|
||||
|
||||
>[!NOTE]
|
||||
>Any [OptimizeFor](xref:Unity.Burst.OptimizeFor) setting is the global default optimization setting for any Burst job or function-pointer. If any assembly level `BurstCompile`, or a specific Burst job or function-pointer has an `OptimizeFor` setting, it overrides the global optimization setting for those jobs.
|
||||
|
||||
To control how Burst optimizes your code, use the **Optimize For** setting in the Editor, or use the [`OptimizeFor`](xref:Unity.Burst.OptimizeFor) field:
|
||||
|
||||
```c#
|
||||
[BurstCompile(OptimizeFor = OptimizeFor.FastCompilation)]
|
||||
public struct MyJob : IJob
|
||||
{
|
||||
// ...
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
# Building your project
|
||||
|
||||
When you build your project, Burst compiles your code, then creates a single dynamic library, and puts it into the Plugins folder for the platform you're targeting. For example, on Windows, the path is `Data/Plugins/lib_burst_generated.dll`.
|
||||
|
||||
>[!NOTE]
|
||||
>This is different if your target platform is iOS. Instead, Unity generates a static library because of Apple's submission requirements for TestFlight.
|
||||
|
||||
The job system runtime loads the generated library the first time a Burst compiled method is invoked.
|
||||
|
||||
To control Burst's AOT compilation, use the settings in the **Burst AOT Settings** section of the Player Settings window (**Edit > Player Settings > Burst AOT Settings**). For more information, see [Burst AOT Settings reference](building-aot-settings.md).
|
||||
|
||||
<a name="cross-compilation"></a>
|
||||
|
||||
## Platforms without cross compilation
|
||||
|
||||
If you're compiling for a non-desktop platform, then Burst compilation requires specific platform compilation tools (similar to [IL2CPP](https://docs.unity3d.com/Manual/IL2CPP.html)). By default, desktop platforms (macOS, Linux, Windows) don't need external toolchain support, unless you enable the **Use Platform SDK Linker** setting in the [Burst AOT Settings](building-aot-settings.md).
|
||||
|
||||
The table below lists the level of support for AOT compilation on each platform. If you select an invalid target (one with missing tools, or unsupported), Unity doesn't use Burst compilation, which might lead it to fail, but Unity still builds the target without Burst optimizations.
|
||||
|
||||
>[!NOTE]
|
||||
>Burst supports cross-compilation between desktop platforms (macOS/Linux/Windows) by default.
|
||||
|
||||
| **Host Editor platform** | **Target Player platform** | **Supported CPU architectures** | **External toolchain requirements** |
|
||||
|---|---|---|---|
|
||||
| Windows | Windows | x86 (SSE2, SSE4)<br/> x64 (SSE2, SSE4, AVX, AVX2) | None |
|
||||
| Windows | Universal Windows Platform | x86 (SSE2, SSE4)<br/> x64 (SSE2, SSE4, AVX, AVX2)<br/>ARM32 (Thumb2, Neon32)<br/>ARMV8 AARCH64<br/><br/>**Note:** A UWP build always compiles all four targets.| Visual Studio 2017<br/>Universal Windows Platform Development Workflow<br/>C++ Universal Platform Tools |
|
||||
| Windows | Android | x86 SSE2<br/> ARMV7 (Thumb2, Neon32)<br/> ARMV8 AARCH64 (ARMV8A, ARMV8A_HALFFP, ARMV9A) | Android NDK<br/><br/>**Important:** Use the Android NDK that you install through Unity Hub (via **Add Component**). Burst falls back to the one that the `ANDROID_NDK_ROOT` environment variable specifies if the Unity external tools settings aren't configured. |
|
||||
| Windows | Magic Leap | ARMV8 AARCH64 | You must install the Lumin SDK via the Magic Leap Package Manager and configured in the Unity Editor's External Tools Preferences. |
|
||||
| Windows | Xbox One | x64 SSE4 | Microsoft GDK |
|
||||
| Windows | Xbox Series | x64 AVX2 | Microsoft GDK |
|
||||
| Windows | PlayStation 4 | x64 SSE4 | Minimum PS4 SDK version 8.00 |
|
||||
| Windows | PlayStation 5 | x64 AVX2 | Minimum PS5 SDK version 2.00 |
|
||||
| Windows | Nintendo Switch | ARMV8 AARCH64 | None |
|
||||
| macOS | macOS | x64 (SSE2, SSE4, AVX, AVX2), Apple Silicon | None |
|
||||
| macOS | iOS | ARM32 Thumb2/Neon32, ARMV8 AARCH64 | Xcode with command line tools installed (`xcode-select --install`) |
|
||||
| macOS | Android | x86 SSE2<br/> ARMV7 (Thumb2, Neon32)<br/> ARMV8 AARCH64 (ARMV8A, ARMV8A_HALFFP, ARMV9A) | Android NDK<br/><br/>**Important:** Use the Android NDK that you install through Unity Hub (via **Add Component**). Burst falls back to the one that the `ANDROID_NDK_ROOT` environment variable specifies if the Unity external tools settings aren't configured. |
|
||||
| macOS | Magic Leap | ARMV8 AARCH64 | You must install the Lumin SDK via the Magic Leap Package Manager and configured in the Unity Editor's External Tools Preferences. |
|
||||
| Linux | Linux | x64 (SSE2, SSE4, AVX, AVX2) | None |
|
||||
|
||||
The maximum target CPU is hardcoded per platform. For standalone builds that target desktop platforms (Windows/Linux/macOS) you can choose the supported targets via the [Burst AOT Settings](building-aot-settings.md)
|
||||
|
||||
### Projects that don't use Burst
|
||||
|
||||
Some projects can't use Burst as the compiler:
|
||||
|
||||
* iOS projects from the Windows Editor
|
||||
* Android projects from the Linux Editor
|
||||
* Xcode projects generated from the **Create Xcode Project** option
|
||||
|
||||
## Multiple Burst targets
|
||||
|
||||
When Burst compiles multiple target platforms during a build, it has to perform separate compilations. For example, if you want to compile `X64_SSE2` and `X64_SSE4`, the Burst has to do two separate compilations to generate code for each of the targets you choose.
|
||||
|
||||
To keep the combinations of targets to a minimum, Burst target platforms require multiple processor instruction sets underneath:
|
||||
|
||||
* `SSE4.2` is gated on having `SSE4.2` and `POPCNT` instruction sets.
|
||||
* `AVX2` is gated on having `AVX2`, `FMA`, `F16C`, `BMI1`, and `BMI2` instruction sets.
|
||||
* `ARMV8A` is a basic Armv8-A CPU target
|
||||
* `ARMV8A_HALFFP` is `ARMV8A` plus the following extensions: `fullfp16`, `dotprod`, `crypto`, `crc`, `rdm`, `lse`. In practice, this means Cortex A75/A55 and later cores.
|
||||
* `ARMV9A` is `ARMV8A_HALFFP` plus SVE2 support. In practice, this means Cortex X2/A710/A510 and later cores. **Important:** this target is currently experimental.
|
||||
|
||||
## Dynamic dispatch based on runtime CPU features
|
||||
|
||||
For all `x86`/`x64` CPU desktop platforms, as well as for 64-bit Arm on Android, Burst takes into account the CPU features available at runtime to dispatch jobs to different versions it compiles.
|
||||
|
||||
For `x86` and `x64` CPUs, Burst supports `SSE2` and `SSE4` instruction sets at runtime only.
|
||||
|
||||
For example, with dynamic CPU dispatch, if your CPU supports `SSE3` and below, Burst selects `SSE2` automatically.
|
||||
@@ -0,0 +1,41 @@
|
||||
# Assembly level BurstCompile
|
||||
|
||||
Use the `BurstCompile` attribute on an assembly to set options for all Burst jobs and function-pointers within the assembly:
|
||||
|
||||
```c#
|
||||
[assembly: BurstCompile(CompileSynchronously = true)]
|
||||
```
|
||||
|
||||
For example, if an assembly just contains game code which needs to run quickly, you can use:
|
||||
|
||||
```c#
|
||||
[assembly: BurstCompile(OptimizeFor = OptimizeFor.FastCompilation)]
|
||||
```
|
||||
|
||||
This means that Burst compiles the code as fast as it possibly can, which means that you can iterate on the game code much more quickly. It also means that other assemblies compile as they did before, which gives you more control on how Burst works with your code.
|
||||
|
||||
Assembly-level `BurstCompile` attributes iterate with any job or function-pointer attribute, and also with any globally set options from the Burst Editor menu. Burst prioritizes assembly level attributes in the following order:
|
||||
|
||||
1. [Editor menu settings](editor-burst-menu.md) take precedence. For example, if you enable **Native Debug Compilation** from the Burst menu, Burst always compiles your code ready for debugging.
|
||||
1. Burst checks any `BurstCompile` attribute on a job or function-pointer. If you have `CompileSynchronously = true` in `BurstCompile`, then Burst compiles synchronously
|
||||
1. Otherwise, Burst sources any remaining settings from any assembly level attribute.
|
||||
|
||||
For example:
|
||||
|
||||
```c#
|
||||
[assembly: BurstCompile(OptimizeFor = OptimizeFor.FastCompilation)]
|
||||
|
||||
// This job will be optimized for fast-compilation, because the per-assembly BurstCompile asked for it
|
||||
[BurstCompile]
|
||||
struct AJob : IJob
|
||||
{
|
||||
// ...
|
||||
}
|
||||
|
||||
// This job will be optimized for size, because the per-job BurstCompile asked for it
|
||||
[BurstCompile(OptimizeFor = OptimizeFor.Size)]
|
||||
struct BJob : IJob
|
||||
{
|
||||
// ...
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,55 @@
|
||||
# BurstCompile attribute
|
||||
|
||||
To improve the performance of Burst, you can change how it behaves when it compiles a job with the [`[BurstCompile]`](xref:Unity.Burst.BurstCompileAttribute) attribute. Use it do the following:
|
||||
|
||||
* Use a different accuracy for math functions (for example, sin, cos).
|
||||
* Relax the order of math computations so that Burst can rearrange the floating point calculations.
|
||||
* Force a synchronous compilation of a job (only for [just-in-time compilation](compilation.md)).
|
||||
|
||||
For example, you can use the `[BurstCompile]` attribute to change the [floating precision](xref:Unity.Burst.FloatPrecision) and [float mode](xref:Unity.Burst.FloatMode) of Burst like so:
|
||||
|
||||
[BurstCompile(FloatPrecision.Med, FloatMode.Fast)]
|
||||
|
||||
## FloatPrecision
|
||||
|
||||
Use the [`FloatPrecision`](xref:Unity.Burst.FloatPrecision) enumeration to define Burst's floating precision accuracy.
|
||||
|
||||
Float precision is measured in ulp (unit in the last place or unit of least precision). This is the space between floating-point numbers: the value the least significant digit represents if it's 1. `Unity.Burst.FloatPrecision` provides the following accuracy:
|
||||
|
||||
* `FloatPrecision.Standard`: Default value, which is the same as `FloatPrecision.Medium`. This provides an accuracy of 3.5 ulp.
|
||||
* `FloatPrecision.High`: Provides an accuracy of 1.0 ulp.
|
||||
* `FloatPrecision.Medium`: Provides an accuracy of 3.5 ulp.
|
||||
* `FloatPrecision.Low`: Has an accuracy defined per function, and functions might specify a restricted range of valid inputs.
|
||||
|
||||
**Note:** In previous versions of the Burst API, the `FloatPrecision` enum was named `Accuracy`.
|
||||
|
||||
### FloatPrecision.Low
|
||||
|
||||
If you use the [`FloatPrecision.Low`](xref:Unity.Burst.FloatPrecision) mode, the following functions have a precision of 350.0 ulp. All other functions inherit the ulp from `FloatPrecision.Medium`.
|
||||
|
||||
* `Unity.Mathematics.math.sin(x)`
|
||||
* `Unity.Mathematics.math.cos(x)`
|
||||
* `Unity.Mathematics.math.exp(x)`
|
||||
* `Unity.Mathematics.math.exp2(x)`
|
||||
* `Unity.Mathematics.math.exp10(x)`
|
||||
* `Unity.Mathematics.math.log(x)`
|
||||
* `Unity.Mathematics.math.log2(x)`
|
||||
* `Unity.Mathematics.math.log10(x)`
|
||||
* `Unity.Mathematics.math.pow(x, y)`
|
||||
* Negative `x` to the power of a fractional `y` aren't supported.
|
||||
* `Unity.Mathematics.math.fmod(x, y)`
|
||||
|
||||
## FloatMode
|
||||
|
||||
Use the [`FloatMode`](xref:Unity.Burst.FloatMode) enumeration to define Burst's floating point math mode. It provides the following modes:
|
||||
|
||||
|
||||
* `FloatMode.Default`: Defaults to `FloatMode.Strict` mode.
|
||||
* `FloatMode.Strict`: Burst doesn't perform any re-arrangement of the calculation and respects special floating point values (such as denormals, NaN). This is the default value.
|
||||
* `FloatMode.Fast`: Burst can perform instruction re-arrangement and use dedicated or less precise hardware SIMD instructions.
|
||||
* `FloatMode.Deterministic`: Unsupported. Deterministic mode is reserved for a future iteration of Burst.
|
||||
|
||||
For hardware that can support Multiply and Add (e.g mad `a * b + c`) into a single instruction, you can use `FloatMode.Fast` to enable this optimization. However, the reordering of these instructions might lead to a lower accuracy.
|
||||
|
||||
Use `FloatMode.Fast` for scenarios where the exact order of the calculation and the uniform handling of NaN values aren't required.
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# BurstDiscard attribute
|
||||
|
||||
If you're running C# code not inside Burst-compiled code, you might want to use managed objects, but not compile these portions of code within Burst. To do this, use the `[BurstDiscard]` attribute on a method:
|
||||
|
||||
```c#
|
||||
[BurstCompile]
|
||||
public struct MyJob : IJob
|
||||
{
|
||||
public void Execute()
|
||||
{
|
||||
// Only executed when running from a full .NET runtime
|
||||
// this method call will be discard when compiling this job with
|
||||
// [BurstCompile] attribute
|
||||
MethodToDiscard();
|
||||
}
|
||||
|
||||
[BurstDiscard]
|
||||
private static void MethodToDiscard(int arg)
|
||||
{
|
||||
Debug.Log($"This is a test: {arg}");
|
||||
}
|
||||
}
|
||||
```
|
||||
>[!NOTE]
|
||||
>A method with `[BurstDiscard]` can't have a return value.
|
||||
|
||||
You can use a `ref` or `out` parameter, which indicates whether the code is running on Burst or managed:
|
||||
|
||||
```c#
|
||||
[BurstDiscard]
|
||||
private static void SetIfManaged(ref bool b) => b = false;
|
||||
|
||||
private static bool IsBurst()
|
||||
{
|
||||
var b = true;
|
||||
SetIfManaged(ref b);
|
||||
return b;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
# Generic jobs
|
||||
|
||||
Burst compiles a job in two ways:
|
||||
|
||||
* In the Editor, it compiles the job when it's scheduled, known as just-in-time (JIT) compilation.
|
||||
* In a player build, it compiles the job as part of the built player, known as ahead-of-time (AOT) compilation.
|
||||
|
||||
For more information, see the documentation on [Compilation](compilation-overview.md).
|
||||
|
||||
If the job is a concrete type (doesn't use generics), Burst compiles it in both modes (AOT and JIT). However, a generic job might behave in an unexpected way.
|
||||
|
||||
While Burst supports generics, it has limited support for generic jobs or function pointers. If you notice that a job scheduled in the Editor is running at full speed, but not in a built player, it's might be a problem related to generic jobs.
|
||||
|
||||
The following example defines a generic job:
|
||||
|
||||
```c#
|
||||
// Direct generic job
|
||||
[BurstCompile]
|
||||
struct MyGenericJob<TData> : IJob where TData : struct {
|
||||
public void Execute() { ... }
|
||||
}
|
||||
```
|
||||
|
||||
You can also nest generic jobs:
|
||||
|
||||
```c#
|
||||
// Nested generic job
|
||||
public class MyGenericSystem<TData> where TData : struct {
|
||||
[BurstCompile]
|
||||
struct MyGenericJob : IJob {
|
||||
public void Execute() { ... }
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
var myJob = new MyGenericJob(); // implicitly MyGenericSystem<TData>.MyGenericJob
|
||||
myJob.Schedule();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Jobs that aren't Burst compiled look like this:
|
||||
|
||||
```c#
|
||||
// Direct Generic Job
|
||||
var myJob = new MyGenericJob<int>();
|
||||
myJob.Schedule();
|
||||
|
||||
// Nested Generic Job
|
||||
var myJobSystem = new MyGenericSystem<float>();
|
||||
myJobSystem.Run();
|
||||
```
|
||||
|
||||
In both cases, in a player build, the Burst compiler detects that it has to compile `MyGenericJob<int>` and `MyGenericJob<float>`. This is because the generic jobs (or the type surrounding it for the nested job) are used with fully resolved generic arguments (`int` and `float`).
|
||||
|
||||
However, if these jobs are used indirectly through a generic parameter, the Burst compiler can't detect the jobs it has to compile at player build time:
|
||||
|
||||
```c#
|
||||
public static void GenericJobSchedule<TData>() where TData: struct {
|
||||
// Generic argument: Generic Parameter TData
|
||||
// This Job won't be detected by the Burst Compiler at standalone-player build time.
|
||||
var job = new MyGenericJob<TData>();
|
||||
job.Schedule();
|
||||
}
|
||||
|
||||
// The implicit MyGenericJob<int> will run at Editor time in full Burst speed
|
||||
// but won't be detected at standalone-player build time.
|
||||
GenericJobSchedule<int>();
|
||||
```
|
||||
|
||||
The same restriction applies if you declare the job in the context of generic parameter that comes from a type:
|
||||
|
||||
```c#
|
||||
// Generic Parameter TData
|
||||
public class SuperJobSystem<TData>
|
||||
{
|
||||
// Generic argument: Generic Parameter TData
|
||||
// This Job won't be detected by the Burst Compiler at standalone-player build time.
|
||||
public MyGenericJob<TData> MyJob;
|
||||
}
|
||||
```
|
||||
|
||||
If you want to use generic jobs, you must use them directly with fully resolved generic arguments (for example, `int`, `MyOtherStruct`). You can't use them with a generic parameter indirection (for example, `MyGenericJob<TContext>`).
|
||||
|
||||
>[!IMPORTANT]
|
||||
>Burst doesn't support scheduling generic Jobs through generic methods.
|
||||
|
||||
## Function pointers
|
||||
|
||||
Function pointers are restricted because you can't use a generic delegate through a function pointer with Burst:
|
||||
|
||||
```c#
|
||||
public delegate void MyGenericDelegate<T>(ref TData data) where TData: struct;
|
||||
|
||||
var myGenericDelegate = new MyGenericDelegate<int>(MyIntDelegateImpl);
|
||||
// Will fail to compile this function pointer.
|
||||
var myGenericFunctionPointer = BurstCompiler.CompileFunctionPointer<MyGenericDelegate<int>>(myGenericDelegate);
|
||||
```
|
||||
|
||||
This limitation is because of a limitation of the .NET runtime to interop with such delegates.
|
||||
|
||||
For more information, see the documentation on [Function pointers](csharp-function-pointers.md).
|
||||
@@ -0,0 +1,21 @@
|
||||
# Compilation overview
|
||||
|
||||
Burst compiles your code in different ways depending on its context.
|
||||
|
||||
* In Play mode, Burst compiles your code [just-in-time (JIT)](https://en.wikipedia.org/wiki/Just-in-time_compilation).
|
||||
* When you build and run your application to a player, Burst compiles [ahead-of-time (AOT)](https://en.wikipedia.org/wiki/Ahead-of-time_compilation).
|
||||
|
||||
## Just-in-time compilation
|
||||
|
||||
While your application is in Play mode in the Editor, Burst compiles your code asynchronously at the point that Unity uses it. This means that your code runs under the default [Mono compiler](https://docs.unity3d.com/Manual/Mono.html) until Burst completes its work in the background.
|
||||
|
||||
To force Unity to compile your code synchronously while in the Editor, see [Synchronous compilation](compilation-synchronous.md)
|
||||
|
||||
## Ahead-of-time compilation
|
||||
|
||||
When you build your project, Burst compiles all the supported code ahead-of-time (AOT) into a native library which Unity ships with your application. To control how Burst compiles AOT, use the [Player Settings window](building-aot-settings.md). Depending on the platform you want to build for, AOT compilation might require access to linker tools. For more information, see [Building your project](building-projects.md).
|
||||
|
||||
## Further resources
|
||||
|
||||
* [Synchronous compilation](compilation-synchronous.md)
|
||||
* [BurstCompile attribute](compilation-burstcompile.md)
|
||||
@@ -0,0 +1,21 @@
|
||||
# Synchronous compilation
|
||||
|
||||
By default, when in Play mode, the Burst compiler compiles jobs asynchronously. To force synchronous compilation, set the [`CompileSynchronously`](xref:Unity.Burst.BurstCompileAttribute.CompileSynchronously) property to `true`, which compiles your method on the first schedule.
|
||||
|
||||
```c#
|
||||
[BurstCompile(CompileSynchronously = true)]
|
||||
public struct MyJob : IJob
|
||||
{
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
If you don't set this property, on the first call of a job, Burst compiles it asynchronously in the background, and runs a managed C# job in the mean time. This minimizes any frame hitching and keeps the experience responsive.
|
||||
|
||||
However, when you set `CompileSynchronously = true`, no asynchronous compilation can happen. This means that it might take longer for Burst to compile. This pause for compilation affects the current running frame, which means that hitches can happen and it might provide an unresponsive experience for users.
|
||||
|
||||
In general, only use `CompileSynchronously = true` in the following situations:
|
||||
|
||||
* If you have a long running job that only runs once. The performance of the compiled code might outweigh the downsides doing the compilation synchronously.
|
||||
* If you're profiling a Burst job and want to test the code from the Burst compiler. When you do this, perform a warmup to discard any timing measurements from the first call to the job. This is because the profiling data includes the compilation time and skews the result.
|
||||
* To aid with debugging the difference between managed and Burst compiled code.
|
||||
@@ -0,0 +1,99 @@
|
||||
# Compilation warnings
|
||||
|
||||
This page describes common compilation warnings, and how to fix them.
|
||||
|
||||
## IgnoreWarning attribute
|
||||
|
||||
The [`Unity.Burst.CompilerServices.IgnoreWarningAttribute`](xref:Unity.Burst.CompilerServices.IgnoreWarningAttribute) attribute lets you suppress warnings for a specific function that is being compiled from Burst. However, the warnings that the Burst compiler generates are very important to pay attention to, so this attribute should be used sparingly and only when necessary. The sections below describe the specific situations in which you might want to suppress warnings.
|
||||
|
||||
## BC1370
|
||||
|
||||
Warning BC1370 produces the message:
|
||||
|
||||
> An exception was thrown from a function without the correct `[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]` guard...
|
||||
|
||||
This warning happens if Unity encounters a throw in code that `[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]` doesn't guard. In the Editor, thrown exceptions will be caught and logged to the Console, but in a Player build, a `throw` becomes an abort, which crashes your application. Burst warns you about these exceptions, and advises you to place them in functions guarded with `[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]`, because functions guarded with that attribute will not be included in Player builds. However, if you want to purposely throw an exception to crash your application, use the `IgnoreWarningAttribute` to suppress the warnings that Burst provides on the `throw`:
|
||||
|
||||
```c#
|
||||
[IgnoreWarning(1370)]
|
||||
int DoSomethingMaybe(int x)
|
||||
{
|
||||
if (x < 0) throw new Exception("Dang - sorry I crashed your game!");
|
||||
|
||||
return x * x;
|
||||
}
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> This warning is only produced for exceptions that persist into Player builds. Editor-only or debug-only exception throws that aren't compiled into Player builds will not trigger this warning.
|
||||
|
||||
## BC1371
|
||||
|
||||
Warning BC1371 produces the message:
|
||||
|
||||
> A call to the method 'xxx' has been discarded, due to its use as an argument to a discarded method...
|
||||
|
||||
To understand this warning, consider the following example:
|
||||
|
||||
```c#
|
||||
[BurstDiscard]
|
||||
static void DoSomeManagedStuff(int x)
|
||||
{
|
||||
///.. only run when Burst compilation is disabled
|
||||
}
|
||||
|
||||
// A function that computes some result which we need to pass to managed code
|
||||
int BurstCompiledCode(int x,int y)
|
||||
{
|
||||
return y+2*x;
|
||||
}
|
||||
|
||||
[BurstCompile]
|
||||
void BurstMethod()
|
||||
{
|
||||
var myValue = BurstCompiledCode(1,3);
|
||||
DoSomeManagedStuff(myValue);
|
||||
}
|
||||
```
|
||||
|
||||
When Unity compiles your C# code in release mode, it optimizes and removes the local variable `myValue`. This means that Burst receives something like the following code :
|
||||
|
||||
```c#
|
||||
[BurstCompile]
|
||||
void BurstedMethod()
|
||||
{
|
||||
DoSomeManagedStuff(BurstCompiledCode(1,3));
|
||||
}
|
||||
```
|
||||
|
||||
This makes Burst generate the warning, because Burst discards `DoSomeManagedStuff`, along with the `BurstCompiledCode` argument. This means that the `BurstCompiledCode` function is no longer executed, which generates the warning.
|
||||
|
||||
If this isn't what you intended then ensure the variable has multiple uses. For example:
|
||||
|
||||
```c#
|
||||
|
||||
void IsUsed(ref int x)
|
||||
{
|
||||
// Dummy function to prevent removal
|
||||
}
|
||||
|
||||
[BurstCompile]
|
||||
void BurstedMethod()
|
||||
{
|
||||
var myValue = BurstCompiledCode(1,3);
|
||||
DoSomeManagedStuff(myValue);
|
||||
IsUsed(ref myValue);
|
||||
}
|
||||
```
|
||||
|
||||
Alternatively, if you're happy that the code is being discarded correctly, ignore the warning on the `BurstedMethod` like so:
|
||||
|
||||
```c#
|
||||
[IgnoreWarning(1371)]
|
||||
[BurstCompile]
|
||||
void BurstMethod()
|
||||
{
|
||||
var myValue = BurstCompiledCode(1,3);
|
||||
DoSomeManagedStuff(myValue);
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,16 @@
|
||||
# Compilation
|
||||
|
||||
Burst compiles your code in different ways, depending on its context. You can also change the way that the compiler behaves when compiling code.
|
||||
|
||||
|**Topic**|**Description**|
|
||||
|---|---|
|
||||
|[Compilation overview](compilation-overview.md)| Understand the different compilation types.|
|
||||
[Synchronous compilation](compilation-synchronous.md)| Understand synchronous compilation.|
|
||||
|[BurstCompile attribute](compilation-burstcompile.md)|Customize the BurstCompile attribute to improve performance.|
|
||||
|[BurstDiscard attribute](compilation-burstdiscard.md)| Use the BurstDiscard attribute to select which portions of code to compile.|
|
||||
|[Generic jobs](compilation-generic-jobs.md)|Understand how Burst compiles jobs.|
|
||||
|[Compilation warnings](compilation-warnings.md)|Fix common compilation warnings.|
|
||||
|
||||
## Additional resources
|
||||
|
||||
* [C# language support](csharp-language-support.md)
|
||||
@@ -0,0 +1,25 @@
|
||||
# Burst Intrinsics Common class
|
||||
|
||||
The [`Unity.Burst.Intrinsics.Common`](xref:Unity.Burst.Intrinsics.Common) intrinsics are for functionality shared across the hardware targets that Burst supports.
|
||||
|
||||
## Pause
|
||||
|
||||
[`Unity.Burst.Intrinsics.Common.Pause`](xref:Unity.Burst.Intrinsics.Common.Pause) is an intrinsic that requests that the CPU pause the current thread. It maps to `pause` on x86, and `yield` on ARM.
|
||||
|
||||
Use it to stop spin locks over contending on an atomic access, which reduces contention and power on that section of code.
|
||||
|
||||
## Prefetch
|
||||
|
||||
The `Unity.Burst.Intrinsics.Common.Prefetch` is an experimental intrinsic that provides a hint that Burst should prefetch the memory location into the cache.
|
||||
|
||||
Because the intrinsic is experimental, you must use the `UNITY_BURST_EXPERIMENTAL_PREFETCH_INTRINSIC` preprocessor define to get access to it.
|
||||
|
||||
## umul128
|
||||
|
||||
Use the [`Unity.Burst.Intrinsics.Common.umul128`](xref:Unity.Burst.Intrinsics.Common.umul128*) intrinsic to access 128-bit unsigned multiplication. These multiplies are useful for hashing functions. It maps 1:1 with hardware instructions on x86 and ARM targets.
|
||||
|
||||
## InterlockedAnd & InterlockedOr
|
||||
|
||||
The `Unity.Burst.Intrinsics.Common.InterlockedAnd` and `Unity.Burst.Intrinsics.Common.InterlockedOr` are experimental intrinsics that provides atomic and/or operations on `int`, `uint`, `long`, and `ulong` types.
|
||||
|
||||
Because these intrinsics are experimental, you must use the `UNITY_BURST_EXPERIMENTAL_ATOMIC_INTRINSICS` preprocessor define to get access to them.
|
||||
@@ -0,0 +1,29 @@
|
||||
## DllImport and internal calls
|
||||
|
||||
To call native functions, use [`[DllImport]`](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute?view=net-6.0):
|
||||
|
||||
```c#
|
||||
[DllImport("MyNativeLibrary")]
|
||||
public static extern int Foo(int arg);
|
||||
```
|
||||
|
||||
Burst also supports internal calls implemented inside Unity:
|
||||
|
||||
```c#
|
||||
// In UnityEngine.Mathf
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
public static extern int ClosestPowerOfTwo(int value);
|
||||
```
|
||||
|
||||
`DllImport` is only supported for [native plug-ins](https://docs.unity3d.com/Manual/NativePlugins.html), not platform-dependent libraries like `kernel32.dll`.
|
||||
|
||||
For all `DllImport` and internal calls, you can only use the following types as parameter or return types:
|
||||
|
||||
|**Type**|**Supported type**|
|
||||
|---|---|
|
||||
|Built-in and intrinsic types|`byte` / `sbyte`<br/>`short` / `ushort`<br/>`int` / `uint`<br/>`long` / `ulong`<br/>`float`<br/>`double`<br/>`System.IntPtr` / `System.UIntPtr`<br/>`Unity.Burst.Intrinsics.v64` / `Unity.Burst.Intrinsics.v128` / `Unity.Burst.Intrinsics.v256`|
|
||||
|Pointers and references|`sometype*` : Pointer to any of the other types in this list<br/>`ref sometype` : Reference to any of the other types in this list
|
||||
|Handle structs|`unsafe struct MyStruct { void* Ptr; }` : Struct containing a single pointer field<br/>`unsafe struct MyStruct { int Value; }` : Struct containing a single integer field
|
||||
|
||||
> [!NOTE]
|
||||
>Passing structs by value isn't supported; you need to pass them through a pointer or reference. The only exception is that handle structs are supported. These are structs that contain a single field of pointer or integer type.
|
||||
@@ -0,0 +1,255 @@
|
||||
---
|
||||
uid: neon-intrinsics
|
||||
---
|
||||
|
||||
# Burst Arm Neon intrinsics reference
|
||||
|
||||
This page contains an ordered reference for the APIs in [Unity.Burst.Intrinsics.Arm.Neon](xref:Unity.Burst.Intrinsics.Arm.Neon). For information on how to use these, see the documentation on [Processor specific SIMD extensions](csharp-burst-intrinsics-processors.md).
|
||||
|
||||
### Intrinsics type creation and conversion
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vcreate|Create vector|<details><summary>Click here to expand the API list</summary>[vcreate_f16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_f16*)<br/>[vcreate_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_f32*)<br/>[vcreate_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_f64*)<br/>[vcreate_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_s16*)<br/>[vcreate_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_s32*)<br/>[vcreate_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_s64*)<br/>[vcreate_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_s8*)<br/>[vcreate_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_u16*)<br/>[vcreate_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_u32*)<br/>[vcreate_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_u64*)<br/>[vcreate_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcreate_u8*)<br/></details>|
|
||||
|vdup_n|Duplicate (splat) value|<details><summary>Click here to expand the API list</summary>[vdup_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_f32*)<br/>[vdup_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_f64*)<br/>[vdup_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_s16*)<br/>[vdup_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_s32*)<br/>[vdup_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_s64*)<br/>[vdup_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_s8*)<br/>[vdup_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_u16*)<br/>[vdup_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_u32*)<br/>[vdup_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_u64*)<br/>[vdup_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_n_u8*)<br/>[vdupq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_f32*)<br/>[vdupq_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_f64*)<br/>[vdupq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_s16*)<br/>[vdupq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_s32*)<br/>[vdupq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_s64*)<br/>[vdupq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_s8*)<br/>[vdupq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_u16*)<br/>[vdupq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_u32*)<br/>[vdupq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_u64*)<br/>[vdupq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_n_u8*)<br/></details>|
|
||||
|vdup_lane|Duplicate (splat) vector element|<details><summary>Click here to expand the API list</summary>[vdup_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_f32*)<br/>[vdup_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_f64*)<br/>[vdup_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_s16*)<br/>[vdup_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_s32*)<br/>[vdup_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_s64*)<br/>[vdup_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_s8*)<br/>[vdup_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_u16*)<br/>[vdup_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_u32*)<br/>[vdup_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_u64*)<br/>[vdup_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_lane_u8*)<br/>[vdup_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_f32*)<br/>[vdup_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_f64*)<br/>[vdup_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_s16*)<br/>[vdup_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_s32*)<br/>[vdup_laneq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_s64*)<br/>[vdup_laneq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_s8*)<br/>[vdup_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_u16*)<br/>[vdup_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_u32*)<br/>[vdup_laneq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_u64*)<br/>[vdup_laneq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdup_laneq_u8*)<br/>[vdupq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_f32*)<br/>[vdupq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_f64*)<br/>[vdupq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_s16*)<br/>[vdupq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_s32*)<br/>[vdupq_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_s64*)<br/>[vdupq_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_s8*)<br/>[vdupq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_u16*)<br/>[vdupq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_u32*)<br/>[vdupq_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_u64*)<br/>[vdupq_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_lane_u8*)<br/>[vdupq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_f32*)<br/>[vdupq_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_f64*)<br/>[vdupq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_s16*)<br/>[vdupq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_s32*)<br/>[vdupq_laneq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_s64*)<br/>[vdupq_laneq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_s8*)<br/>[vdupq_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_u16*)<br/>[vdupq_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_u32*)<br/>[vdupq_laneq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_u64*)<br/>[vdupq_laneq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupq_laneq_u8*)<br/>[vdups_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdups_lane_f32*)<br/>[vdups_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdups_lane_s32*)<br/>[vdups_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdups_lane_u32*)<br/>[vdups_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdups_laneq_f32*)<br/>[vdups_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdups_laneq_s32*)<br/>[vdups_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdups_laneq_u32*)<br/>[vdupb_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupb_lane_s8*)<br/>[vdupb_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupb_lane_u8*)<br/>[vdupb_laneq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupb_laneq_s8*)<br/>[vdupb_laneq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupb_laneq_u8*)<br/>[vdupd_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupd_lane_f64*)<br/>[vdupd_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupd_lane_s64*)<br/>[vdupd_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupd_lane_u64*)<br/>[vdupd_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupd_laneq_f64*)<br/>[vdupd_laneq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupd_laneq_s64*)<br/>[vdupd_laneq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdupd_laneq_u64*)<br/>[vduph_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vduph_lane_s16*)<br/>[vduph_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vduph_lane_u16*)<br/>[vduph_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vduph_laneq_s16*)<br/>[vduph_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vduph_laneq_u16*)<br/></details>|
|
||||
|vmov_n|Duplicate (splat) value|<details><summary>Click here to expand the API list</summary>[vmov_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_f32*)<br/>[vmov_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_f64*)<br/>[vmov_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_s16*)<br/>[vmov_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_s32*)<br/>[vmov_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_s64*)<br/>[vmov_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_s8*)<br/>[vmov_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_u16*)<br/>[vmov_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_u32*)<br/>[vmov_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_u64*)<br/>[vmov_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmov_n_u8*)<br/>[vmovq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_f32*)<br/>[vmovq_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_f64*)<br/>[vmovq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_s16*)<br/>[vmovq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_s32*)<br/>[vmovq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_s64*)<br/>[vmovq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_s8*)<br/>[vmovq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_u16*)<br/>[vmovq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_u32*)<br/>[vmovq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_u64*)<br/>[vmovq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovq_n_u8*)<br/></details>|
|
||||
|vcopy_lane|Insert vector element from another vector element|<details><summary>Click here to expand the API list</summary>[vcopy_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_f32*)<br/>[vcopy_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_f64*)<br/>[vcopy_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_s16*)<br/>[vcopy_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_s32*)<br/>[vcopy_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_s64*)<br/>[vcopy_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_s8*)<br/>[vcopy_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_u16*)<br/>[vcopy_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_u32*)<br/>[vcopy_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_u64*)<br/>[vcopy_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_lane_u8*)<br/>[vcopy_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_f32*)<br/>[vcopy_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_f64*)<br/>[vcopy_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_s16*)<br/>[vcopy_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_s32*)<br/>[vcopy_laneq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_s64*)<br/>[vcopy_laneq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_s8*)<br/>[vcopy_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_u16*)<br/>[vcopy_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_u32*)<br/>[vcopy_laneq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_u64*)<br/>[vcopy_laneq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopy_laneq_u8*)<br/>[vcopyq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_f32*)<br/>[vcopyq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_f64*)<br/>[vcopyq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_s16*)<br/>[vcopyq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_s32*)<br/>[vcopyq_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_s64*)<br/>[vcopyq_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_s8*)<br/>[vcopyq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_u16*)<br/>[vcopyq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_u32*)<br/>[vcopyq_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_u64*)<br/>[vcopyq_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_lane_u8*)<br/>[vcopyq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_f32*)<br/>[vcopyq_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_f64*)<br/>[vcopyq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_s16*)<br/>[vcopyq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_s32*)<br/>[vcopyq_laneq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_s64*)<br/>[vcopyq_laneq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_s8*)<br/>[vcopyq_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_u16*)<br/>[vcopyq_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_u32*)<br/>[vcopyq_laneq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_u64*)<br/>[vcopyq_laneq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcopyq_laneq_u8*)<br/></details>|
|
||||
|vcombine|Join two vectors into a larger vector|<details><summary>Click here to expand the API list</summary>[vcombine_f16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_f16*)<br/>[vcombine_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_f32*)<br/>[vcombine_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_f64*)<br/>[vcombine_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_s16*)<br/>[vcombine_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_s32*)<br/>[vcombine_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_s64*)<br/>[vcombine_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_s8*)<br/>[vcombine_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_u16*)<br/>[vcombine_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_u32*)<br/>[vcombine_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_u64*)<br/>[vcombine_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcombine_u8*)<br/></details>|
|
||||
|vget_high|Get the higher half of the vector|<details><summary>Click here to expand the API list</summary>[vget_high_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_f32*)<br/>[vget_high_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_f64*)<br/>[vget_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_s16*)<br/>[vget_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_s32*)<br/>[vget_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_s64*)<br/>[vget_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_s8*)<br/>[vget_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_u16*)<br/>[vget_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_u32*)<br/>[vget_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_u64*)<br/>[vget_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_high_u8*)<br/></details>|
|
||||
|vget_low|Get the lower half of the vector|<details><summary>Click here to expand the API list</summary>[vget_low_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_f32*)<br/>[vget_low_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_f64*)<br/>[vget_low_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_s16*)<br/>[vget_low_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_s32*)<br/>[vget_low_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_s64*)<br/>[vget_low_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_s8*)<br/>[vget_low_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_u16*)<br/>[vget_low_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_u32*)<br/>[vget_low_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_u64*)<br/>[vget_low_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_low_u8*)<br/></details>|
|
||||
|
||||
### Arithmetic
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vadd|Add|<details><summary>Click here to expand the API list</summary>[vadd_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_f32*)<br/>[vadd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_f64*)<br/>[vadd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_s16*)<br/>[vadd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_s32*)<br/>[vadd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_s64*)<br/>[vadd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_s8*)<br/>[vadd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_u16*)<br/>[vadd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_u32*)<br/>[vadd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_u64*)<br/>[vadd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vadd_u8*)<br/>[vaddq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_f32*)<br/>[vaddq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_f64*)<br/>[vaddq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_s16*)<br/>[vaddq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_s32*)<br/>[vaddq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_s64*)<br/>[vaddq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_s8*)<br/>[vaddq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_u16*)<br/>[vaddq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_u32*)<br/>[vaddq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_u64*)<br/>[vaddq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddq_u8*)<br/>[vaddd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddd_s64*)<br/>[vaddd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddd_u64*)<br/></details>|
|
||||
|vaddv|Add across vector|<details><summary>Click here to expand the API list</summary>[vaddv_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_f32*)<br/>[vaddv_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_s16*)<br/>[vaddv_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_s32*)<br/>[vaddv_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_s8*)<br/>[vaddv_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_u16*)<br/>[vaddv_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_u32*)<br/>[vaddv_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddv_u8*)<br/>[vaddvq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_f32*)<br/>[vaddvq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_f64*)<br/>[vaddvq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_s16*)<br/>[vaddvq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_s32*)<br/>[vaddvq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_s64*)<br/>[vaddvq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_s8*)<br/>[vaddvq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_u16*)<br/>[vaddvq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_u32*)<br/>[vaddvq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_u64*)<br/>[vaddvq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddvq_u8*)<br/></details>|
|
||||
|vaddl|Add long|<details><summary>Click here to expand the API list</summary>[vaddl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_s16*)<br/>[vaddl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_s32*)<br/>[vaddl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_s8*)<br/>[vaddl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_u16*)<br/>[vaddl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_u32*)<br/>[vaddl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_u8*)<br/>[vaddl_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_high_s16*)<br/>[vaddl_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_high_s32*)<br/>[vaddl_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_high_s8*)<br/>[vaddl_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_high_u16*)<br/>[vaddl_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_high_u32*)<br/>[vaddl_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddl_high_u8*)<br/></details>|
|
||||
|vaddlv|Add long across Vector|<details><summary>Click here to expand the API list</summary>[vaddlv_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlv_s16*)<br/>[vaddlv_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlv_s32*)<br/>[vaddlv_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlv_s8*)<br/>[vaddlv_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlv_u16*)<br/>[vaddlv_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlv_u32*)<br/>[vaddlv_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlv_u8*)<br/>[vaddlvq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlvq_s16*)<br/>[vaddlvq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlvq_s32*)<br/>[vaddlvq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlvq_s8*)<br/>[vaddlvq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlvq_u16*)<br/>[vaddlvq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlvq_u32*)<br/>[vaddlvq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddlvq_u8*)<br/></details>|
|
||||
|vaddw|Add wide|<details><summary>Click here to expand the API list</summary>[vaddw_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_s16*)<br/>[vaddw_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_s32*)<br/>[vaddw_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_s8*)<br/>[vaddw_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_u16*)<br/>[vaddw_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_u32*)<br/>[vaddw_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_u8*)<br/>[vaddw_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_high_s16*)<br/>[vaddw_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_high_s32*)<br/>[vaddw_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_high_s8*)<br/>[vaddw_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_high_u16*)<br/>[vaddw_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_high_u32*)<br/>[vaddw_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddw_high_u8*)<br/></details>|
|
||||
|vhadd|Halving add|<details><summary>Click here to expand the API list</summary>[vhadd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhadd_s16*)<br/>[vhadd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhadd_s32*)<br/>[vhadd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhadd_s8*)<br/>[vhadd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhadd_u16*)<br/>[vhadd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhadd_u32*)<br/>[vhadd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhadd_u8*)<br/>[vhaddq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhaddq_s16*)<br/>[vhaddq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhaddq_s32*)<br/>[vhaddq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhaddq_s8*)<br/>[vhaddq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhaddq_u16*)<br/>[vhaddq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhaddq_u32*)<br/>[vhaddq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhaddq_u8*)<br/></details>|
|
||||
|vrhadd|Rounding halving add|<details><summary>Click here to expand the API list</summary>[vrhadd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhadd_s16*)<br/>[vrhadd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhadd_s32*)<br/>[vrhadd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhadd_s8*)<br/>[vrhadd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhadd_u16*)<br/>[vrhadd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhadd_u32*)<br/>[vrhadd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhadd_u8*)<br/>[vrhaddq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhaddq_s16*)<br/>[vrhaddq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhaddq_s32*)<br/>[vrhaddq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhaddq_s8*)<br/>[vrhaddq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhaddq_u16*)<br/>[vrhaddq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhaddq_u32*)<br/>[vrhaddq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrhaddq_u8*)<br/></details>|
|
||||
|vqadd|Saturating add|<details><summary>Click here to expand the API list</summary>[vqadd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_s16*)<br/>[vqadd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_s32*)<br/>[vqadd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_s64*)<br/>[vqadd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_s8*)<br/>[vqadd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_u16*)<br/>[vqadd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_u32*)<br/>[vqadd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_u64*)<br/>[vqadd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadd_u8*)<br/>[vqaddq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_s16*)<br/>[vqaddq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_s32*)<br/>[vqaddq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_s64*)<br/>[vqaddq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_s8*)<br/>[vqaddq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_u16*)<br/>[vqaddq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_u32*)<br/>[vqaddq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_u64*)<br/>[vqaddq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddq_u8*)<br/>[vqaddb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddb_s8*)<br/>[vqaddb_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddb_u8*)<br/>[vqaddh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddh_s16*)<br/>[vqaddh_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddh_u16*)<br/>[vqadds_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadds_s32*)<br/>[vqadds_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqadds_u32*)<br/>[vqaddd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddd_s64*)<br/>[vqaddd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqaddd_u64*)<br/></details>|
|
||||
|vsqadd|Unsigned saturating Accumulate of signed value|<details><summary>Click here to expand the API list</summary>[vsqadd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqadd_u16*)<br/> [vsqadd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqadd_u32*)<br/> [vsqadd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqadd_u64*)<br/> [vsqadd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqadd_u8*)<br/> [vsqaddq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddq_u16*)<br/> [vsqaddq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddq_u32*)<br/> [vsqaddq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddq_u64*)<br/> [vsqaddq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddq_u8*)<br/> [vsqaddb_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddb_u8*)<br/> [vsqaddh_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddh_u16*)<br/> [vsqadds_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqadds_u32*)<br/> [vsqaddd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqaddd_u64*)<br/></details>|
|
||||
|vuqadd|Signed saturating Accumulate of unsigned value|<details><summary>Click here to expand the API list</summary>[vuqadd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqadd_s16*)<br/> [vuqadd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqadd_s32*)<br/> [vuqadd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqadd_s64*)<br/> [vuqadd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqadd_s8*)<br/> [vuqaddq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddq_s16*)<br/> [vuqaddq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddq_s32*)<br/> [vuqaddq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddq_s64*)<br/> [vuqaddq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddq_s8*)<br/> [vuqaddb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddb_s8*)<br/> [vuqaddh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddh_s16*)<br/> [vuqadds_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqadds_s32*)<br/> [vuqaddd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuqaddd_s64*)<br/></details>|
|
||||
|vaddhn|Add returning high narrow|<details><summary>Click here to expand the API list</summary>[vaddhn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_s16*)<br/>[vaddhn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_s32*)<br/>[vaddhn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_s64*)<br/>[vaddhn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_u16*)<br/>[vaddhn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_u32*)<br/>[vaddhn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_u64*)<br/>[vaddhn_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_high_s16*)<br/>[vaddhn_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_high_s32*)<br/>[vaddhn_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_high_s64*)<br/>[vaddhn_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_high_u16*)<br/>[vaddhn_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_high_u32*)<br/>[vaddhn_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vaddhn_high_u64*)<br/></details>|
|
||||
|vraddhn|Rounding add returning high narrow|<details><summary>Click here to expand the API list</summary>[vraddhn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_s16*)<br/>[vraddhn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_s32*)<br/>[vraddhn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_s64*)<br/>[vraddhn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_u16*)<br/>[vraddhn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_u32*)<br/>[vraddhn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_u64*)<br/>[vraddhn_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_high_s16*)<br/>[vraddhn_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_high_s32*)<br/>[vraddhn_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_high_s64*)<br/>[vraddhn_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_high_u16*)<br/>[vraddhn_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_high_u32*)<br/>[vraddhn_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vraddhn_high_u64*)<br/></details>|
|
||||
|vpadd|Add pairwise (vector)|<details><summary>Click here to expand the API list</summary>[vpadd_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_f32*)<br/>[vpadd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_s16*)<br/>[vpadd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_s32*)<br/>[vpadd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_s8*)<br/>[vpadd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_u16*)<br/>[vpadd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_u32*)<br/>[vpadd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadd_u8*)<br/>[vpaddq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_f32*)<br/>[vpaddq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_f64*)<br/>[vpaddq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_s16*)<br/>[vpaddq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_s32*)<br/>[vpaddq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_s64*)<br/>[vpaddq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_s8*)<br/>[vpaddq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_u16*)<br/>[vpaddq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_u32*)<br/>[vpaddq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_u64*)<br/>[vpaddq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddq_u8*)<br/>[vpadds_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadds_f32*)<br/>[vpaddd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddd_f64*)<br/>[vpaddd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddd_s64*)<br/>[vpaddd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddd_u64*)<br/></details>|
|
||||
|vpaddl|Signed add long pairwise|<details><summary>Click here to expand the API list</summary>[vpaddl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddl_s16*)<br/>[vpaddl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddl_s32*)<br/>[vpaddl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddl_s8*)<br/>[vpaddl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddl_u16*)<br/>[vpaddl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddl_u32*)<br/>[vpaddl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddl_u8*)<br/>[vpaddlq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddlq_s16*)<br/>[vpaddlq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddlq_s32*)<br/>[vpaddlq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddlq_s8*)<br/>[vpaddlq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddlq_u16*)<br/>[vpaddlq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddlq_u32*)<br/>[vpaddlq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpaddlq_u8*)<br/></details>|
|
||||
|vpadal|Signed add and accumulate long pairwise|<details><summary>Click here to expand the API list</summary>[vpadal_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadal_s16*)<br/>[vpadal_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadal_s32*)<br/>[vpadal_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadal_s8*)<br/>[vpadal_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadal_u16*)<br/>[vpadal_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadal_u32*)<br/>[vpadal_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadal_u8*)<br/>[vpadalq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadalq_s16*)<br/>[vpadalq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadalq_s32*)<br/>[vpadalq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadalq_s8*)<br/>[vpadalq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadalq_u16*)<br/>[vpadalq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadalq_u32*)<br/>[vpadalq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpadalq_u8*)<br/></details>|
|
||||
|vsub|Subtract|<details><summary>Click here to expand the API list</summary>[vsub_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_f32*)<br/>[vsub_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_f64*)<br/>[vsub_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_s16*)<br/>[vsub_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_s32*)<br/>[vsub_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_s64*)<br/>[vsub_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_s8*)<br/>[vsub_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_u16*)<br/>[vsub_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_u32*)<br/>[vsub_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_u64*)<br/>[vsub_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsub_u8*)<br/>[vsubq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_f32*)<br/>[vsubq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_f64*)<br/>[vsubq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_s16*)<br/>[vsubq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_s32*)<br/>[vsubq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_s64*)<br/>[vsubq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_s8*)<br/>[vsubq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_u16*)<br/>[vsubq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_u32*)<br/>[vsubq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_u64*)<br/>[vsubq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubq_u8*)<br/>[vsubd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubd_s64*)<br/>[vsubd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubd_u64*)<br/></details>|
|
||||
|vsubl|Subtract long|<details><summary>Click here to expand the API list</summary>[vsubl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_s16*)<br/>[vsubl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_s32*)<br/>[vsubl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_s8*)<br/>[vsubl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_u16*)<br/>[vsubl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_u32*)<br/>[vsubl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_u8*)<br/>[vsubl_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_high_s16*)<br/>[vsubl_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_high_s32*)<br/>[vsubl_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_high_s8*)<br/>[vsubl_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_high_u16*)<br/>[vsubl_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_high_u32*)<br/>[vsubl_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubl_high_u8*)<br/></details>|
|
||||
|vsubw|Subtract wide|<details><summary>Click here to expand the API list</summary>[vsubw_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_s16*)<br/>[vsubw_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_s32*)<br/>[vsubw_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_s8*)<br/>[vsubw_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_u16*)<br/>[vsubw_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_u32*)<br/>[vsubw_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_u8*)<br/>[vsubw_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_high_s16*)<br/>[vsubw_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_high_s32*)<br/>[vsubw_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_high_s8*)<br/>[vsubw_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_high_u16*)<br/>[vsubw_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_high_u32*)<br/>[vsubw_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubw_high_u8*)<br/></details>|
|
||||
|vhsub|Halving subtract|<details><summary>Click here to expand the API list</summary>[vhsub_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsub_s16*)<br/>[vhsub_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsub_s32*)<br/>[vhsub_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsub_s8*)<br/>[vhsub_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsub_u16*)<br/>[vhsub_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsub_u32*)<br/>[vhsub_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsub_u8*)<br/>[vhsubq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsubq_s16*)<br/>[vhsubq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsubq_s32*)<br/>[vhsubq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsubq_s8*)<br/>[vhsubq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsubq_u16*)<br/>[vhsubq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsubq_u32*)<br/>[vhsubq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vhsubq_u8*)<br/></details>|
|
||||
|vqsub|Saturating subtract|<details><summary>Click here to expand the API list</summary>[vqsub_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_s16*)<br/> [vqsub_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_s32*)<br/> [vqsub_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_s64*)<br/> [vqsub_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_s8*)<br/> [vqsub_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_u16*)<br/> [vqsub_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_u32*)<br/> [vqsub_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_u64*)<br/> [vqsub_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsub_u8*)<br/> [vqsubq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_s16*)<br/> [vqsubq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_s32*)<br/> [vqsubq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_s64*)<br/> [vqsubq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_s8*)<br/> [vqsubq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_u16*)<br/> [vqsubq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_u32*)<br/> [vqsubq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_u64*)<br/> [vqsubq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubq_u8*)<br/> [vqsubb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubb_s8*)<br/> [vqsubb_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubb_u8*)<br/> [vqsubh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubh_s16*)<br/> [vqsubh_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubh_u16*)<br/> [vqsubs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubs_s32*)<br/> [vqsubs_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubs_u32*)<br/> [vqsubd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubd_s64*)<br/> [vqsubd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqsubd_u64*)<br/></details>|
|
||||
|vsubhn|Subtract returning high narrow|<details><summary>Click here to expand the API list</summary>[vsubhn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_s16*)<br/>[vsubhn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_s32*)<br/>[vsubhn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_s64*)<br/>[vsubhn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_u16*)<br/>[vsubhn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_u32*)<br/>[vsubhn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_u64*)<br/>[vsubhn_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_high_s16*)<br/>[vsubhn_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_high_s32*)<br/>[vsubhn_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_high_s64*)<br/>[vsubhn_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_high_u16*)<br/>[vsubhn_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_high_u32*)<br/>[vsubhn_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsubhn_high_u64*)<br/></details>|
|
||||
|vrsubhn|Rounding subtract returning high narrow|<details><summary>Click here to expand the API list</summary>[vrsubhn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_s16*)<br/>[vrsubhn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_s32*)<br/>[vrsubhn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_s64*)<br/>[vrsubhn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_u16*)<br/>[vrsubhn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_u32*)<br/>[vrsubhn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_u64*)<br/>[vrsubhn_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_high_s16*)<br/>[vrsubhn_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_high_s32*)<br/>[vrsubhn_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_high_s64*)<br/>[vrsubhn_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_high_u16*)<br/>[vrsubhn_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_high_u32*)<br/>[vrsubhn_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsubhn_high_u64*)<br/></details>|
|
||||
|
||||
### Multiply
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vmul|Multiply (vector)|<details><summary>Click here to expand the API list</summary>[vmul_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_f32*)<br/>[vmul_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_f64*)<br/>[vmul_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_s16*)<br/>[vmul_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_s32*)<br/>[vmul_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_s8*)<br/>[vmul_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_u16*)<br/>[vmul_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_u32*)<br/>[vmul_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_u8*)<br/>[vmulq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_f32*)<br/>[vmulq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_f64*)<br/>[vmulq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_s16*)<br/>[vmulq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_s32*)<br/>[vmulq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_s8*)<br/>[vmulq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_u16*)<br/>[vmulq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_u32*)<br/>[vmulq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_u8*)<br/></details>|
|
||||
|vmul_n|Vector multiply by scalar|<details><summary>Click here to expand the API list</summary>[vmul_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_n_f32*)<br/>[vmul_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_n_f64*)<br/>[vmul_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_n_s16*)<br/>[vmul_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_n_s32*)<br/>[vmul_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_n_u16*)<br/>[vmul_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_n_u32*)<br/>[vmulq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_n_f32*)<br/>[vmulq_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_n_f64*)<br/>[vmulq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_n_s16*)<br/>[vmulq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_n_s32*)<br/>[vmulq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_n_u16*)<br/>[vmulq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_n_u32*)<br/></details>|
|
||||
|vmul_lane|Multiply (vector)|<details><summary>Click here to expand the API list</summary>[vmul_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_lane_f32*)<br/>[vmul_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_lane_f64*)<br/>[vmul_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_lane_s16*)<br/>[vmul_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_lane_s32*)<br/>[vmul_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_lane_u16*)<br/>[vmul_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_lane_u32*)<br/>[vmul_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_laneq_f32*)<br/>[vmul_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_laneq_f64*)<br/>[vmul_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_laneq_s16*)<br/>[vmul_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_laneq_s32*)<br/>[vmul_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_laneq_u16*)<br/>[vmul_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmul_laneq_u32*)<br/>[vmulq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_lane_f32*)<br/>[vmulq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_lane_f64*)<br/>[vmulq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_lane_s16*)<br/>[vmulq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_lane_s32*)<br/>[vmulq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_lane_u16*)<br/>[vmulq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_lane_u32*)<br/>[vmulq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_laneq_f32*)<br/>[vmulq_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_laneq_f64*)<br/>[vmulq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_laneq_s16*)<br/>[vmulq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_laneq_s32*)<br/>[vmulq_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_laneq_u16*)<br/>[vmulq_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulq_laneq_u32*)<br/>[vmuls_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmuls_lane_f32*)<br/>[vmuls_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmuls_laneq_f32*)<br/>[vmuld_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmuld_lane_f64*)<br/>[vmuld_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmuld_laneq_f64*)<br/></details>|
|
||||
|vmull|Multiply long (vector)|<details><summary>Click here to expand the API list</summary>[vmull_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_s16*)<br/>[vmull_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_s32*)<br/>[vmull_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_s8*)<br/>[vmull_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_u16*)<br/>[vmull_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_u32*)<br/>[vmull_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_u8*)<br/>[vmull_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_s16*)<br/>[vmull_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_s32*)<br/>[vmull_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_s8*)<br/>[vmull_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_u16*)<br/>[vmull_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_u32*)<br/>[vmull_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_u8*)<br/></details>|
|
||||
|vmull_n|Vector long multiply by scalar|<details><summary>Click here to expand the API list</summary>[vmull_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_n_s16*)<br/>[vmull_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_n_s32*)<br/>[vmull_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_n_u16*)<br/>[vmull_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_n_u32*)<br/>[vmull_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_n_s16*)<br/>[vmull_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_n_s32*)<br/>[vmull_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_n_u16*)<br/>[vmull_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_n_u32*)<br/></details>|
|
||||
|vmull_lane|Multiply long (vector)|<details><summary>Click here to expand the API list</summary>[vmull_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_lane_s16*)<br/>[vmull_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_lane_s32*)<br/>[vmull_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_lane_u16*)<br/>[vmull_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_lane_u32*)<br/>[vmull_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_laneq_s16*)<br/>[vmull_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_laneq_s32*)<br/>[vmull_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_laneq_u16*)<br/>[vmull_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_laneq_u32*)<br/>[vmull_high_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_lane_s16*)<br/>[vmull_high_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_lane_s32*)<br/>[vmull_high_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_lane_u16*)<br/>[vmull_high_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_lane_u32*)<br/>[vmull_high_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_laneq_s16*)<br/>[vmull_high_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_laneq_s32*)<br/>[vmull_high_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_laneq_u16*)<br/>[vmull_high_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmull_high_laneq_u32*)<br/></details>|
|
||||
|vmulx|Floating-point multiply extended|<details><summary>Click here to expand the API list</summary>[vmulx_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulx_f32*)<br/>[vmulx_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulx_f64*)<br/>[vmulx_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulx_lane_f32*)<br/>[vmulx_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulx_lane_f64*)<br/>[vmulx_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulx_laneq_f32*)<br/>[vmulx_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulx_laneq_f64*)<br/>[vmulxq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxq_f32*)<br/>[vmulxq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxq_f64*)<br/>[vmulxq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxq_lane_f32*)<br/>[vmulxq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxq_lane_f64*)<br/>[vmulxq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxq_laneq_f32*)<br/>[vmulxq_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxq_laneq_f64*)<br/>[vmulxs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxs_f32*)<br/>[vmulxs_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxs_lane_f32*)<br/>[vmulxs_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxs_laneq_f32*)<br/>[vmulxd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxd_f64*)<br/>[vmulxd_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxd_lane_f64*)<br/>[vmulxd_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmulxd_laneq_f64*)<br/></details>|
|
||||
|vmla|Multiply-add to accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vmla_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_f32*)<br/>[vmla_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_f64*)<br/>[vmla_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_s16*)<br/>[vmla_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_s32*)<br/>[vmla_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_s8*)<br/>[vmla_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_u16*)<br/>[vmla_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_u32*)<br/>[vmla_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_u8*)<br/>[vmlaq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_f32*)<br/>[vmlaq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_f64*)<br/>[vmlaq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_s16*)<br/>[vmlaq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_s32*)<br/>[vmlaq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_s8*)<br/>[vmlaq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_u16*)<br/>[vmlaq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_u32*)<br/>[vmlaq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_u8*)<br/></details>|
|
||||
|vmla_lane|Vector multiply accumulate with scalar|<details><summary>Click here to expand the API list</summary>[vmla_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_lane_f32*)<br/>[vmla_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_lane_s16*)<br/>[vmla_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_lane_s32*)<br/>[vmla_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_lane_u16*)<br/>[vmla_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_lane_u32*)<br/>[vmla_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_laneq_f32*)<br/>[vmla_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_laneq_s16*)<br/>[vmla_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_laneq_s32*)<br/>[vmla_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_laneq_u16*)<br/>[vmla_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_laneq_u32*)<br/>[vmlaq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_lane_f32*)<br/>[vmlaq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_lane_s16*)<br/>[vmlaq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_lane_s32*)<br/>[vmlaq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_lane_u16*)<br/>[vmlaq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_lane_u32*)<br/>[vmlaq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_laneq_f32*)<br/>[vmlaq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_laneq_s16*)<br/>[vmlaq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_laneq_s32*)<br/>[vmlaq_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_laneq_u16*)<br/>[vmlaq_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_laneq_u32*)<br/></details>|
|
||||
|vmla_n|Vector multiply accumulate with scalar|<details><summary>Click here to expand the API list</summary>[vmla_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_n_f32*)<br/>[vmla_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_n_s16*)<br/>[vmla_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_n_s32*)<br/>[vmla_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_n_u16*)<br/>[vmla_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmla_n_u32*)<br/>[vmlaq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_n_f32*)<br/>[vmlaq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_n_s16*)<br/>[vmlaq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_n_s32*)<br/>[vmlaq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_n_u16*)<br/>[vmlaq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlaq_n_u32*)<br/></details>|
|
||||
|vmlal|Multiply-accumulate long (vector)|<details><summary>Click here to expand the API list</summary>[vmlal_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_s16*)<br/>[vmlal_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_s32*)<br/>[vmlal_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_s8*)<br/>[vmlal_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_u16*)<br/>[vmlal_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_u32*)<br/>[vmlal_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_u8*)<br/>[vmlal_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_s16*)<br/>[vmlal_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_s32*)<br/>[vmlal_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_s8*)<br/>[vmlal_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_u16*)<br/>[vmlal_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_u32*)<br/>[vmlal_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_u8*)<br/></details>|
|
||||
|vmlal_lane|Multiply-accumulate long with scalar|<details><summary>Click here to expand the API list</summary>[vmlal_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_lane_s16*)<br/>[vmlal_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_lane_s32*)<br/>[vmlal_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_lane_u16*)<br/>[vmlal_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_lane_u32*)<br/>[vmlal_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_laneq_s16*)<br/>[vmlal_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_laneq_s32*)<br/>[vmlal_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_laneq_u16*)<br/>[vmlal_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_laneq_u32*)<br/>[vmlal_high_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_lane_s16*)<br/>[vmlal_high_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_lane_s32*)<br/>[vmlal_high_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_lane_u16*)<br/>[vmlal_high_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_lane_u32*)<br/>[vmlal_high_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_laneq_s16*)<br/>[vmlal_high_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_laneq_s32*)<br/>[vmlal_high_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_laneq_u16*)<br/>[vmlal_high_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_laneq_u32*)<br/></details>|
|
||||
|vmlal_n|Multiply-accumulate long with scalar|<details><summary>Click here to expand the API list</summary>[vmlal_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_n_s16*)<br/>[vmlal_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_n_s32*)<br/>[vmlal_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_n_u16*)<br/>[vmlal_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_n_u32*)<br/>[vmlal_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_n_s16*)<br/>[vmlal_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_n_s32*)<br/>[vmlal_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_n_u16*)<br/>[vmlal_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlal_high_n_u32*)<br/></details>|
|
||||
|vmls|Multiply-subtract from accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vmls_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_f32*)<br/>[vmls_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_f64*)<br/>[vmls_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_s16*)<br/>[vmls_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_s32*)<br/>[vmls_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_s8*)<br/>[vmls_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_u16*)<br/>[vmls_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_u32*)<br/>[vmls_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_u8*)<br/>[vmlsq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_f32*)<br/>[vmlsq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_f64*)<br/>[vmlsq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_s16*)<br/>[vmlsq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_s32*)<br/>[vmlsq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_s8*)<br/>[vmlsq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_u16*)<br/>[vmlsq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_u32*)<br/>[vmlsq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_u8*)<br/></details>|
|
||||
|vmls_lane|Vector multiply subtract with scalar|<details><summary>Click here to expand the API list</summary>[vmls_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_lane_f32*)<br/>[vmls_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_lane_s16*)<br/>[vmls_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_lane_s32*)<br/>[vmls_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_lane_u16*)<br/>[vmls_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_lane_u32*)<br/>[vmls_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_laneq_f32*)<br/>[vmls_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_laneq_s16*)<br/>[vmls_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_laneq_s32*)<br/>[vmls_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_laneq_u16*)<br/>[vmls_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_laneq_u32*)<br/>[vmlsq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_lane_f32*)<br/>[vmlsq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_lane_s16*)<br/>[vmlsq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_lane_s32*)<br/>[vmlsq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_lane_u16*)<br/>[vmlsq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_lane_u32*)<br/>[vmlsq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_laneq_f32*)<br/>[vmlsq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_laneq_s16*)<br/>[vmlsq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_laneq_s32*)<br/>[vmlsq_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_laneq_u16*)<br/>[vmlsq_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_laneq_u32*)<br/></details>|
|
||||
|vmls_n|Vector multiply subtract with scalar|<details><summary>Click here to expand the API list</summary>[vmls_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_n_f32*)<br/>[vmls_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_n_s16*)<br/>[vmls_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_n_s32*)<br/>[vmls_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_n_u16*)<br/>[vmls_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmls_n_u32*)<br/>[vmlsq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_n_f32*)<br/>[vmlsq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_n_s16*)<br/>[vmlsq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_n_s32*)<br/>[vmlsq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_n_u16*)<br/>[vmlsq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsq_n_u32*)<br/></details>|
|
||||
|vmlsl|Multiply-subtract long (vector)|<details><summary>Click here to expand the API list</summary>[vmlsl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_s16*)<br/>[vmlsl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_s32*)<br/>[vmlsl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_s8*)<br/>[vmlsl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_u16*)<br/>[vmlsl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_u32*)<br/>[vmlsl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_u8*)<br/>[vmlsl_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_s16*)<br/>[vmlsl_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_s32*)<br/>[vmlsl_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_s8*)<br/>[vmlsl_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_u16*)<br/>[vmlsl_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_u32*)<br/>[vmlsl_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_u8*)<br/></details>|
|
||||
|vmlsl_lane|Vector multiply-subtract long with scalar|<details><summary>Click here to expand the API list</summary>[vmlsl_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_lane_s16*)<br/>[vmlsl_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_lane_s32*)<br/>[vmlsl_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_lane_u16*)<br/>[vmlsl_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_lane_u32*)<br/>[vmlsl_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_laneq_s16*)<br/>[vmlsl_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_laneq_s32*)<br/>[vmlsl_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_laneq_u16*)<br/>[vmlsl_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_laneq_u32*)<br/>[vmlsl_high_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_lane_s16*)<br/>[vmlsl_high_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_lane_s32*)<br/>[vmlsl_high_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_lane_u16*)<br/>[vmlsl_high_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_lane_u32*)<br/>[vmlsl_high_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_laneq_s16*)<br/>[vmlsl_high_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_laneq_s32*)<br/>[vmlsl_high_laneq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_laneq_u16*)<br/>[vmlsl_high_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_laneq_u32*)<br/></details>|
|
||||
|vmlsl_n|Vector multiply-subtract long with scalar|<details><summary>Click here to expand the API list</summary>[vmlsl_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_n_s16*)<br/>[vmlsl_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_n_s32*)<br/>[vmlsl_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_n_u16*)<br/>[vmlsl_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_n_u32*)<br/>[vmlsl_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_n_s16*)<br/>[vmlsl_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_n_s32*)<br/>[vmlsl_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_n_u16*)<br/>[vmlsl_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmlsl_high_n_u32*)<br/></details>|
|
||||
|vqdmull|Signed saturating doubling multiply long|<details><summary>Click here to expand the API list</summary>[vqdmull_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_s16*)<br/>[vqdmull_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_s32*)<br/>[vqdmullh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmullh_s16*)<br/>[vqdmulls_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulls_s32*)<br/>[vqdmull_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_s16*)<br/>[vqdmull_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_s32*)<br/></details>|
|
||||
|vqdmull_lane|Vector saturating doubling multiply long with scalar|<details><summary>Click here to expand the API list</summary>[vqdmull_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_lane_s16*)<br/>[vqdmull_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_lane_s32*)<br/>[vqdmull_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_laneq_s16*)<br/>[vqdmull_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_laneq_s32*)<br/>[vqdmullh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmullh_lane_s16*)<br/>[vqdmullh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmullh_laneq_s16*)<br/>[vqdmulls_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulls_lane_s32*)<br/>[vqdmulls_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulls_laneq_s32*)<br/>[vqdmull_high_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_lane_s16*)<br/>[vqdmull_high_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_lane_s32*)<br/>[vqdmull_high_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_laneq_s16*)<br/>[vqdmull_high_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_laneq_s32*)<br/></details>|
|
||||
|vqdmull_n|Vector saturating doubling multiply long with scalar|<details><summary>Click here to expand the API list</summary>[vqdmull_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_n_s16*)<br/>[vqdmull_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_n_s32*)<br/>[vqdmull_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_n_s16*)<br/>[vqdmull_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmull_high_n_s32*)<br/></details>|
|
||||
|vqdmulh|Saturating doubling multiply returning high half|<details><summary>Click here to expand the API list</summary>[vqdmulh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_s16*)<br/>[vqdmulh_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_s32*)<br/>[vqdmulhq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_s16*)<br/>[vqdmulhq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_s32*)<br/>[vqdmulhh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhh_s16*)<br/>[vqdmulhs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhs_s32*)<br/></details>|
|
||||
|vqdmulh_lane|Vector saturating doubling multiply high by scalar|<details><summary>Click here to expand the API list</summary>[vqdmulh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_lane_s16*)<br/>[vqdmulh_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_lane_s32*)<br/>[vqdmulh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_laneq_s16*)<br/>[vqdmulh_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_laneq_s32*)<br/>[vqdmulhq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_lane_s16*)<br/>[vqdmulhq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_lane_s32*)<br/>[vqdmulhq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_laneq_s16*)<br/>[vqdmulhq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_laneq_s32*)<br/>[vqdmulhh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhh_lane_s16*)<br/>[vqdmulhh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhh_laneq_s16*)<br/>[vqdmulhs_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhs_lane_s32*)<br/>[vqdmulhs_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhs_laneq_s32*)<br/></details>|
|
||||
|vqdmulh_n|Vector saturating doubling multiply high by scalar|<details><summary>Click here to expand the API list</summary>[vqdmulh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_n_s16*)<br/>[vqdmulh_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulh_n_s32*)<br/>[vqdmulhq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_n_s16*)<br/>[vqdmulhq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmulhq_n_s32*)<br/></details>|
|
||||
|vqrdmulh|Saturating rounding doubling multiply returning high half|<details><summary>Click here to expand the API list</summary>[vqrdmulh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_s16*)<br/>[vqrdmulh_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_s32*)<br/>[vqrdmulhq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_s16*)<br/>[vqrdmulhq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_s32*)<br/>[vqrdmulhh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhh_s16*)<br/>[vqrdmulhs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhs_s32*)<br/></details>|
|
||||
|vqrdmulh_lane|Vector saturating rounding doubling multiply high with scalar|<details><summary>Click here to expand the API list</summary>[vqrdmulh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_lane_s16*)<br/>[vqrdmulh_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_lane_s32*)<br/>[vqrdmulh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_laneq_s16*)<br/>[vqrdmulh_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_laneq_s32*)<br/>[vqrdmulhq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_lane_s16*)<br/>[vqrdmulhq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_lane_s32*)<br/>[vqrdmulhq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_laneq_s16*)<br/>[vqrdmulhq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_laneq_s32*)<br/>[vqrdmulhh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhh_lane_s16*)<br/>[vqrdmulhh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhh_laneq_s16*)<br/>[vqrdmulhs_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhs_lane_s32*)<br/>[vqrdmulhs_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhs_laneq_s32*)<br/></details>|
|
||||
|vqrdmulh_n|Vector saturating rounding doubling multiply high with scalar|<details><summary>Click here to expand the API list</summary>[vqrdmulh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_n_s16*)<br/>[vqrdmulh_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulh_n_s32*)<br/>[vqrdmulhq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_n_s16*)<br/>[vqrdmulhq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmulhq_n_s32*)<br/></details>|
|
||||
|vqdmlal|Saturating doubling multiply-add long|<details><summary>Click here to expand the API list</summary>[vqdmlal_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_s16*)<br/>[vqdmlal_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_s32*)<br/>[vqdmlalh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlalh_s16*)<br/>[vqdmlals_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlals_s32*)<br/>[vqdmlal_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_s16*)<br/>[vqdmlal_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_s32*)<br/></details>|
|
||||
|vqdmlal_lane|Vector saturating doubling multiply-accumulate long<br/> with scalar|<details><summary>Click here to expand the API list</summary>[vqdmlal_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_lane_s16*)<br/>[vqdmlal_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_lane_s32*)<br/>[vqdmlal_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_laneq_s16*)<br/>[vqdmlal_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_laneq_s32*)<br/>[vqdmlalh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlalh_lane_s16*)<br/>[vqdmlalh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlalh_laneq_s16*)<br/>[vqdmlals_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlals_lane_s32*)<br/>[vqdmlals_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlals_laneq_s32*)<br/>[vqdmlal_high_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_lane_s16*)<br/>[vqdmlal_high_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_lane_s32*)<br/>[vqdmlal_high_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_laneq_s16*)<br/>[vqdmlal_high_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_laneq_s32*)<br/></details>|
|
||||
|vqdmlal_n|Vector saturating doubling multiply-accumulate long<br/> with scalar|<details><summary>Click here to expand the API list</summary>[vqdmlal_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_n_s16*)<br/>[vqdmlal_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_n_s32*)<br/>[vqdmlal_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_n_s16*)<br/>[vqdmlal_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlal_high_n_s32*)<br/></details>|
|
||||
|vqdmlsl|Signed saturating doubling multiply-subtract long|<details><summary>Click here to expand the API list</summary>[vqdmlsl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_s16*)<br/>[vqdmlsl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_s32*)<br/>[vqdmlslh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlslh_s16*)<br/>[vqdmlsls_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsls_s32*)<br/>[vqdmlsl_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_s16*)<br/>[vqdmlsl_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_s32*)<br/></details>|
|
||||
|vqdmlsl_lane|Vector saturating doubling multiply-subtract long<br/> with scalar|<details><summary>Click here to expand the API list</summary>[vqdmlsl_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_lane_s16*)<br/>[vqdmlsl_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_lane_s32*)<br/>[vqdmlsl_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_laneq_s16*)<br/>[vqdmlsl_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_laneq_s32*)<br/>[vqdmlslh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlslh_lane_s16*)<br/>[vqdmlslh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlslh_laneq_s16*)<br/>[vqdmlsls_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsls_lane_s32*)<br/>[vqdmlsls_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsls_laneq_s32*)<br/>[vqdmlsl_high_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_lane_s16*)<br/>[vqdmlsl_high_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_lane_s32*)<br/>[vqdmlsl_high_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_laneq_s16*)<br/>[vqdmlsl_high_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_laneq_s32*)<br/></details>|
|
||||
|vqdmlsl_n|Vector saturating doubling multiply-subtract long<br/> with scalar|<details><summary>Click here to expand the API list</summary>[vqdmlsl_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_n_s16*)<br/>[vqdmlsl_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_n_s32*)<br/>[vqdmlsl_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_n_s16*)<br/>[vqdmlsl_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqdmlsl_high_n_s32*)<br/></details>|
|
||||
|vqrdmlah|Saturating rounding doubling multiply accumulate<br/> returning high half (vector)|<details><summary>Click here to expand the API list</summary>[vqrdmlah_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlah_s16*)<br/>[vqrdmlah_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlah_s32*)<br/>[vqrdmlahq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahq_s16*)<br/>[vqrdmlahq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahq_s32*)<br/>[vqrdmlahh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahh_s16*)<br/>[vqrdmlahs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahs_s32*)<br/></details>|
|
||||
|vqrdmlah_lane|Saturating rounding doubling multiply accumulate<br/> returning high half (vector)|<details><summary>Click here to expand the API list</summary>[vqrdmlah_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlah_lane_s16*)<br/> [vqrdmlah_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlah_lane_s32*)<br/> [vqrdmlah_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlah_laneq_s16*)<br/> [vqrdmlah_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlah_laneq_s32*)<br/> [vqrdmlahq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahq_lane_s16*)<br/> [vqrdmlahq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahq_lane_s32*)<br/> [vqrdmlahq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahq_laneq_s16*)<br/> [vqrdmlahq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahq_laneq_s32*)<br/> [vqrdmlahh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahh_lane_s16*)<br/> [vqrdmlahh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahh_laneq_s16*)<br/> [vqrdmlahs_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlahs_lane_s32*)<br/></details>|
|
||||
|vqrdmlsh|Saturating rounding doubling multiply subtract<br/> returning high half (vector)|<details><summary>Click here to expand the API list</summary>[vqrdmlsh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlsh_s16*)<br/>[vqrdmlsh_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlsh_s32*)<br/>[vqrdmlshq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshq_s16*)<br/>[vqrdmlshq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshq_s32*)<br/>[vqrdmlshh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshh_s16*)<br/>[vqrdmlshs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshs_s32*)<br/></details>|
|
||||
|vqrdmlsh_lane|Saturating rounding doubling multiply subtract<br/> returning high half (vector)|<details><summary>Click here to expand the API list</summary>[vqrdmlsh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlsh_lane_s16*)<br/>[vqrdmlsh_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlsh_lane_s32*)<br/>[vqrdmlsh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlsh_laneq_s16*)<br/>[vqrdmlsh_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlsh_laneq_s32*)<br/>[vqrdmlshq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshq_lane_s16*)<br/>[vqrdmlshq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshq_lane_s32*)<br/>[vqrdmlshq_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshq_laneq_s16*)<br/>[vqrdmlshq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshq_laneq_s32*)<br/>[vqrdmlshh_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshh_lane_s16*)<br/>[vqrdmlshh_laneq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshh_laneq_s16*)<br/>[vqrdmlshs_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrdmlshs_lane_s32*)<br/></details>|
|
||||
|vfma|Floating-point fused multiply-add to accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vfma_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_f32*)<br/>[vfma_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_f64*)<br/>[vfmaq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_f32*)<br/>[vfmaq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_f64*)<br/></details>|
|
||||
|vfma_n|Floating-point fused multiply-add to accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vfma_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_n_f32*)<br/>[vfma_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_n_f64*)<br/>[vfmaq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_n_f32*)<br/>[vfmaq_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_n_f64*)<br/></details>|
|
||||
|vfma_lane|Floating-point fused multiply-add to accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vfma_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_lane_f32*)<br/>[vfma_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_lane_f64*)<br/>[vfma_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_laneq_f32*)<br/>[vfma_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfma_laneq_f64*)<br/>[vfmaq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_lane_f32*)<br/>[vfmaq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_lane_f64*)<br/>[vfmaq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_laneq_f32*)<br/>[vfmaq_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmaq_laneq_f64*)<br/>[vfmas_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmas_lane_f32*)<br/>[vfmas_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmas_laneq_f32*)<br/>[vfmad_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmad_lane_f64*)<br/>[vfmad_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmad_laneq_f64*)<br/></details>|
|
||||
|vfms|Floating-point fused multiply-subtract<br/> from accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vfms_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_f32*)<br/>[vfms_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_f64*)<br/>[vfmsq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_f32*)<br/>[vfmsq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_f64*)<br/></details>|
|
||||
|vfms_n|Floating-point fused multiply-subtract<br/> from accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vfms_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_n_f32*)<br/>[vfms_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_n_f64*)<br/>[vfmsq_n_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_n_f32*)<br/>[vfmsq_n_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_n_f64*)<br/></details>|
|
||||
|vfms_lane|Floating-point fused multiply-subtract<br/> from accumulator (vector)|<details><summary>Click here to expand the API list</summary>[vfms_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_lane_f32*)<br/>[vfms_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_lane_f64*)<br/>[vfms_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_laneq_f32*)<br/>[vfms_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfms_laneq_f64*)<br/>[vfmsd_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsd_lane_f64*)<br/>[vfmsd_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsd_laneq_f64*)<br/>[vfmsq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_lane_f32*)<br/>[vfmsq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_lane_f64*)<br/>[vfmsq_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_laneq_f32*)<br/>[vfmsq_laneq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmsq_laneq_f64*)<br/>[vfmss_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmss_lane_f32*)<br/>[vfmss_laneq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vfmss_laneq_f32*)<br/></details>|
|
||||
|vdiv|Floating-point divide (vector)|<details><summary>Click here to expand the API list</summary>[vdiv_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdiv_f32*)<br/> [vdiv_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdiv_f64*)<br/> [vdivq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdivq_f32*)<br/> [vdivq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vdivq_f64*)<br/></details>|
|
||||
|
||||
### Data processing
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vpmax|Maximum pairwise|<details><summary>Click here to expand the API list</summary>[vpmax_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_f32*)<br/>[vpmax_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_s16*)<br/>[vpmax_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_s32*)<br/>[vpmax_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_s8*)<br/>[vpmax_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_u16*)<br/>[vpmax_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_u32*)<br/>[vpmax_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmax_u8*)<br/>[vpmaxq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_f32*)<br/>[vpmaxq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_f64*)<br/>[vpmaxq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_s16*)<br/>[vpmaxq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_s32*)<br/>[vpmaxq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_s8*)<br/>[vpmaxq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_u16*)<br/>[vpmaxq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_u32*)<br/>[vpmaxq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxq_u8*)<br/>[vpmaxs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxs_f32*)<br/>[vpmaxqd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxqd_f64*)<br/></details>|
|
||||
|vpmaxnm|Floating-point maximum number pairwise (vector)|<details><summary>Click here to expand the API list</summary>[vpmaxnm_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxnm_f32*)<br/>[vpmaxnmq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxnmq_f32*)<br/>[vpmaxnmq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxnmq_f64*)<br/>[vpmaxnms_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxnms_f32*)<br/>[vpmaxnmqd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmaxnmqd_f64*)<br/></details>|
|
||||
|vpmin|Minimum pairwise|<details><summary>Click here to expand the API list</summary>[vpmin_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_f32*)<br/>[vpmin_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_s16*)<br/>[vpmin_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_s32*)<br/>[vpmin_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_s8*)<br/>[vpmin_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_u16*)<br/>[vpmin_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_u32*)<br/>[vpmin_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmin_u8*)<br/>[vpminq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_f32*)<br/>[vpminq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_f64*)<br/>[vpminq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_s16*)<br/>[vpminq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_s32*)<br/>[vpminq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_s8*)<br/>[vpminq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_u16*)<br/>[vpminq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_u32*)<br/>[vpminq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminq_u8*)<br/>[vpmins_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpmins_f32*)<br/>[vpminqd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminqd_f64*)<br/></details>|
|
||||
|vpminnm|Floating-point minimum number pairwise (vector)|<details><summary>Click here to expand the API list</summary>[vpminnm_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminnm_f32*)<br/>[vpminnmq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminnmq_f32*)<br/>[vpminnmq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminnmq_f64*)<br/>[vpminnms_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminnms_f32*)<br/>[vpminnmqd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vpminnmqd_f64*)<br/></details>|
|
||||
|vabd|Absolute difference|<details><summary>Click here to expand the API list</summary>[vabd_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_f32*)<br/>[vabd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_f64*)<br/>[vabd_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_s16*)<br/>[vabd_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_s32*)<br/>[vabd_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_s8*)<br/>[vabd_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_u16*)<br/>[vabd_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_u32*)<br/>[vabd_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabd_u8*)<br/>[vabdq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_f32*)<br/>[vabdq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_f64*)<br/>[vabdq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_s16*)<br/>[vabdq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_s32*)<br/>[vabdq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_s8*)<br/>[vabdq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_u16*)<br/>[vabdq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_u32*)<br/>[vabdq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdq_u8*)<br/>[vabds_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabds_f32*)<br/>[vabdd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdd_f64*)<br/></details>|
|
||||
|vabdl|Absolute difference long|<details><summary>Click here to expand the API list</summary>[vabdl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_s16*)<br/>[vabdl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_s32*)<br/>[vabdl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_s8*)<br/>[vabdl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_u16*)<br/>[vabdl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_u32*)<br/>[vabdl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_u8*)<br/>[vabdl_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_high_s16*)<br/>[vabdl_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_high_s32*)<br/>[vabdl_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_high_s8*)<br/>[vabdl_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_high_u16*)<br/>[vabdl_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_high_u32*)<br/>[vabdl_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabdl_high_u8*)<br/></details>|
|
||||
|vaba|Absolute difference and accumulate|<details><summary>Click here to expand the API list</summary>[vaba_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaba_s16*)<br/>[vaba_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaba_s32*)<br/>[vaba_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaba_s8*)<br/>[vaba_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vaba_u16*)<br/>[vaba_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vaba_u32*)<br/>[vaba_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaba_u8*)<br/>[vabaq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabaq_s16*)<br/>[vabaq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabaq_s32*)<br/>[vabaq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabaq_s8*)<br/>[vabaq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabaq_u16*)<br/>[vabaq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabaq_u32*)<br/>[vabaq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabaq_u8*)<br/></details>|
|
||||
|vabal|Absolute difference and accumulate long|<details><summary>Click here to expand the API list</summary>[vabal_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_s16*)<br/>[vabal_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_s32*)<br/>[vabal_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_s8*)<br/>[vabal_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_u16*)<br/>[vabal_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_u32*)<br/>[vabal_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_u8*)<br/>[vabal_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_high_s16*)<br/>[vabal_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_high_s32*)<br/>[vabal_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_high_s8*)<br/>[vabal_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_high_u16*)<br/>[vabal_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_high_u32*)<br/>[vabal_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabal_high_u8*)<br/></details>|
|
||||
|vmax|Maximum|<details><summary>Click here to expand the API list</summary>[vmax_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_f32*)<br/>[vmax_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_f64*)<br/>[vmax_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_s16*)<br/>[vmax_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_s32*)<br/>[vmax_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_s8*)<br/>[vmax_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_u16*)<br/>[vmax_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_u32*)<br/>[vmax_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmax_u8*)<br/>[vmaxq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_f32*)<br/>[vmaxq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_f64*)<br/>[vmaxq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_s16*)<br/>[vmaxq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_s32*)<br/>[vmaxq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_s8*)<br/>[vmaxq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_u16*)<br/>[vmaxq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_u32*)<br/>[vmaxq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxq_u8*)<br/></details>|
|
||||
|vmaxnm|Floating-point maximum number|<details><summary>Click here to expand the API list</summary>[vmaxnm_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnm_f32*)<br/>[vmaxnm_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnm_f64*)<br/>[vmaxnmq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnmq_f32*)<br/>[vmaxnmq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnmq_f64*)<br/>[vmaxnmv_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnmv_f32*)<br/>[vmaxnmvq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnmvq_f32*)<br/>[vmaxnmvq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxnmvq_f64*)<br/></details>|
|
||||
|vmaxv|Maximum across vector|<details><summary>Click here to expand the API list</summary>[vmaxv_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_f32*)<br/>[vmaxv_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_s16*)<br/>[vmaxv_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_s32*)<br/>[vmaxv_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_s8*)<br/>[vmaxv_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_u16*)<br/>[vmaxv_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_u32*)<br/>[vmaxv_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxv_u8*)<br/>[vmaxvq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_f32*)<br/>[vmaxvq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_f64*)<br/>[vmaxvq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_s16*)<br/>[vmaxvq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_s32*)<br/>[vmaxvq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_s8*)<br/>[vmaxvq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_u16*)<br/>[vmaxvq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_u32*)<br/>[vmaxvq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmaxvq_u8*)<br/></details>|
|
||||
|vmin|Minimum|<details><summary>Click here to expand the API list</summary>[vmin_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_f32*)<br/>[vmin_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_f64*)<br/>[vmin_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_s16*)<br/>[vmin_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_s32*)<br/>[vmin_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_s8*)<br/>[vmin_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_u16*)<br/>[vmin_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_u32*)<br/>[vmin_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmin_u8*)<br/>[vminq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_f32*)<br/>[vminq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_f64*)<br/>[vminq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_s16*)<br/>[vminq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_s32*)<br/>[vminq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_s8*)<br/>[vminq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_u16*)<br/>[vminq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_u32*)<br/>[vminq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vminq_u8*)<br/></details>|
|
||||
|vminnm|Floating-point minimum number|<details><summary>Click here to expand the API list</summary>[vminnm_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnm_f32*)<br/>[vminnm_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnm_f64*)<br/>[vminnmq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnmq_f32*)<br/>[vminnmq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnmq_f64*)<br/>[vminnmv_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnmv_f32*)<br/>[vminnmvq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnmvq_f32*)<br/>[vminnmvq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vminnmvq_f64*)<br/></details>|
|
||||
|vminv|Minimum across vector|<details><summary>Click here to expand the API list</summary>[vminv_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_f32*)<br/>[vminv_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_s16*)<br/>[vminv_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_s32*)<br/>[vminv_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_s8*)<br/>[vminv_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_u16*)<br/>[vminv_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_u32*)<br/>[vminv_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vminv_u8*)<br/>[vminvq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_f32*)<br/>[vminvq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_f64*)<br/>[vminvq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_s16*)<br/>[vminvq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_s32*)<br/>[vminvq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_s8*)<br/>[vminvq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_u16*)<br/>[vminvq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_u32*)<br/>[vminvq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vminvq_u8*)<br/></details>|
|
||||
|vabs|Absolute value|<details><summary>Click here to expand the API list</summary>[vabs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabs_f32*)<br/>[vabs_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabs_f64*)<br/>[vabs_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabs_s16*)<br/>[vabs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabs_s32*)<br/>[vabs_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabs_s64*)<br/>[vabs_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabs_s8*)<br/>[vabsq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsq_f32*)<br/>[vabsq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsq_f64*)<br/>[vabsq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsq_s16*)<br/>[vabsq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsq_s32*)<br/>[vabsq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsq_s64*)<br/>[vabsq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsq_s8*)<br/>[vabsd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vabsd_s64*)<br/></details>|
|
||||
|vqabs|Saturating absolute value|<details><summary>Click here to expand the API list</summary>[vqabs_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabs_s16*)<br/>[vqabs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabs_s32*)<br/>[vqabs_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabs_s64*)<br/>[vqabs_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabs_s8*)<br/>[vqabsq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsq_s16*)<br/>[vqabsq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsq_s32*)<br/>[vqabsq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsq_s64*)<br/>[vqabsq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsq_s8*)<br/>[vqabsb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsb_s8*)<br/>[vqabsh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsh_s16*)<br/>[vqabss_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabss_s32*)<br/>[vqabsd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqabsd_s64*)<br/></details>|
|
||||
|vneg|Negate|<details><summary>Click here to expand the API list</summary>[vneg_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vneg_f32*)<br/>[vneg_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vneg_f64*)<br/>[vneg_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vneg_s16*)<br/>[vneg_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vneg_s32*)<br/>[vneg_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vneg_s64*)<br/>[vneg_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vneg_s8*)<br/>[vnegd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegd_s64*)<br/>[vnegq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegq_f32*)<br/>[vnegq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegq_f64*)<br/>[vnegq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegq_s16*)<br/>[vnegq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegq_s32*)<br/>[vnegq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegq_s64*)<br/>[vnegq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vnegq_s8*)<br/></details>|
|
||||
|vqneg|Saturating negate|<details><summary>Click here to expand the API list</summary>[vqneg_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqneg_s16*)<br/>[vqneg_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqneg_s32*)<br/>[vqneg_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqneg_s64*)<br/>[vqneg_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqneg_s8*)<br/>[vqnegq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegq_s16*)<br/>[vqnegq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegq_s32*)<br/>[vqnegq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegq_s64*)<br/>[vqnegq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegq_s8*)<br/>[vqnegb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegb_s8*)<br/>[vqnegh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegh_s16*)<br/>[vqnegs_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegs_s32*)<br/>[vqnegd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqnegd_s64*)<br/></details>|
|
||||
|vcls|Count leading sign bits|<details><summary>Click here to expand the API list</summary>[vcls_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcls_s16*)<br/>[vcls_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcls_s32*)<br/>[vcls_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcls_s8*)<br/>[vclsq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclsq_s16*)<br/>[vclsq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclsq_s32*)<br/>[vclsq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclsq_s8*)<br/></details>|
|
||||
|vclz|Count leading zero bits|<details><summary>Click here to expand the API list</summary>[vclz_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclz_s16*)<br/>[vclz_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclz_s32*)<br/>[vclz_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclz_s8*)<br/>[vclz_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclz_u16*)<br/>[vclz_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclz_u32*)<br/>[vclz_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclz_u8*)<br/>[vclzq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclzq_s16*)<br/>[vclzq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclzq_s32*)<br/>[vclzq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclzq_s8*)<br/>[vclzq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclzq_u16*)<br/>[vclzq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclzq_u32*)<br/>[vclzq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclzq_u8*)<br/></details>|
|
||||
|vcnt|Population count per byte|<details><summary>Click here to expand the API list</summary>[vcnt_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcnt_s8*)<br/>[vcnt_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcnt_u8*)<br/>[vcntq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcntq_s8*)<br/>[vcntq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcntq_u8*)<br/></details>|
|
||||
|vrecpe|Reciprocal estimate|<details><summary>Click here to expand the API list</summary>[vrecpe_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpe_f32*)<br/> [vrecpe_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpe_f64*)<br/> [vrecpe_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpe_u32*)<br/> [vrecpeq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpeq_f32*)<br/> [vrecpeq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpeq_f64*)<br/> [vrecpeq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpeq_u32*)<br/> [vrecpes_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpes_f32*)<br/> [vrecped_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecped_f64*)<br/></details>|
|
||||
|vrecps|Reciprocal step|<details><summary>Click here to expand the API list</summary>[vrecps_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecps_f32*)<br/> [vrecps_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecps_f64*)<br/> [vrecpsq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpsq_f32*)<br/> [vrecpsq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpsq_f64*)<br/> [vrecpss_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpss_f32*)<br/> [vrecpsd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpsd_f64*)<br/></details>|
|
||||
|vrecpx|Floating-point reciprocal exponent|<details><summary>Click here to expand the API list</summary>[vrecpxd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpxd_f64*)<br/>[vrecpxs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrecpxs_f32*)<br/></details>|
|
||||
|vrsqrte|Reciprocal square root estimate|<details><summary>Click here to expand the API list</summary>[vrsqrte_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrte_f32*)<br/> [vrsqrte_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrte_f64*)<br/> [vrsqrte_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrte_u32*)<br/> [vrsqrteq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrteq_f32*)<br/> [vrsqrteq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrteq_f64*)<br/> [vrsqrteq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrteq_u32*)<br/> [vrsqrtes_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrtes_f32*)<br/> [vrsqrted_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrted_f64*)<br/></details>|
|
||||
|vrsqrts|Reciprocal square root step|<details><summary>Click here to expand the API list</summary>[vrsqrts_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrts_f32*)<br/> [vrsqrts_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrts_f64*)<br/> [vrsqrtsq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrtsq_f32*)<br/> [vrsqrtsq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrtsq_f64*)<br/> [vrsqrtss_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrtss_f32*)<br/> [vrsqrtsd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsqrtsd_f64*)<br/></details>|
|
||||
|vmovn|Extract narrow|<details><summary>Click here to expand the API list</summary>[vmovn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_s16*)<br/>[vmovn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_s32*)<br/>[vmovn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_s64*)<br/>[vmovn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_u16*)<br/>[vmovn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_u32*)<br/>[vmovn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_u64*)<br/>[vmovn_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_high_s16*)<br/>[vmovn_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_high_s32*)<br/>[vmovn_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_high_s64*)<br/>[vmovn_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_high_u16*)<br/>[vmovn_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_high_u32*)<br/>[vmovn_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovn_high_u64*)<br/></details>|
|
||||
|vmovl|Extract long|<details><summary>Click here to expand the API list</summary>[vmovl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_s16*)<br/>[vmovl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_s32*)<br/>[vmovl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_s8*)<br/>[vmovl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_u16*)<br/>[vmovl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_u32*)<br/>[vmovl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_u8*)<br/>[vmovl_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_high_s16*)<br/>[vmovl_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_high_s32*)<br/>[vmovl_high_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_high_s8*)<br/>[vmovl_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_high_u16*)<br/>[vmovl_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_high_u32*)<br/>[vmovl_high_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmovl_high_u8*)<br/></details>|
|
||||
|vqmovn|Saturating extract narrow|<details><summary>Click here to expand the API list</summary>[vqmovn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_s16*)<br/>[vqmovn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_s32*)<br/>[vqmovn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_s64*)<br/>[vqmovn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_u16*)<br/>[vqmovn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_u32*)<br/>[vqmovn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_u64*)<br/>[vqmovn_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_high_s16*)<br/>[vqmovn_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_high_s32*)<br/>[vqmovn_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_high_s64*)<br/>[vqmovn_high_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_high_u16*)<br/>[vqmovn_high_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_high_u32*)<br/>[vqmovn_high_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovn_high_u64*)<br/>[vqmovnh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovnh_s16*)<br/>[vqmovnh_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovnh_u16*)<br/>[vqmovns_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovns_s32*)<br/>[vqmovns_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovns_u32*)<br/>[vqmovnd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovnd_s64*)<br/>[vqmovnd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovnd_u64*)<br/></details>|
|
||||
|vqmovun|Signed saturating extract unsigned narrow|<details><summary>Click here to expand the API list</summary>[vqmovun_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovun_s16*)<br/>[vqmovun_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovun_s32*)<br/>[vqmovun_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovun_s64*)<br/>[vqmovun_high_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovun_high_s16*)<br/>[vqmovun_high_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovun_high_s32*)<br/>[vqmovun_high_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovun_high_s64*)<br/>[vqmovunh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovunh_s16*)<br/>[vqmovuns_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovuns_s32*)<br/>[vqmovund_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqmovund_s64*)<br/></details>|
|
||||
|
||||
### Comparison
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vceq|Compare bitwise equal|<details><summary>Click here to expand the API list</summary>[vceq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_f32*)<br/>[vceq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_f64*)<br/>[vceq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_s16*)<br/>[vceq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_s32*)<br/>[vceq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_s64*)<br/>[vceq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_s8*)<br/>[vceq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_u16*)<br/>[vceq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_u32*)<br/>[vceq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_u64*)<br/>[vceq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceq_u8*)<br/>[vceqq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_f32*)<br/>[vceqq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_f64*)<br/>[vceqq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_s16*)<br/>[vceqq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_s32*)<br/>[vceqq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_s64*)<br/>[vceqq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_s8*)<br/>[vceqq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_u16*)<br/>[vceqq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_u32*)<br/>[vceqq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_u64*)<br/>[vceqq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqq_u8*)<br/>[vceqs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqs_f32*)<br/>[vceqd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqd_f64*)<br/>[vceqd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqd_s64*)<br/>[vceqd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqd_u64*)<br/></details>|
|
||||
|vceqz|Compare bitwise equal to zero|<details><summary>Click here to expand the API list</summary>[vceqz_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_f32*)<br/>[vceqz_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_f64*)<br/>[vceqz_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_s16*)<br/>[vceqz_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_s32*)<br/>[vceqz_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_s64*)<br/>[vceqz_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_s8*)<br/>[vceqz_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_u16*)<br/>[vceqz_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_u32*)<br/>[vceqz_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_u64*)<br/>[vceqz_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqz_u8*)<br/>[vceqzq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_f32*)<br/>[vceqzq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_f64*)<br/>[vceqzq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_s16*)<br/>[vceqzq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_s32*)<br/>[vceqzq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_s64*)<br/>[vceqzq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_s8*)<br/>[vceqzq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_u16*)<br/>[vceqzq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_u32*)<br/>[vceqzq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_u64*)<br/>[vceqzq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzq_u8*)<br/>[vceqzs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzs_f32*)<br/>[vceqzd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzd_f64*)<br/>[vceqzd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzd_s64*)<br/>[vceqzd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vceqzd_u64*)<br/></details>|
|
||||
|vcge|Compare greater than or equal|<details><summary>Click here to expand the API list</summary>[vcge_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_f32*)<br/>[vcge_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_f64*)<br/>[vcge_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_s16*)<br/>[vcge_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_s32*)<br/>[vcge_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_s64*)<br/>[vcge_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_s8*)<br/>[vcge_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_u16*)<br/>[vcge_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_u32*)<br/>[vcge_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_u64*)<br/>[vcge_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcge_u8*)<br/>[vcgeq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_f32*)<br/>[vcgeq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_f64*)<br/>[vcgeq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_s16*)<br/>[vcgeq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_s32*)<br/>[vcgeq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_s64*)<br/>[vcgeq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_s8*)<br/>[vcgeq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_u16*)<br/>[vcgeq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_u32*)<br/>[vcgeq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_u64*)<br/>[vcgeq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgeq_u8*)<br/>[vcges_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcges_f32*)<br/>[vcged_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcged_f64*)<br/>[vcged_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcged_s64*)<br/>[vcged_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcged_u64*)<br/></details>|
|
||||
|vcgez|Compare greater than or equal to zero|<details><summary>Click here to expand the API list</summary>[vcgez_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgez_f32*)<br/>[vcgez_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgez_f64*)<br/>[vcgez_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgez_s16*)<br/>[vcgez_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgez_s32*)<br/>[vcgez_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgez_s64*)<br/>[vcgez_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgez_s8*)<br/>[vcgezq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezq_f32*)<br/>[vcgezq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezq_f64*)<br/>[vcgezq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezq_s16*)<br/>[vcgezq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezq_s32*)<br/>[vcgezq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezq_s64*)<br/>[vcgezq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezq_s8*)<br/>[vcgezs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezs_f32*)<br/>[vcgezd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezd_f64*)<br/>[vcgezd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgezd_s64*)<br/></details>|
|
||||
|vcle|Compare less than or equal|<details><summary>Click here to expand the API list</summary>[vcle_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_f32*)<br/>[vcle_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_f64*)<br/>[vcle_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_s16*)<br/>[vcle_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_s32*)<br/>[vcle_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_s64*)<br/>[vcle_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_s8*)<br/>[vcle_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_u16*)<br/>[vcle_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_u32*)<br/>[vcle_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_u64*)<br/>[vcle_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcle_u8*)<br/>[vcleq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_f32*)<br/>[vcleq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_f64*)<br/>[vcleq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_s16*)<br/>[vcleq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_s32*)<br/>[vcleq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_s64*)<br/>[vcleq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_s8*)<br/>[vcleq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_u16*)<br/>[vcleq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_u32*)<br/>[vcleq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_u64*)<br/>[vcleq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcleq_u8*)<br/>[vcles_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcles_f32*)<br/>[vcled_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcled_f64*)<br/>[vcled_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcled_s64*)<br/>[vcled_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcled_u64*)<br/></details>|
|
||||
|vclez|Compare less than or equal to zero|<details><summary>Click here to expand the API list</summary>[vclez_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclez_f32*)<br/>[vclez_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclez_f64*)<br/>[vclez_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclez_s16*)<br/>[vclez_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclez_s32*)<br/>[vclez_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclez_s64*)<br/>[vclez_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclez_s8*)<br/>[vclezq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezq_f32*)<br/>[vclezq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezq_f64*)<br/>[vclezq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezq_s16*)<br/>[vclezq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezq_s32*)<br/>[vclezq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezq_s64*)<br/>[vclezq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezq_s8*)<br/>[vclezs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezs_f32*)<br/>[vclezd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezd_f64*)<br/>[vclezd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclezd_s64*)<br/></details>|
|
||||
|vcgt|Compare greater than|<details><summary>Click here to expand the API list</summary>[vcgt_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_f32*)<br/>[vcgt_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_f64*)<br/>[vcgt_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_s16*)<br/>[vcgt_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_s32*)<br/>[vcgt_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_s64*)<br/>[vcgt_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_s8*)<br/>[vcgt_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_u16*)<br/>[vcgt_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_u32*)<br/>[vcgt_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_u64*)<br/>[vcgt_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgt_u8*)<br/>[vcgtq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_f32*)<br/>[vcgtq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_f64*)<br/>[vcgtq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_s16*)<br/>[vcgtq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_s32*)<br/>[vcgtq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_s64*)<br/>[vcgtq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_s8*)<br/>[vcgtq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_u16*)<br/>[vcgtq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_u32*)<br/>[vcgtq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_u64*)<br/>[vcgtq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtq_u8*)<br/>[vcgts_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgts_f32*)<br/>[vcgtd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtd_f64*)<br/>[vcgtd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtd_s64*)<br/>[vcgtd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtd_u64*)<br/></details>|
|
||||
|vcgtz|Compare greater than zero|<details><summary>Click here to expand the API list</summary>[vcgtz_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtz_f32*)<br/>[vcgtz_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtz_f64*)<br/>[vcgtz_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtz_s16*)<br/>[vcgtz_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtz_s32*)<br/>[vcgtz_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtz_s64*)<br/>[vcgtz_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtz_s8*)<br/>[vcgtzq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzq_f32*)<br/>[vcgtzq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzq_f64*)<br/>[vcgtzq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzq_s16*)<br/>[vcgtzq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzq_s32*)<br/>[vcgtzq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzq_s64*)<br/>[vcgtzq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzq_s8*)<br/>[vcgtzs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzs_f32*)<br/>[vcgtzd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzd_f64*)<br/>[vcgtzd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcgtzd_s64*)<br/></details>|
|
||||
|vclt|Compare less than|<details><summary>Click here to expand the API list</summary>[vclt_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_f32*)<br/>[vclt_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_f64*)<br/>[vclt_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_s16*)<br/>[vclt_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_s32*)<br/>[vclt_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_s64*)<br/>[vclt_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_s8*)<br/>[vclt_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_u16*)<br/>[vclt_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_u32*)<br/>[vclt_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_u64*)<br/>[vclt_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vclt_u8*)<br/>[vcltq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_f32*)<br/>[vcltq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_f64*)<br/>[vcltq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_s16*)<br/>[vcltq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_s32*)<br/>[vcltq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_s64*)<br/>[vcltq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_s8*)<br/>[vcltq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_u16*)<br/>[vcltq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_u32*)<br/>[vcltq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_u64*)<br/>[vcltq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltq_u8*)<br/>[vclts_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vclts_f32*)<br/>[vcltd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltd_f64*)<br/>[vcltd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltd_s64*)<br/>[vcltd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltd_u64*)<br/></details>|
|
||||
|vcltz|Compare less than zero|<details><summary>Click here to expand the API list</summary>[vcltz_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltz_f32*)<br/>[vcltz_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltz_f64*)<br/>[vcltz_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltz_s16*)<br/>[vcltz_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltz_s32*)<br/>[vcltz_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltz_s64*)<br/>[vcltz_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltz_s8*)<br/>[vcltzq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzq_f32*)<br/>[vcltzq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzq_f64*)<br/>[vcltzq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzq_s16*)<br/>[vcltzq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzq_s32*)<br/>[vcltzq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzq_s64*)<br/>[vcltzq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzq_s8*)<br/>[vcltzs_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzs_f32*)<br/>[vcltzd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzd_f64*)<br/>[vcltzd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcltzd_s64*)<br/></details>|
|
||||
|vcage|Floating-point absolute compare greater than or equal|<details><summary>Click here to expand the API list</summary>[vcage_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcage_f32*)<br/>[vcage_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcage_f64*)<br/>[vcageq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcageq_f32*)<br/>[vcageq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcageq_f64*)<br/>[vcages_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcages_f32*)<br/>[vcaged_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaged_f64*)<br/></details>|
|
||||
|vcagt|Floating-point absolute compare greater than|<details><summary>Click here to expand the API list</summary>[vcagt_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcagt_f32*)<br/>[vcagt_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcagt_f64*)<br/>[vcagtq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcagtq_f32*)<br/>[vcagtq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcagtq_f64*)<br/>[vcagts_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcagts_f32*)<br/>[vcagtd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcagtd_f64*)<br/></details>|
|
||||
|vcale|Floating-point absolute compare less than or equal|<details><summary>Click here to expand the API list</summary>[vcale_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcale_f32*)<br/>[vcale_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcale_f64*)<br/>[vcaleq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaleq_f32*)<br/>[vcaleq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaleq_f64*)<br/>[vcales_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcales_f32*)<br/>[vcaled_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaled_f64*)<br/></details>|
|
||||
|vcalt|Floating-point absolute compare less than|<details><summary>Click here to expand the API list</summary>[vcalt_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcalt_f32*)<br/>[vcalt_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcalt_f64*)<br/>[vcaltq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaltq_f32*)<br/>[vcaltq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaltq_f64*)<br/>[vcalts_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcalts_f32*)<br/>[vcaltd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcaltd_f64*)<br/></details>|
|
||||
|
||||
### Bitwise
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vtst|Test bits nonzero|<details><summary>Click here to expand the API list</summary>[vtst_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_s16*)<br/>[vtst_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_s32*)<br/>[vtst_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_s64*)<br/>[vtst_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_s8*)<br/>[vtst_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_u16*)<br/>[vtst_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_u32*)<br/>[vtst_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_u64*)<br/>[vtst_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtst_u8*)<br/>[vtstd_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstd_s64*)<br/>[vtstd_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstd_u64*)<br/>[vtstq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_s16*)<br/>[vtstq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_s32*)<br/>[vtstq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_s64*)<br/>[vtstq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_s8*)<br/>[vtstq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_u16*)<br/>[vtstq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_u32*)<br/>[vtstq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_u64*)<br/>[vtstq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtstq_u8*)<br/></details>|
|
||||
|vmvn|Bitwise NOT|<details><summary>Click here to expand the API list</summary>[vmvn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvn_s16*)<br/>[vmvn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvn_s32*)<br/>[vmvn_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvn_s8*)<br/>[vmvn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvn_u16*)<br/>[vmvn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvn_u32*)<br/>[vmvn_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvn_u8*)<br/>[vmvnq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvnq_s16*)<br/>[vmvnq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvnq_s32*)<br/>[vmvnq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvnq_s8*)<br/>[vmvnq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvnq_u16*)<br/>[vmvnq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvnq_u32*)<br/>[vmvnq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vmvnq_u8*)<br/></details>|
|
||||
|vand|Bitwise AND|<details><summary>Click here to expand the API list</summary>[vand_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_s16*)<br/>[vand_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_s32*)<br/>[vand_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_s64*)<br/>[vand_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_s8*)<br/>[vand_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_u16*)<br/>[vand_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_u32*)<br/>[vand_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_u64*)<br/>[vand_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vand_u8*)<br/>[vandq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_s16*)<br/>[vandq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_s32*)<br/>[vandq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_s64*)<br/>[vandq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_s8*)<br/>[vandq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_u16*)<br/>[vandq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_u32*)<br/>[vandq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_u64*)<br/>[vandq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vandq_u8*)<br/></details>|
|
||||
|vorr|Bitwise OR|<details><summary>Click here to expand the API list</summary>[vorr_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_s16*)<br/>[vorr_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_s32*)<br/>[vorr_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_s64*)<br/>[vorr_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_s8*)<br/>[vorr_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_u16*)<br/>[vorr_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_u32*)<br/>[vorr_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_u64*)<br/>[vorr_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vorr_u8*)<br/>[vorrq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_s16*)<br/>[vorrq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_s32*)<br/>[vorrq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_s64*)<br/>[vorrq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_s8*)<br/>[vorrq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_u16*)<br/>[vorrq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_u32*)<br/>[vorrq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_u64*)<br/>[vorrq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vorrq_u8*)<br/></details>|
|
||||
|vorn|Bitwise OR NOT|<details><summary>Click here to expand the API list</summary>[vorn_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_s16*)<br/>[vorn_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_s32*)<br/>[vorn_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_s64*)<br/>[vorn_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_s8*)<br/>[vorn_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_u16*)<br/>[vorn_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_u32*)<br/>[vorn_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_u64*)<br/>[vorn_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vorn_u8*)<br/>[vornq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_s16*)<br/>[vornq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_s32*)<br/>[vornq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_s64*)<br/>[vornq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_s8*)<br/>[vornq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_u16*)<br/>[vornq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_u32*)<br/>[vornq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_u64*)<br/>[vornq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vornq_u8*)<br/></details>|
|
||||
|veor|Bitwise exclusive OR|<details><summary>Click here to expand the API list</summary>[veor_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_s16*)<br/>[veor_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_s32*)<br/>[veor_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_s64*)<br/>[veor_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_s8*)<br/>[veor_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_u16*)<br/>[veor_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_u32*)<br/>[veor_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_u64*)<br/>[veor_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.veor_u8*)<br/>[veorq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_s16*)<br/>[veorq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_s32*)<br/>[veorq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_s64*)<br/>[veorq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_s8*)<br/>[veorq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_u16*)<br/>[veorq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_u32*)<br/>[veorq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_u64*)<br/>[veorq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.veorq_u8*)<br/></details>|
|
||||
|vbic|Bitwise bit clear|<details><summary>Click here to expand the API list</summary>[vbic_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_s16*)<br/>[vbic_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_s32*)<br/>[vbic_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_s64*)<br/>[vbic_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_s8*)<br/>[vbic_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_u16*)<br/>[vbic_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_u32*)<br/>[vbic_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_u64*)<br/>[vbic_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbic_u8*)<br/>[vbicq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_s16*)<br/>[vbicq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_s32*)<br/>[vbicq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_s64*)<br/>[vbicq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_s8*)<br/>[vbicq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_u16*)<br/>[vbicq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_u32*)<br/>[vbicq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_u64*)<br/>[vbicq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbicq_u8*)<br/></details>|
|
||||
|vbsl|Bitwise select|<details><summary>Click here to expand the API list</summary>[vbsl_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_f32*)<br/>[vbsl_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_f64*)<br/>[vbsl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_s16*)<br/>[vbsl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_s32*)<br/>[vbsl_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_s64*)<br/>[vbsl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_s8*)<br/>[vbsl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_u16*)<br/>[vbsl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_u32*)<br/>[vbsl_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_u64*)<br/>[vbsl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbsl_u8*)<br/>[vbslq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_f32*)<br/>[vbslq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_f64*)<br/>[vbslq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_s16*)<br/>[vbslq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_s32*)<br/>[vbslq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_s64*)<br/>[vbslq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_s8*)<br/>[vbslq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_u16*)<br/>[vbslq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_u32*)<br/>[vbslq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_u64*)<br/>[vbslq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vbslq_u8*)<br/></details>|
|
||||
|
||||
### Shift
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vshl|Shift left (register)|<details><summary>Click here to expand the API list</summary>[vshl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_s16*)<br/>[vshl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_s32*)<br/>[vshl_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_s64*)<br/>[vshl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_s8*)<br/>[vshl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_u16*)<br/>[vshl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_u32*)<br/>[vshl_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_u64*)<br/>[vshl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_u8*)<br/>[vshlq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_s16*)<br/>[vshlq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_s32*)<br/>[vshlq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_s64*)<br/>[vshlq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_s8*)<br/>[vshlq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_u16*)<br/>[vshlq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_u32*)<br/>[vshlq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_u64*)<br/>[vshlq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_u8*)<br/>[vshld_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshld_s64*)<br/>[vshld_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshld_u64*)<br/></details>|
|
||||
|vqshl|Saturating shift left (register)|<details><summary>Click here to expand the API list</summary>[vqshl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_s16*)<br/>[vqshl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_s32*)<br/>[vqshl_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_s64*)<br/>[vqshl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_s8*)<br/>[vqshl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_u16*)<br/>[vqshl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_u32*)<br/>[vqshl_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_u64*)<br/>[vqshl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_u8*)<br/>[vqshlq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_s16*)<br/>[vqshlq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_s32*)<br/>[vqshlq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_s64*)<br/>[vqshlq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_s8*)<br/>[vqshlq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_u16*)<br/>[vqshlq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_u32*)<br/>[vqshlq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_u64*)<br/>[vqshlq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_u8*)<br/>[vqshlb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlb_s8*)<br/>[vqshlb_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlb_u8*)<br/>[vqshlh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlh_s16*)<br/>[vqshlh_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlh_u16*)<br/>[vqshls_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshls_s32*)<br/>[vqshls_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshls_u32*)<br/>[vqshld_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshld_s64*)<br/>[vqshld_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshld_u64*)<br/></details>|
|
||||
|vqshl_n|Saturating shift left (immediate)|<details><summary>Click here to expand the API list</summary>[vqshl_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_s16*)<br/>[vqshl_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_s32*)<br/>[vqshl_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_s64*)<br/>[vqshl_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_s8*)<br/>[vqshl_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_u16*)<br/>[vqshl_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_u32*)<br/>[vqshl_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_u64*)<br/>[vqshl_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshl_n_u8*)<br/>[vqshlq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_s16*)<br/>[vqshlq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_s32*)<br/>[vqshlq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_s64*)<br/>[vqshlq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_s8*)<br/>[vqshlq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_u16*)<br/>[vqshlq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_u32*)<br/>[vqshlq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_u64*)<br/>[vqshlq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlq_n_u8*)<br/>[vqshlb_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlb_n_s8*)<br/>[vqshlb_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlb_n_u8*)<br/>[vqshlh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlh_n_s16*)<br/>[vqshlh_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlh_n_u16*)<br/>[vqshls_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshls_n_s32*)<br/>[vqshls_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshls_n_u32*)<br/>[vqshld_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshld_n_s64*)<br/>[vqshld_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshld_n_u64*)<br/></details>|
|
||||
|vqshlu_n|Saturating shift left unsigned (immediate)|<details><summary>Click here to expand the API list</summary>[vqshlu_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlu_n_s16*)<br/>[vqshlu_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlu_n_s32*)<br/>[vqshlu_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlu_n_s64*)<br/>[vqshlu_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlu_n_s8*)<br/>[vqshlub_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlub_n_s8*)<br/>[vqshlud_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlud_n_s64*)<br/>[vqshluh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshluh_n_s16*)<br/>[vqshluq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshluq_n_s16*)<br/>[vqshluq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshluq_n_s32*)<br/>[vqshluq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshluq_n_s64*)<br/>[vqshluq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshluq_n_s8*)<br/>[vqshlus_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshlus_n_s32*)<br/></details>|
|
||||
|vrshl|Rounding shift left (register)|<details><summary>Click here to expand the API list</summary>[vrshl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_s16*)<br/>[vrshl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_s32*)<br/>[vrshl_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_s64*)<br/>[vrshl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_s8*)<br/>[vrshl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_u16*)<br/>[vrshl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_u32*)<br/>[vrshl_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_u64*)<br/>[vrshl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshl_u8*)<br/>[vrshlq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_s16*)<br/>[vrshlq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_s32*)<br/>[vrshlq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_s64*)<br/>[vrshlq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_s8*)<br/>[vrshlq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_u16*)<br/>[vrshlq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_u32*)<br/>[vrshlq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_u64*)<br/>[vrshlq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshlq_u8*)<br/>[vrshld_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshld_s64*)<br/>[vrshld_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshld_u64*)<br/></details>|
|
||||
|vqrshl|Saturating rounding shift left (register)|<details><summary>Click here to expand the API list</summary>[vqrshl_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_s16*)<br/>[vqrshl_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_s32*)<br/>[vqrshl_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_s64*)<br/>[vqrshl_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_s8*)<br/>[vqrshl_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_u16*)<br/>[vqrshl_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_u32*)<br/>[vqrshl_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_u64*)<br/>[vqrshl_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshl_u8*)<br/>[vqrshlq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_s16*)<br/>[vqrshlq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_s32*)<br/>[vqrshlq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_s64*)<br/>[vqrshlq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_s8*)<br/>[vqrshlq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_u16*)<br/>[vqrshlq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_u32*)<br/>[vqrshlq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_u64*)<br/>[vqrshlq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlq_u8*)<br/>[vqrshlb_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlb_s8*)<br/>[vqrshlb_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlb_u8*)<br/>[vqrshlh_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlh_s16*)<br/>[vqrshlh_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshlh_u16*)<br/>[vqrshls_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshls_s32*)<br/>[vqrshls_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshls_u32*)<br/>[vqrshld_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshld_s64*)<br/>[vqrshld_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshld_u64*)<br/></details>|
|
||||
|vshl_n|Shift left (immediate)|<details><summary>Click here to expand the API list</summary>[vshl_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_s16*)<br/>[vshl_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_s32*)<br/>[vshl_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_s64*)<br/>[vshl_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_s8*)<br/>[vshl_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_u16*)<br/>[vshl_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_u32*)<br/>[vshl_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_u64*)<br/>[vshl_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshl_n_u8*)<br/>[vshlq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_s16*)<br/>[vshlq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_s32*)<br/>[vshlq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_s64*)<br/>[vshlq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_s8*)<br/>[vshlq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_u16*)<br/>[vshlq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_u32*)<br/>[vshlq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_u64*)<br/>[vshlq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshlq_n_u8*)<br/>[vshld_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshld_n_s64*)<br/>[vshld_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshld_n_u64*)<br/></details>|
|
||||
|vshll_n|Shift left long (immediate)|<details><summary>Click here to expand the API list</summary>[vshll_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_n_s16*)<br/>[vshll_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_n_s32*)<br/>[vshll_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_n_s8*)<br/>[vshll_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_n_u16*)<br/>[vshll_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_n_u32*)<br/>[vshll_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_n_u8*)<br/>[vshll_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_high_n_s16*)<br/>[vshll_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_high_n_s32*)<br/>[vshll_high_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_high_n_s8*)<br/>[vshll_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_high_n_u16*)<br/>[vshll_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_high_n_u32*)<br/>[vshll_high_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshll_high_n_u8*)<br/></details>|
|
||||
|vshr_n|Shift right (immediate)|<details><summary>Click here to expand the API list</summary>[vshr_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_s16*)<br/>[vshr_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_s32*)<br/>[vshr_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_s64*)<br/>[vshr_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_s8*)<br/>[vshr_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_u16*)<br/>[vshr_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_u32*)<br/>[vshr_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_u64*)<br/>[vshr_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshr_n_u8*)<br/>[vshrq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_s16*)<br/>[vshrq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_s32*)<br/>[vshrq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_s64*)<br/>[vshrq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_s8*)<br/>[vshrq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_u16*)<br/>[vshrq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_u32*)<br/>[vshrq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_u64*)<br/>[vshrq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrq_n_u8*)<br/>[vshrd_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrd_n_s64*)<br/>[vshrd_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrd_n_u64*)<br/></details>|
|
||||
|vrshr_n|Rounding right left (register)|<details><summary>Click here to expand the API list</summary>[vrshr_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_s16*)<br/>[vrshr_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_s32*)<br/>[vrshr_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_s64*)<br/>[vrshr_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_s8*)<br/>[vrshr_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_u16*)<br/>[vrshr_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_u32*)<br/>[vrshr_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_u64*)<br/>[vrshr_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshr_n_u8*)<br/>[vrshrq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_s16*)<br/>[vrshrq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_s32*)<br/>[vrshrq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_s64*)<br/>[vrshrq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_s8*)<br/>[vrshrq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_u16*)<br/>[vrshrq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_u32*)<br/>[vrshrq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_u64*)<br/>[vrshrq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrq_n_u8*)<br/>[vrshrd_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrd_n_s64*)<br/>[vrshrd_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrd_n_u64*)<br/></details>|
|
||||
|vshrn_n|Shift right narrow (immediate)|<details><summary>Click here to expand the API list</summary>[vshrn_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_n_s16*)<br/>[vshrn_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_n_s32*)<br/>[vshrn_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_n_s64*)<br/>[vshrn_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_n_u16*)<br/>[vshrn_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_n_u32*)<br/>[vshrn_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_n_u64*)<br/>[vshrn_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_high_n_s16*)<br/>[vshrn_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_high_n_s32*)<br/>[vshrn_high_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_high_n_s64*)<br/>[vshrn_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_high_n_u16*)<br/>[vshrn_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_high_n_u32*)<br/>[vshrn_high_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vshrn_high_n_u64*)<br/></details>|
|
||||
|vqshrun_n|Signed saturating shift right<br/> unsigned narrow (immediate)|<details><summary>Click here to expand the API list</summary>[vqshrun_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrun_n_s16*)<br/> [vqshrun_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrun_n_s32*)<br/> [vqshrun_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrun_n_s64*)<br/> [vqshrunh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrunh_n_s16*)<br/> [vqshruns_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshruns_n_s32*)<br/> [vqshrund_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrund_n_s64*)<br/> [vqshrun_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrun_high_n_s16*)<br/> [vqshrun_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrun_high_n_s32*)<br/> [vqshrun_high_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrun_high_n_s64*)<br/></details>|
|
||||
|vqrshrun_n|Signed saturating rounded shift right<br/> unsigned narrow (immediate)|<details><summary>Click here to expand the API list</summary>[vqrshrun_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrun_n_s16*)<br/> [vqrshrun_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrun_n_s32*)<br/> [vqrshrun_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrun_n_s64*)<br/> [vqrshrunh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrunh_n_s16*)<br/> [vqrshruns_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshruns_n_s32*)<br/> [vqrshrund_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrund_n_s64*)<br/> [vqrshrun_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrun_high_n_s16*)<br/> [vqrshrun_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrun_high_n_s32*)<br/> [vqrshrun_high_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrun_high_n_s64*)<br/></details>|
|
||||
|vqshrn_n|Signed saturating shift right narrow (immediate)|<details><summary>Click here to expand the API list</summary>[vqshrn_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_n_s16*)<br/>[vqshrn_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_n_s32*)<br/>[vqshrn_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_n_s64*)<br/>[vqshrn_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_n_u16*)<br/>[vqshrn_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_n_u32*)<br/>[vqshrn_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_n_u64*)<br/>[vqshrnh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrnh_n_s16*)<br/>[vqshrnh_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrnh_n_u16*)<br/>[vqshrns_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrns_n_s32*)<br/>[vqshrns_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrns_n_u32*)<br/>[vqshrnd_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrnd_n_s64*)<br/>[vqshrnd_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrnd_n_u64*)<br/>[vqshrn_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_high_n_s16*)<br/>[vqshrn_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_high_n_s32*)<br/>[vqshrn_high_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_high_n_s64*)<br/>[vqshrn_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_high_n_u16*)<br/>[vqshrn_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_high_n_u32*)<br/>[vqshrn_high_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqshrn_high_n_u64*)<br/></details>|
|
||||
|vrshrn_n|Rounding shift right narrow (immediate)|<details><summary>Click here to expand the API list</summary>[vrshrn_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_n_s16*)<br/>[vrshrn_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_n_s32*)<br/>[vrshrn_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_n_s64*)<br/>[vrshrn_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_n_u16*)<br/>[vrshrn_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_n_u32*)<br/>[vrshrn_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_n_u64*)<br/>[vrshrn_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_high_n_s16*)<br/>[vrshrn_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_high_n_s32*)<br/>[vrshrn_high_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_high_n_s64*)<br/>[vrshrn_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_high_n_u16*)<br/>[vrshrn_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_high_n_u32*)<br/>[vrshrn_high_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrshrn_high_n_u64*)<br/></details>|
|
||||
|vqrshrn_n|Signed saturating rounded shift right narrow (immediate)|<details><summary>Click here to expand the API list</summary>[vqrshrn_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_n_s16*)<br/> [vqrshrn_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_n_s32*)<br/> [vqrshrn_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_n_s64*)<br/> [vqrshrn_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_n_u16*)<br/> [vqrshrn_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_n_u32*)<br/> [vqrshrn_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_n_u64*)<br/> [vqrshrnh_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrnh_n_s16*)<br/> [vqrshrnh_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrnh_n_u16*)<br/> [vqrshrns_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrns_n_s32*)<br/> [vqrshrns_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrns_n_u32*)<br/> [vqrshrnd_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrnd_n_s64*)<br/> [vqrshrnd_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrnd_n_u64*)<br/> [vqrshrn_high_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_high_n_s16*)<br/> [vqrshrn_high_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_high_n_s32*)<br/> [vqrshrn_high_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_high_n_s64*)<br/> [vqrshrn_high_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_high_n_u16*)<br/> [vqrshrn_high_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_high_n_u32*)<br/> [vqrshrn_high_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vqrshrn_high_n_u64*)<br/></details>|
|
||||
|vsra_n|Signed shift right and accumulate (immediate)|<details><summary>Click here to expand the API list</summary>[vsra_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_s16*)<br/>[vsra_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_s32*)<br/>[vsra_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_s64*)<br/>[vsra_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_s8*)<br/>[vsra_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_u16*)<br/>[vsra_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_u32*)<br/>[vsra_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_u64*)<br/>[vsra_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsra_n_u8*)<br/>[vsraq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_s16*)<br/>[vsraq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_s32*)<br/>[vsraq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_s64*)<br/>[vsraq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_s8*)<br/>[vsraq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_u16*)<br/>[vsraq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_u32*)<br/>[vsraq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_u64*)<br/>[vsraq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsraq_n_u8*)<br/>[vsrad_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsrad_n_s64*)<br/>[vsrad_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsrad_n_u64*)<br/></details>|
|
||||
|vrsra_n|Signed rounding shift right and accumulate (immediate)|<details><summary>Click here to expand the API list</summary>[vrsra_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_s16*)<br/>[vrsra_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_s32*)<br/>[vrsra_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_s64*)<br/>[vrsra_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_s8*)<br/>[vrsra_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_u16*)<br/>[vrsra_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_u32*)<br/>[vrsra_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_u64*)<br/>[vrsra_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsra_n_u8*)<br/>[vrsraq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_s16*)<br/>[vrsraq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_s32*)<br/>[vrsraq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_s64*)<br/>[vrsraq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_s8*)<br/>[vrsraq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_u16*)<br/>[vrsraq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_u32*)<br/>[vrsraq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_u64*)<br/>[vrsraq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsraq_n_u8*)<br/>[vrsrad_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsrad_n_s64*)<br/>[vrsrad_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrsrad_n_u64*)<br/></details>|
|
||||
|vsri_n|Shift right and insert (immediate)|<details><summary>Click here to expand the API list</summary>[vsri_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_s16*)<br/>[vsri_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_s32*)<br/>[vsri_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_s64*)<br/>[vsri_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_s8*)<br/>[vsri_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_u16*)<br/>[vsri_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_u32*)<br/>[vsri_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_u64*)<br/>[vsri_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsri_n_u8*)<br/>[vsriq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_s16*)<br/>[vsriq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_s32*)<br/>[vsriq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_s64*)<br/>[vsriq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_s8*)<br/>[vsriq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_u16*)<br/>[vsriq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_u32*)<br/>[vsriq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_u64*)<br/>[vsriq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsriq_n_u8*)<br/>[vsrid_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsrid_n_s64*)<br/>[vsrid_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsrid_n_u64*)<br/></details>|
|
||||
|vsli_n|Shift left and insert (immediate)|<details><summary>Click here to expand the API list</summary>[vsli_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_s16*)<br/>[vsli_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_s32*)<br/>[vsli_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_s64*)<br/>[vsli_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_s8*)<br/>[vsli_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_u16*)<br/>[vsli_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_u32*)<br/>[vsli_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_u64*)<br/>[vsli_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsli_n_u8*)<br/>[vsliq_n_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_s16*)<br/>[vsliq_n_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_s32*)<br/>[vsliq_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_s64*)<br/>[vsliq_n_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_s8*)<br/>[vsliq_n_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_u16*)<br/>[vsliq_n_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_u32*)<br/>[vsliq_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_u64*)<br/>[vsliq_n_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsliq_n_u8*)<br/>[vslid_n_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vslid_n_s64*)<br/>[vslid_n_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vslid_n_u64*)<br/></details>|
|
||||
|
||||
### Floating-point
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vcvt|Convert to/from another precision or fixed point,<br/>rounding towards zero|<details><summary>Click here to expand the API list</summary>[vcvt_f32_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_f32_f64*)<br/>[vcvt_f32_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_f32_s32*)<br/>[vcvt_f32_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_f32_u32*)<br/>[vcvt_f64_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_f64_f32*)<br/>[vcvt_f64_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_f64_s64*)<br/>[vcvt_f64_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_f64_u64*)<br/>[vcvt_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_s32_f32*)<br/>[vcvt_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_s64_f64*)<br/>[vcvt_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_u32_f32*)<br/>[vcvt_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_u64_f64*)<br/>[vcvtq_f32_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_f32_s32*)<br/>[vcvtq_f32_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_f32_u32*)<br/>[vcvtq_f64_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_f64_s64*)<br/>[vcvtq_f64_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_f64_u64*)<br/>[vcvtq_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_s32_f32*)<br/>[vcvtq_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_s64_f64*)<br/>[vcvtq_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_u32_f32*)<br/>[vcvtq_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_u64_f64*)<br/>[vcvts_f32_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_f32_s32*)<br/>[vcvts_f32_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_f32_u32*)<br/>[vcvts_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_s32_f32*)<br/>[vcvts_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_u32_f32*)<br/>[vcvtd_f64_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_f64_s64*)<br/>[vcvtd_f64_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_f64_u64*)<br/>[vcvtd_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_s64_f64*)<br/>[vcvtd_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_u64_f64*)<br/>[vcvt_high_f32_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_high_f32_f64*)<br/>[vcvt_high_f64_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_high_f64_f32*)<br/></details>|
|
||||
|vcvta|Convert to integer, rounding to nearest with ties to away|<details><summary>Click here to expand the API list</summary>[vcvta_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvta_s32_f32*)<br/>[vcvta_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvta_s64_f64*)<br/>[vcvta_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvta_u32_f32*)<br/>[vcvta_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvta_u64_f64*)<br/>[vcvtad_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtad_s64_f64*)<br/>[vcvtad_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtad_u64_f64*)<br/>[vcvtaq_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtaq_s32_f32*)<br/>[vcvtaq_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtaq_s64_f64*)<br/>[vcvtaq_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtaq_u32_f32*)<br/>[vcvtaq_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtaq_u64_f64*)<br/>[vcvtas_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtas_s32_f32*)<br/>[vcvtas_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtas_u32_f32*)<br/></details>|
|
||||
|vcvtm|Convert to integer, rounding towards minus infinity|<details><summary>Click here to expand the API list</summary>[vcvtm_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtm_s32_f32*)<br/>[vcvtm_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtm_s64_f64*)<br/>[vcvtm_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtm_u32_f32*)<br/>[vcvtm_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtm_u64_f64*)<br/>[vcvtmq_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtmq_s32_f32*)<br/>[vcvtmq_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtmq_s64_f64*)<br/>[vcvtmq_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtmq_u32_f32*)<br/>[vcvtmq_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtmq_u64_f64*)<br/>[vcvtms_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtms_s32_f32*)<br/>[vcvtms_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtms_u32_f32*)<br/>[vcvtmd_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtmd_s64_f64*)<br/>[vcvtmd_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtmd_u64_f64*)<br/></details>|
|
||||
|vcvtn|Convert to integer, rounding to nearest with ties to even|<details><summary>Click here to expand the API list</summary>[vcvtn_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtn_s32_f32*)<br/>[vcvtn_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtn_s64_f64*)<br/>[vcvtn_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtn_u32_f32*)<br/>[vcvtn_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtn_u64_f64*)<br/>[vcvtnq_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtnq_s32_f32*)<br/>[vcvtnq_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtnq_s64_f64*)<br/>[vcvtnq_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtnq_u32_f32*)<br/>[vcvtnq_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtnq_u64_f64*)<br/>[vcvtns_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtns_s32_f32*)<br/>[vcvtns_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtns_u32_f32*)<br/>[vcvtnd_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtnd_s64_f64*)<br/>[vcvtnd_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtnd_u64_f64*)<br/></details>|
|
||||
|vcvtp|Convert to integer, rounding towards plus infinity|<details><summary>Click here to expand the API list</summary>[vcvtp_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtp_s32_f32*)<br/>[vcvtp_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtp_s64_f64*)<br/>[vcvtp_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtp_u32_f32*)<br/>[vcvtp_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtp_u64_f64*)<br/>[vcvtpq_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtpq_s32_f32*)<br/>[vcvtpq_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtpq_s64_f64*)<br/>[vcvtpq_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtpq_u32_f32*)<br/>[vcvtpq_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtpq_u64_f64*)<br/>[vcvtps_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtps_s32_f32*)<br/>[vcvtps_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtps_u32_f32*)<br/>[vcvtpd_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtpd_s64_f64*)<br/>[vcvtpd_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtpd_u64_f64*)<br/></details>|
|
||||
|vcvtx|Convert to lower precision,<br/> rounding to nearest with ties to odd|<details><summary>Click here to expand the API list</summary>[vcvtx_f32_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtx_f32_f64*)<br/>[vcvtx_high_f32_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtx_high_f32_f64*)<br/>[vcvtxd_f32_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtxd_f32_f64*)<br/></details>|
|
||||
|vcvt_n|Convert to/from fixed point, rounding towards zero|<details><summary>Click here to expand the API list</summary>[vcvt_n_f32_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_f32_s32*)<br/>[vcvt_n_f32_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_f32_u32*)<br/>[vcvt_n_f64_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_f64_s64*)<br/>[vcvt_n_f64_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_f64_u64*)<br/>[vcvt_n_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_s32_f32*)<br/>[vcvt_n_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_s64_f64*)<br/>[vcvt_n_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_u32_f32*)<br/>[vcvt_n_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvt_n_u64_f64*)<br/>[vcvtq_n_f32_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_f32_s32*)<br/>[vcvtq_n_f32_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_f32_u32*)<br/>[vcvtq_n_f64_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_f64_s64*)<br/>[vcvtq_n_f64_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_f64_u64*)<br/>[vcvtq_n_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_s32_f32*)<br/>[vcvtq_n_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_s64_f64*)<br/>[vcvtq_n_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_u32_f32*)<br/>[vcvtq_n_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtq_n_u64_f64*)<br/>[vcvts_n_f32_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_n_f32_s32*)<br/>[vcvts_n_f32_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_n_f32_u32*)<br/>[vcvts_n_s32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_n_s32_f32*)<br/>[vcvts_n_u32_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvts_n_u32_f32*)<br/>[vcvtd_n_f64_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_n_f64_s64*)<br/>[vcvtd_n_f64_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_n_f64_u64*)<br/>[vcvtd_n_s64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_n_s64_f64*)<br/>[vcvtd_n_u64_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vcvtd_n_u64_f64*)<br/></details>|
|
||||
|vrnd|Round to Integral, toward zero|<details><summary>Click here to expand the API list</summary>[vrnd_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrnd_f32*)<br/> [vrnd_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrnd_f64*)<br/> [vrndq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndq_f32*)<br/> [vrndq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndq_f64*)<br/></details>|
|
||||
|vrnda|Round to Integral, with ties to away|<details><summary>Click here to expand the API list</summary>[vrnda_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrnda_f32*)<br/> [vrnda_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrnda_f64*)<br/> [vrndaq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndaq_f32*)<br/> [vrndaq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndaq_f64*)<br/></details>|
|
||||
|vrndi|Round to Integral, using current rounding mode|<details><summary>Click here to expand the API list</summary>[vrndi_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndi_f32*)<br/> [vrndi_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndi_f64*)<br/> [vrndiq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndiq_f32*)<br/> [vrndiq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndiq_f64*)<br/></details>|
|
||||
|vrndm|Round to Integral, towards minus infinity|<details><summary>Click here to expand the API list</summary>[vrndm_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndm_f32*)<br/> [vrndm_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndm_f64*)<br/> [vrndmq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndmq_f32*)<br/> [vrndmq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndmq_f64*)<br/></details>|
|
||||
|vrndn|Round to Integral, with ties to even|<details><summary>Click here to expand the API list</summary>[vrndn_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndn_f32*)<br/> [vrndn_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndn_f64*)<br/> [vrndnq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndnq_f32*)<br/> [vrndnq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndnq_f64*)<br/> [vrndns_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndns_f32*)<br/></details>|
|
||||
|vrndp|Round to Integral, towards plus infinity|<details><summary>Click here to expand the API list</summary>[vrndp_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndp_f32*)<br/> [vrndp_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndp_f64*)<br/> [vrndpq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndpq_f32*)<br/> [vrndpq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndpq_f64*)<br/></details>|
|
||||
|vrndx|Round to Integral exact|<details><summary>Click here to expand the API list</summary>[vrndx_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndx_f32*)<br/> [vrndx_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndx_f64*)<br/> [vrndxq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndxq_f32*)<br/> [vrndxq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vrndxq_f64*)<br/></details>|
|
||||
|
||||
|
||||
### Load and store
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vld1|Load vector from memory|<details><summary>Click here to expand the API list</summary>[vld1_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_f32*)<br/>[vld1_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_f64*)<br/>[vld1_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_s16*)<br/>[vld1_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_s32*)<br/>[vld1_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_s64*)<br/>[vld1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_s8*)<br/>[vld1_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_u16*)<br/>[vld1_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_u32*)<br/>[vld1_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_u64*)<br/>[vld1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1_u8*)<br/>[vld1q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_f32*)<br/>[vld1q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_f64*)<br/>[vld1q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_s16*)<br/>[vld1q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_s32*)<br/>[vld1q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_s64*)<br/>[vld1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_s8*)<br/>[vld1q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_u16*)<br/>[vld1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_u32*)<br/>[vld1q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_u64*)<br/>[vld1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vld1q_u8*)<br/></details>|
|
||||
|vst1|Store vector to memory|<details><summary>Click here to expand the API list</summary>[vst1_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_f32*)<br/>[vst1_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_f64*)<br/>[vst1_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_s16*)<br/>[vst1_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_s32*)<br/>[vst1_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_s64*)<br/>[vst1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_s8*)<br/>[vst1_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_u16*)<br/>[vst1_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_u32*)<br/>[vst1_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_u64*)<br/>[vst1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1_u8*)<br/>[vst1q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_f32*)<br/>[vst1q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_f64*)<br/>[vst1q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_s16*)<br/>[vst1q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_s32*)<br/>[vst1q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_s64*)<br/>[vst1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_s8*)<br/>[vst1q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_u16*)<br/>[vst1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_u32*)<br/>[vst1q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_u64*)<br/>[vst1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vst1q_u8*)<br/></details>|
|
||||
|vget_lane|Get vector element|<details><summary>Click here to expand the API list</summary>[vget_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_f32*)<br/>[vget_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_f64*)<br/>[vget_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_s16*)<br/>[vget_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_s32*)<br/>[vget_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_s64*)<br/>[vget_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_s8*)<br/>[vget_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_u16*)<br/>[vget_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_u32*)<br/>[vget_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_u64*)<br/>[vget_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vget_lane_u8*)<br/>[vgetq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_f32*)<br/>[vgetq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_f64*)<br/>[vgetq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_s16*)<br/>[vgetq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_s32*)<br/>[vgetq_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_s64*)<br/>[vgetq_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_s8*)<br/>[vgetq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_u16*)<br/>[vgetq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_u32*)<br/>[vgetq_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_u64*)<br/>[vgetq_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vgetq_lane_u8*)<br/></details>|
|
||||
|vset_lane|Set vector element|<details><summary>Click here to expand the API list</summary>[vset_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_f32*)<br/>[vset_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_f64*)<br/>[vset_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_s16*)<br/>[vset_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_s32*)<br/>[vset_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_s64*)<br/>[vset_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_s8*)<br/>[vset_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_u16*)<br/>[vset_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_u32*)<br/>[vset_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_u64*)<br/>[vset_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vset_lane_u8*)<br/>[vsetq_lane_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_f32*)<br/>[vsetq_lane_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_f64*)<br/>[vsetq_lane_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_s16*)<br/>[vsetq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_s32*)<br/>[vsetq_lane_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_s64*)<br/>[vsetq_lane_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_s8*)<br/>[vsetq_lane_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_u16*)<br/>[vsetq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_u32*)<br/>[vsetq_lane_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_u64*)<br/>[vsetq_lane_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vsetq_lane_u8*)<br/></details>|
|
||||
|
||||
### Permutation
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vext|Extract vector from pair of vectors|<details><summary>Click here to expand the API list</summary>[vext_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_f32*)<br/>[vext_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_f64*)<br/>[vext_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_s16*)<br/>[vext_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_s32*)<br/>[vext_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_s64*)<br/>[vext_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_s8*)<br/>[vext_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_u16*)<br/>[vext_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_u32*)<br/>[vext_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_u64*)<br/>[vext_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vext_u8*)<br/>[vextq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_f32*)<br/>[vextq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_f64*)<br/>[vextq_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_s16*)<br/>[vextq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_s32*)<br/>[vextq_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_s64*)<br/>[vextq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_s8*)<br/>[vextq_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_u16*)<br/>[vextq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_u32*)<br/>[vextq_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_u64*)<br/>[vextq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vextq_u8*)<br/></details>|
|
||||
|vtbl1|Table vector Lookup|<details><summary>Click here to expand the API list</summary>[vtbl1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtbl1_s8*)<br/>[vtbl1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtbl1_u8*)<br/></details>|
|
||||
|vtbx1|Table vector lookup extension|<details><summary>Click here to expand the API list</summary>[vtbx1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtbx1_s8*)<br/>[vtbx1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtbx1_u8*)<br/></details>|
|
||||
|vqtbl1|Table vector Lookup|<details><summary>Click here to expand the API list</summary>[vqtbl1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbl1_s8*)<br/> [vqtbl1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbl1_u8*)<br/> [vqtbl1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbl1q_s8*)<br/> [vqtbl1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbl1q_u8*)<br/></details>|
|
||||
|vqtbx1|Table vector lookup extension|<details><summary>Click here to expand the API list</summary>[vqtbx1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbx1_s8*)<br/> [vqtbx1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbx1_u8*)<br/> [vqtbx1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbx1q_s8*)<br/> [vqtbx1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vqtbx1q_u8*)<br/></details>|
|
||||
|vrbit|Reverse bit order|<details><summary>Click here to expand the API list</summary>[vrbit_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrbit_s8*)<br/> [vrbit_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrbit_u8*)<br/> [vrbitq_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrbitq_s8*)<br/> [vrbitq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrbitq_u8*)<br/></details>|
|
||||
|vrev16|Reverse elements in 16-bit halfwords|<details><summary>Click here to expand the API list</summary>[vrev16_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev16_s8*)<br/>[vrev16_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev16_u8*)<br/>[vrev16q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev16q_s8*)<br/>[vrev16q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev16q_u8*)<br/></details>|
|
||||
|vrev32|Reverse elements in 32-bit words|<details><summary>Click here to expand the API list</summary>[vrev32_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32_s16*)<br/>[vrev32_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32_s8*)<br/>[vrev32_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32_u16*)<br/>[vrev32_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32_u8*)<br/>[vrev32q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32q_s16*)<br/>[vrev32q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32q_s8*)<br/>[vrev32q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32q_u16*)<br/>[vrev32q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev32q_u8*)<br/></details>|
|
||||
|vrev64|Reverse elements in 64-bit doublewords|<details><summary>Click here to expand the API list</summary>[vrev64_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_f32*)<br/>[vrev64_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_s16*)<br/>[vrev64_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_s32*)<br/>[vrev64_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_s8*)<br/>[vrev64_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_u16*)<br/>[vrev64_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_u32*)<br/>[vrev64_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64_u8*)<br/>[vrev64q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_f32*)<br/>[vrev64q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_s16*)<br/>[vrev64q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_s32*)<br/>[vrev64q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_s8*)<br/>[vrev64q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_u16*)<br/>[vrev64q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_u32*)<br/>[vrev64q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vrev64q_u8*)<br/></details>|
|
||||
|vtrn1|Transpose vectors (primary)|<details><summary>Click here to expand the API list</summary>[vtrn1_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_f32*)<br/>[vtrn1_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_s16*)<br/>[vtrn1_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_s32*)<br/>[vtrn1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_s8*)<br/>[vtrn1_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_u16*)<br/>[vtrn1_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_u32*)<br/>[vtrn1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1_u8*)<br/>[vtrn1q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_f32*)<br/>[vtrn1q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_f64*)<br/>[vtrn1q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_s16*)<br/>[vtrn1q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_s32*)<br/>[vtrn1q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_s64*)<br/>[vtrn1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_s8*)<br/>[vtrn1q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_u16*)<br/>[vtrn1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_u32*)<br/>[vtrn1q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_u64*)<br/>[vtrn1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn1q_u8*)<br/></details>|
|
||||
|vtrn2|Transpose vectors (secondary)|<details><summary>Click here to expand the API list</summary>[vtrn2_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_f32*)<br/>[vtrn2_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_s16*)<br/>[vtrn2_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_s32*)<br/>[vtrn2_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_s8*)<br/>[vtrn2_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_u16*)<br/>[vtrn2_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_u32*)<br/>[vtrn2_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2_u8*)<br/>[vtrn2q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_f32*)<br/>[vtrn2q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_f64*)<br/>[vtrn2q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_s16*)<br/>[vtrn2q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_s32*)<br/>[vtrn2q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_s64*)<br/>[vtrn2q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_s8*)<br/>[vtrn2q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_u16*)<br/>[vtrn2q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_u32*)<br/>[vtrn2q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_u64*)<br/>[vtrn2q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vtrn2q_u8*)<br/></details>|
|
||||
|vzip1|Zip vectors (primary)|<details><summary>Click here to expand the API list</summary>[vzip1_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_f32*)<br/>[vzip1_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_s16*)<br/>[vzip1_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_s32*)<br/>[vzip1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_s8*)<br/>[vzip1_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_u16*)<br/>[vzip1_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_u32*)<br/>[vzip1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1_u8*)<br/>[vzip1q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_f32*)<br/>[vzip1q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_f64*)<br/>[vzip1q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_s16*)<br/>[vzip1q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_s32*)<br/>[vzip1q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_s64*)<br/>[vzip1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_s8*)<br/>[vzip1q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_u16*)<br/>[vzip1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_u32*)<br/>[vzip1q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_u64*)<br/>[vzip1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip1q_u8*)<br/></details>|
|
||||
|vzip2|Zip vectors (secondary)|<details><summary>Click here to expand the API list</summary>[vzip2_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_f32*)<br/>[vzip2_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_s16*)<br/>[vzip2_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_s32*)<br/>[vzip2_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_s8*)<br/>[vzip2_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_u16*)<br/>[vzip2_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_u32*)<br/>[vzip2_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2_u8*)<br/[vzip2q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_f32*)<br/>[vzip2q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_f64*)<br/>[vzip2q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_s16*)<br/>[vzip2q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_s32*)<br/>[vzip2q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_s64*)<br/>[vzip2q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_s8*)<br/>[vzip2q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_u16*)<br/>[vzip2q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_u32*)<br/>[vzip2q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_u64*)<br/>[vzip2q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vzip2q_u8*)<br/></details>|
|
||||
|vuzp1|Unzip vectors (primary)|<details><summary>Click here to expand the API list</summary>[vuzp1_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_f32*)<br/>[vuzp1_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_s16*)<br/>[vuzp1_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_s32*)<br/>[vuzp1_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_s8*)<br/>[vuzp1_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_u16*)<br/>[vuzp1_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_u32*)<br/>[vuzp1_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1_u8*)<br/>[vuzp1q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_f32*)<br/>[vuzp1q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_f64*)<br/>[vuzp1q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_s16*)<br/>[vuzp1q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_s32*)<br/>[vuzp1q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_s64*)<br/>[vuzp1q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_s8*)<br/>[vuzp1q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_u16*)<br/>[vuzp1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_u32*)<br/>[vuzp1q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_u64*)<br/>[vuzp1q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp1q_u8*)<br/></details>|
|
||||
|vuzp2|Unzip vectors (secondary)|<details><summary>Click here to expand the API list</summary>[vuzp2_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_f32*)<br/>[vuzp2_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_s16*)<br/>[vuzp2_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_s32*)<br/>[vuzp2_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_s8*)<br/>[vuzp2_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_u16*)<br/>[vuzp2_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_u32*)<br/>[vuzp2_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2_u8*)<br/>[vuzp2q_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_f32*)<br/>[vuzp2q_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_f64*)<br/>[vuzp2q_s16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_s16*)<br/>[vuzp2q_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_s32*)<br/>[vuzp2q_s64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_s64*)<br/>[vuzp2q_s8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_s8*)<br/>[vuzp2q_u16](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_u16*)<br/>[vuzp2q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_u32*)<br/>[vuzp2q_u64](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_u64*)<br/>[vuzp2q_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vuzp2q_u8*)<br/></details>|
|
||||
|
||||
### Cryptographic
|
||||
|
||||
|Operation|APIs|
|
||||
|---|---|
|
||||
|CRC32|<details><summary>Click here to expand the API list</summary>[__crc32b](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32b*)<br/>[__crc32cb](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32cb*)<br/>[__crc32cd](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32cd*)<br/>[__crc32ch](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32ch*)<br/>[__crc32cw](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32cw*)<br/>[__crc32d](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32d*)<br/>[__crc32h](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32h*)<br/>[__crc32w](xref:Unity.Burst.Intrinsics.Arm.Neon.__crc32w*)<br/></details>|
|
||||
|SHA1|<details><summary>Click here to expand the API list</summary>[vsha1cq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha1cq_u32*)<br/>[vsha1h_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha1h_u32*)<br/>[vsha1mq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha1mq_u32*)<br/>[vsha1pq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha1pq_u32*)<br/>[vsha1su0q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha1su0q_u32*)<br/>[vsha1su1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha1su1q_u32*)<br/></details>|
|
||||
|SHA256|<details><summary>Click here to expand the API list</summary>[vsha256h2q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha256h2q_u32*)<br/>[vsha256hq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha256hq_u32*)<br/>[vsha256su0q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha256su0q_u32*)<br/>[vsha256su1q_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsha256su1q_u32*)<br/></details>|
|
||||
|AES|<details><summary>Click here to expand the API list</summary>[vaesdq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaesdq_u8*)<br/>[vaeseq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaeseq_u8*)<br/>[vaesimcq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaesimcq_u8*)<br/>[vaesmcq_u8](xref:Unity.Burst.Intrinsics.Arm.Neon.vaesmcq_u8*)<br/></details>|
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
|Operation|Description|APIs|
|
||||
|---|---|---|
|
||||
|vsqrt|Square root|<details><summary>Click here to expand the API list</summary>[vsqrt_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqrt_f32*)<br/> [vsqrt_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqrt_f64*)<br/> [vsqrtq_f32](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqrtq_f32*)<br/> [vsqrtq_f64](xref:Unity.Burst.Intrinsics.Arm.Neon.vsqrtq_f64*)<br/></details>|
|
||||
|vdot|Dot product|<details><summary>Click here to expand the API list</summary>[vdot_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdot_s32*)<br/> [vdot_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdot_u32*)<br/> [vdotq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdotq_s32*)<br/> [vdotq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdotq_u32*)<br/></details>|
|
||||
|vdot_lane|Dot product|<details><summary>Click here to expand the API list</summary>[vdot_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdot_lane_s32*)<br/> [vdot_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdot_lane_u32*)<br/> [vdot_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdot_laneq_s32*)<br/> [vdot_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdot_laneq_u32*)<br/> [vdotq_lane_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdotq_lane_s32*)<br/> [vdotq_lane_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdotq_lane_u32*)<br/> [vdotq_laneq_s32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdotq_laneq_s32*)<br/> [vdotq_laneq_u32](xref:Unity.Burst.Intrinsics.Arm.Neon.vdotq_laneq_u32*)<br/></details>|
|
||||
@@ -0,0 +1,113 @@
|
||||
# Processor specific SIMD extensions
|
||||
|
||||
Burst exposes all Intel SIMD intrinsics from SSE up to and including AVX2 in the [`Unity.Burst.Intrinsics.X86`](xref:Unity.Burst.Intrinsics.X86) family of nested classes. The [`Unity.Burst.Intrinsics.Arm.Neon`](xref:Unity.Burst.Intrinsics.Arm.Neon) class provides intrinsics for Arm Neon's Armv7, Armv8, and Armv8.2 (RDMA, crypto, dotprod).
|
||||
|
||||
## Organizing your code
|
||||
|
||||
You should statically import these intrinsics because they contain plain static functions:
|
||||
|
||||
```c#
|
||||
using static Unity.Burst.Intrinsics.X86;
|
||||
using static Unity.Burst.Intrinsics.X86.Sse;
|
||||
using static Unity.Burst.Intrinsics.X86.Sse2;
|
||||
using static Unity.Burst.Intrinsics.X86.Sse3;
|
||||
using static Unity.Burst.Intrinsics.X86.Ssse3;
|
||||
using static Unity.Burst.Intrinsics.X86.Sse4_1;
|
||||
using static Unity.Burst.Intrinsics.X86.Sse4_2;
|
||||
using static Unity.Burst.Intrinsics.X86.Popcnt;
|
||||
using static Unity.Burst.Intrinsics.X86.Avx;
|
||||
using static Unity.Burst.Intrinsics.X86.Avx2;
|
||||
using static Unity.Burst.Intrinsics.X86.Fma;
|
||||
using static Unity.Burst.Intrinsics.X86.F16C;
|
||||
using static Unity.Burst.Intrinsics.X86.Bmi1;
|
||||
using static Unity.Burst.Intrinsics.X86.Bmi2;
|
||||
using static Unity.Burst.Intrinsics.Arm.Neon;
|
||||
```
|
||||
|
||||
Burst CPU intrinsics are translated into specific CPU instructions. However, Burst has a special compiler pass which makes sure that your CPU target set in `Burst AOT Settings` is compatible with the intrinsics used in your code. This ensures you don't try to call unsupported instructions (for example, AArch64 Neon on an Intel CPU or AVX2 instructions on an SSE4 CPU), which causes the process to abort with an "Invalid instruction" exception. A compiler error is generated if the check fails.
|
||||
|
||||
However, if you want to provide several code paths with different CPU targets, or to make sure your intrinsics code is compatible with any target CPU, you can wrap your intrinsics code with the followinf property checks:
|
||||
|
||||
* [IsNeonSupported](xref:Unity.Burst.Intrinsics.Arm.Neon.IsNeonSupported)
|
||||
* [IsNeonArmv82FeaturesSupported](xref:Unity.Burst.Intrinsics.Arm.Neon.IsNeonArmv82FeaturesSupported)
|
||||
* [IsNeonCryptoSupported](xref:Unity.Burst.Intrinsics.Arm.Neon.IsNeonCryptoSupported)
|
||||
* [IsNeonDotProdSupported](xref:Unity.Burst.Intrinsics.Arm.Neon.IsNeonDotProdSupported)
|
||||
* [IsNeonRDMASupported](xref:Unity.Burst.Intrinsics.Arm.Neon.IsNeonRDMASupported)
|
||||
|
||||
For example:
|
||||
|
||||
```c#
|
||||
if (IsAvx2Supported)
|
||||
{
|
||||
// Code path for AVX2 instructions
|
||||
}
|
||||
else if (IsSse42Supported)
|
||||
{
|
||||
// Code path for SSE4.2 instructions
|
||||
}
|
||||
else if (IsNeonArmv82FeaturesSupported)
|
||||
{
|
||||
// Code path for Armv8.2 Neon instructions
|
||||
}
|
||||
else if (IsNeonSupported)
|
||||
{
|
||||
// Code path for Arm Neon instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback path for everything else
|
||||
}
|
||||
```
|
||||
|
||||
These branches don't affect performance. Burst evaluates the `IsXXXSupported` properties at compile-time and eliminates unsupported branches as dead code, while the active branch stays there without the if check. Later feature levels implicitly include the previous ones, so you should organize tests from most recent to oldest. Burst emits compile-time errors if you've used intrinsics that aren't part of the current compilation target. Burst doesn't bracket these with a feature level test, which helps you to narrow in on what to put inside a feature test.
|
||||
|
||||
If you run your application in .NET, Mono or IL2CPP without Burst enabled, all the `IsXXXSupported` properties return `false`. However, if you skip the test you can still run a reference version of most intrinsics in Mono (exceptions listed below), which is helpful if you need to use the managed debugger. Reference implementations are slow and only intended for managed debugging.
|
||||
|
||||
>[!IMPORTANT]
|
||||
>There isn't a reference managed implementation of Arm Neon intrinsics. This means that you can't use the technique mentioned in the previous paragraph to step through the intrinsics in Mono. FMA intrinsics that operate on doubles don't have a software fallback because of the inherit complexity in emulating fused 64-bit floating point math.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Intrinsics use the types `v64` (Arm only), `v128` and `v256`, which represent a 64-bit, 128-bit or 256-bit vector respectively. For example, given a `NativeArray<float>` and a `Lut` lookup table of v128 shuffle masks, a code fragment like this performs lane left packing, demonstrating the use of vector load/store reinterpretation and direct intrinsic calls:
|
||||
|
||||
```c#
|
||||
v128 a = Input.ReinterpretLoad<v128>(i);
|
||||
v128 mask = cmplt_ps(a, Limit);
|
||||
int m = movemask_ps(a);
|
||||
v128 packed = shuffle_epi8(a, Lut[m]);
|
||||
Output.ReinterpretStore(outputIndex, packed);
|
||||
outputIndex += popcnt_u32((uint)m);
|
||||
```
|
||||
|
||||
## Intel intrinsics
|
||||
|
||||
The Intel intrinsics API mirrors the [C/C++ Intel instrinsics API](https://software.intel.com/sites/landingpage/IntrinsicsGuide/), with a the following differences:
|
||||
|
||||
* All 128-bit vector types (`__m128`, `__m128i` and `__m128d`) are collapsed into `v128`
|
||||
* All 256-bit vector types (`__m256`, `__m256i` and `__m256d`) are collapsed into `v256`
|
||||
* All `_mm` prefixes on instructions and macros are dropped, because C# has namespaces
|
||||
* All bitfield constants (for example, rounding mode selection) are replaced with C# bitflag enum values
|
||||
|
||||
## Arm Neon intrinsics
|
||||
|
||||
The Arm Neon intrinsics API mirrors the [Arm C Language Extensions](https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics), with the following differences:
|
||||
|
||||
* All vector types are collapsed into `v64` and `v128`, becoming typeless. This means that the vector type must contain expected element types and count when calling an API.
|
||||
* The `*x2`, `*x3`, `*x4` vector types aren't supported.
|
||||
* `poly*` types aren't supported.
|
||||
* `reinterpret*` functions aren't supported (they aren't needed because of the usage of `v64` and `v128` vector types).
|
||||
* Intrinsic usage is only supported on Armv8 (64-bit) hardware.
|
||||
|
||||
Burst's CPU intrinsics use typeless vectors. Because of this, Burst doesn't perform any type checks. For example, if you call an intrinsic which processes 4 ints on a vector that was initialized with 4 floats, then there's no compiler error. The vector types have fields that represent every element type, in a union-like struct, which gives you flexibility to use these intrinsics in a way that best fits your code.
|
||||
|
||||
Arm Neon C intrinsics (ACLE) use typed vectors, for example int32x4_t, and has special APIs (for example, `reinterpret_\*`) to convert to a vector of another element type. Burst CPU intrinsics vectors are typeless, so these APIs are not needed. The following APIs provide the equivalent functionality:
|
||||
|
||||
* [v64 (Arm Neon only)](xref:Unity.Burst.Intrinsics.v64)
|
||||
* [v128](xref:Unity.Burst.Intrinsics.v128)
|
||||
* [v256](xref:Unity.Burst.Intrinsics.v256)
|
||||
|
||||
|
||||
For a categorized index of Arm Neon intrinsics supported in Burst, see the [Arm Neon intrinsics reference](csharp-burst-intrinsics-neon.md).
|
||||
@@ -0,0 +1,12 @@
|
||||
# Burst intrinsics overview
|
||||
|
||||
Burst provides low level intrinsics in the [`Unity.Burst.Intrinsics`](xref:Unity.Burst.Intrinsics) namespace. This is useful if you know how to write single instruction, multiple data (SIMD) assembly code, and you want to get extra performance from Burst code. For most use cases, you won't need to use these.
|
||||
|
||||
This section contains the following information
|
||||
|
||||
|**Page**|**Description**|
|
||||
|---|---|
|
||||
|[Burst intrinsics Common class](csharp-burst-intrinsics-common.md)|Overview of the `Burst.Intrinsics.Common` class, which provides functionality shared across the hardware targets that Burst supports. |
|
||||
|[DllImport and internal calls](csharp-burst-intrinsics-dllimport.md)|Overview of `[DllImport]`, which is for calling native functions.|
|
||||
|[Processor specific SIMD extensions](csharp-burst-intrinsics-processors.md)|Overview of the Intel and Arm Neon intrinsics.|
|
||||
|[Arm Neon intrinsics reference](csharp-burst-intrinsics-neon.md)|Reference of the methods in the `Burst.Intrinsics.Arm.Neon` class.|
|
||||
@@ -0,0 +1,52 @@
|
||||
# Calling Burst-compiled code
|
||||
|
||||
You can call Burst-compiled methods direct from managed code. Calling generic methods or methods whose declaring type is generic isn't supported, otherwise the rules as for [function pointers](csharp-function-pointers.md) apply. However, you don't need to worry about the extra boiler plate needed for function pointers.
|
||||
|
||||
The following example shows a Burst-compiled utility class. Because it uses structs, it passes by reference per the [function pointer](csharp-function-pointers.md) rules.
|
||||
|
||||
```c#
|
||||
[BurstCompile]
|
||||
public static class MyBurstUtilityClass
|
||||
{
|
||||
[BurstCompile]
|
||||
public static void BurstCompiled_MultiplyAdd(in float4 mula, in float4 mulb, in float4 add, out float4 result)
|
||||
{
|
||||
result = mula * mulb + add;
|
||||
}
|
||||
}
|
||||
```
|
||||
Use this method from managed code like so:
|
||||
|
||||
```c#
|
||||
public class MyMonoBehaviour : MonoBehaviour
|
||||
{
|
||||
void Start()
|
||||
{
|
||||
var mula = new float4(1, 2, 3, 4);
|
||||
var mulb = new float4(-1,1,-1,1);
|
||||
var add = new float4(99,0,0,0);
|
||||
MyBurstUtilityClass.BurstCompiled_MultiplyAdd(mula, mulb, add, out var result);
|
||||
Debug.Log(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you attach this script to an object and run it, `float4(98f, 2f, -3f, 4f)` is printed to the log.
|
||||
|
||||
## Code transformation
|
||||
|
||||
Burst uses IL Post Processing to automatically transform the code into a function pointer and call. For more information, see the documentation on [Function pointers](csharp-function-pointers.md).
|
||||
|
||||
To disable the direct call transformation, add`DisableDirectCall = true` to the BurstCompile options. This prevents the Post Processor from running on the code:
|
||||
|
||||
```c#
|
||||
[BurstCompile]
|
||||
public static class MyBurstUtilityClass
|
||||
{
|
||||
[BurstCompile(DisableDirectCall = true)]
|
||||
public static void BurstCompiled_MultiplyAdd(in float4 mula, in float4 mulb, in float4 add, out float4 result)
|
||||
{
|
||||
result = mula * mulb + add;
|
||||
}
|
||||
}
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user