/// Evaluates to true at compile time if SSE intrinsics are supported.
/// </summary>
publicstaticboolIsSseSupported{get{returnfalse;}}
/// <summary>
/// Load 128-bits (composed of 4 packed single-precision (32-bit)
/// floating-point elements) from memory into dst.
/// </summary>
/// <remarks>
/// Burst will always generate unaligned loads.
/// </remarks>
/// <param name="ptr">Pointer</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128load_ps(void*ptr)
{
returnGenericCSharpLoad(ptr);
}
/// <summary>
/// Load 128-bits (composed of 4 packed single-precision (32-bit)
/// floating-point elements) from memory into dst. mem_addr does
/// not need to be aligned on any particular boundary.
/// </summary>
/// <param name="ptr">Pointer</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128loadu_ps(void*ptr)
{
returnGenericCSharpLoad(ptr);
}
/// <summary>
/// Store 128-bits (composed of 4 packed single-precision (32-bit)
/// floating-point elements) from a into memory.
/// </summary>
/// <remarks>
/// Burst will always generate unaligned stores.
/// </remarks>
/// <param name="ptr">Pointer</param>
/// <param name="val">Value vector</param>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticvoidstore_ps(void*ptr,v128val)
{
GenericCSharpStore(ptr,val);
}
/// <summary>
/// Store 128-bits (composed of 4 packed single-precision (32-bit)
/// floating-point elements) from a into memory. mem_addr does not
/// need to be aligned on any particular boundary.
/// </summary>
/// <param name="ptr">Pointer</param>
/// <param name="val">Value vector</param>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticvoidstoreu_ps(void*ptr,v128val)
{
GenericCSharpStore(ptr,val);
}
/// <summary>
/// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a" into memory using a non-temporal memory hint. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception will be generated.
/// </summary>
/// <param name="mem_addr">Memory address</param>
/// <param name="a">Vector a</param>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticvoidstream_ps(void*mem_addr,v128a)
{
GenericCSharpStore(mem_addr,a);
}
// _mm_cvtsi32_ss
/// <summary> Convert the 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">32-bit integer</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cvtsi32_ss(v128a,intb)
{
v128dst=a;
dst.Float0=b;
returndst;
}
// _mm_cvtsi64_ss
/// <summary> Convert the 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">64-bit integer</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cvtsi64_ss(v128a,longb)
{
v128dst=a;
dst.Float0=b;
returndst;
}
// _mm_add_ss
/// <summary> Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128add_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=dst.Float0+b.Float0;
returndst;
}
// _mm_add_ps
/// <summary> Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128add_ps(v128a,v128b)
{
v128dst=a;
dst.Float0+=b.Float0;
dst.Float1+=b.Float1;
dst.Float2+=b.Float2;
dst.Float3+=b.Float3;
returndst;
}
// _mm_sub_ss
/// <summary> Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128sub_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=a.Float0-b.Float0;
returndst;
}
// _mm_sub_ps
/// <summary> Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128sub_ps(v128a,v128b)
{
v128dst=a;
dst.Float0-=b.Float0;
dst.Float1-=b.Float1;
dst.Float2-=b.Float2;
dst.Float3-=b.Float3;
returndst;
}
// _mm_mul_ss
/// <summary> Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128mul_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=a.Float0*b.Float0;
returndst;
}
// _mm_mul_ps
/// <summary> Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128mul_ps(v128a,v128b)
{
v128dst=a;
dst.Float0*=b.Float0;
dst.Float1*=b.Float1;
dst.Float2*=b.Float2;
dst.Float3*=b.Float3;
returndst;
}
// _mm_div_ss
/// <summary> Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128div_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=a.Float0/b.Float0;
returndst;
}
// _mm_div_ps
/// <summary> Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128div_ps(v128a,v128b)
{
v128dst=a;
dst.Float0/=b.Float0;
dst.Float1/=b.Float1;
dst.Float2/=b.Float2;
dst.Float3/=b.Float3;
returndst;
}
// _mm_sqrt_ss
/// <summary> Compute the square root of the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128sqrt_ss(v128a)
{
v128dst=a;
dst.Float0=(float)Math.Sqrt(a.Float0);
returndst;
}
// _mm_sqrt_ps
/// <summary> Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128sqrt_ps(v128a)
{
v128dst=default(v128);
dst.Float0=(float)Math.Sqrt(a.Float0);
dst.Float1=(float)Math.Sqrt(a.Float1);
dst.Float2=(float)Math.Sqrt(a.Float2);
dst.Float3=(float)Math.Sqrt(a.Float3);
returndst;
}
// _mm_rcp_ss
/// <summary> Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 1.5*2^-12. </summary>
/// <param name="a">Vector a</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128rcp_ss(v128a)
{
v128dst=a;
dst.Float0=1.0f/a.Float0;
returndst;
}
// _mm_rcp_ps
/// <summary> Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 1.5*2^-12. </summary>
/// <param name="a">Vector a</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128rcp_ps(v128a)
{
v128dst=default(v128);
dst.Float0=1.0f/a.Float0;
dst.Float1=1.0f/a.Float1;
dst.Float2=1.0f/a.Float2;
dst.Float3=1.0f/a.Float3;
returndst;
}
// _mm_rsqrt_ss
/// <summary> Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 1.5*2^-12. </summary>
/// <param name="a">Vector a</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128rsqrt_ss(v128a)
{
v128dst=a;
dst.Float0=1.0f/(float)Math.Sqrt(a.Float0);
returndst;
}
// _mm_rsqrt_ps
/// <summary> Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 1.5*2^-12. </summary>
/// <param name="a">Vector a</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128rsqrt_ps(v128a)
{
v128dst=default(v128);
dst.Float0=1.0f/(float)Math.Sqrt(a.Float0);
dst.Float1=1.0f/(float)Math.Sqrt(a.Float1);
dst.Float2=1.0f/(float)Math.Sqrt(a.Float2);
dst.Float3=1.0f/(float)Math.Sqrt(a.Float3);
returndst;
}
// _mm_min_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128min_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=Math.Min(a.Float0,b.Float0);
returndst;
}
// _mm_min_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128min_ps(v128a,v128b)
{
v128dst=default(v128);
dst.Float0=Math.Min(a.Float0,b.Float0);
dst.Float1=Math.Min(a.Float1,b.Float1);
dst.Float2=Math.Min(a.Float2,b.Float2);
dst.Float3=Math.Min(a.Float3,b.Float3);
returndst;
}
// _mm_max_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128max_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=Math.Max(a.Float0,b.Float0);
returndst;
}
// _mm_max_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128max_ps(v128a,v128b)
{
v128dst=default(v128);
dst.Float0=Math.Max(a.Float0,b.Float0);
dst.Float1=Math.Max(a.Float1,b.Float1);
dst.Float2=Math.Max(a.Float2,b.Float2);
dst.Float3=Math.Max(a.Float3,b.Float3);
returndst;
}
// _mm_and_ps
/// <summary> Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128and_ps(v128a,v128b)
{
v128dst=a;
dst.UInt0&=b.UInt0;
dst.UInt1&=b.UInt1;
dst.UInt2&=b.UInt2;
dst.UInt3&=b.UInt3;
returndst;
}
// _mm_andnot_ps
/// <summary> Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128andnot_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=(~a.UInt0)&b.UInt0;
dst.UInt1=(~a.UInt1)&b.UInt1;
dst.UInt2=(~a.UInt2)&b.UInt2;
dst.UInt3=(~a.UInt3)&b.UInt3;
returndst;
}
// _mm_or_ps
/// <summary> Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128or_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=a.UInt0|b.UInt0;
dst.UInt1=a.UInt1|b.UInt1;
dst.UInt2=a.UInt2|b.UInt2;
dst.UInt3=a.UInt3|b.UInt3;
returndst;
}
// _mm_xor_ps
/// <summary> Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128xor_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=a.UInt0^b.UInt0;
dst.UInt1=a.UInt1^b.UInt1;
dst.UInt2=a.UInt2^b.UInt2;
dst.UInt3=a.UInt3^b.UInt3;
returndst;
}
// _mm_cmpeq_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for equality, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpeq_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=a.Float0==b.Float0?~0u:0;
returndst;
}
// _mm_cmpeq_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for equality, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpeq_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=a.Float0==b.Float0?~0u:0;
dst.UInt1=a.Float1==b.Float1?~0u:0;
dst.UInt2=a.Float2==b.Float2?~0u:0;
dst.UInt3=a.Float3==b.Float3?~0u:0;
returndst;
}
// _mm_cmplt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for less-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmplt_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=a.Float0<b.Float0?~0u:0u;
returndst;
}
// _mm_cmplt_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmplt_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=a.Float0<b.Float0?~0u:0u;
dst.UInt1=a.Float1<b.Float1?~0u:0u;
dst.UInt2=a.Float2<b.Float2?~0u:0u;
dst.UInt3=a.Float3<b.Float3?~0u:0u;
returndst;
}
// _mm_cmple_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for less-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmple_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=a.Float0<=b.Float0?~0u:0;
returndst;
}
// _mm_cmple_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmple_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=a.Float0<=b.Float0?~0u:0u;
dst.UInt1=a.Float1<=b.Float1?~0u:0u;
dst.UInt2=a.Float2<=b.Float2?~0u:0u;
dst.UInt3=a.Float3<=b.Float3?~0u:0u;
returndst;
}
// _mm_cmpgt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for greater-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpgt_ss(v128a,v128b)
{
returncmplt_ss(b,a);
}
// _mm_cmpgt_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for greater-than, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpgt_ps(v128a,v128b)
{
returncmplt_ps(b,a);
}
// _mm_cmpge_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for greater-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpge_ss(v128a,v128b)
{
returncmple_ss(b,a);
}
// _mm_cmpge_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for greater-than-or-equal, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpge_ps(v128a,v128b)
{
returncmple_ps(b,a);
}
// _mm_cmpneq_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpneq_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=a.Float0!=b.Float0?~0u:0u;
returndst;
}
// _mm_cmpneq_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-equal, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpneq_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=a.Float0!=b.Float0?~0u:0u;
dst.UInt1=a.Float1!=b.Float1?~0u:0u;
dst.UInt2=a.Float2!=b.Float2?~0u:0u;
dst.UInt3=a.Float3!=b.Float3?~0u:0u;
returndst;
}
// _mm_cmpnlt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpnlt_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=!(a.Float0<b.Float0)?~0u:0u;
returndst;
}
// _mm_cmpnlt_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpnlt_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=!(a.Float0<b.Float0)?~0u:0u;
dst.UInt1=!(a.Float1<b.Float1)?~0u:0u;
dst.UInt2=!(a.Float2<b.Float2)?~0u:0u;
dst.UInt3=!(a.Float3<b.Float3)?~0u:0u;
returndst;
}
// _mm_cmpnle_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpnle_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=!(a.Float0<=b.Float0)?~0u:0u;
returndst;
}
// _mm_cmpnle_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpnle_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=!(a.Float0<=b.Float0)?~0u:0u;
dst.UInt1=!(a.Float1<=b.Float1)?~0u:0u;
dst.UInt2=!(a.Float2<=b.Float2)?~0u:0u;
dst.UInt3=!(a.Float3<=b.Float3)?~0u:0u;
returndst;
}
// _mm_cmpngt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpngt_ss(v128a,v128b)
{
returncmpnlt_ss(b,a);
}
// _mm_cmpngt_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpngt_ps(v128a,v128b)
{
returncmpnlt_ps(b,a);
}
// _mm_cmpnge_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpnge_ss(v128a,v128b)
{
returncmpnle_ss(b,a);
}
// _mm_cmpnge_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than-or-equal, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticv128cmpnge_ps(v128a,v128b)
{
returncmpnle_ps(b,a);
}
// _mm_cmpord_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" to see if neither is NaN, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpord_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=IsNaN(a.UInt0)||IsNaN(b.UInt0)?0:~0u;
returndst;
}
// _mm_cmpord_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpord_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=IsNaN(a.UInt0)||IsNaN(b.UInt0)?0:~0u;
dst.UInt1=IsNaN(a.UInt1)||IsNaN(b.UInt1)?0:~0u;
dst.UInt2=IsNaN(a.UInt2)||IsNaN(b.UInt2)?0:~0u;
dst.UInt3=IsNaN(a.UInt3)||IsNaN(b.UInt3)?0:~0u;
returndst;
}
// _mm_cmpunord_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" to see if either is NaN, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpunord_ss(v128a,v128b)
{
v128dst=a;
dst.UInt0=IsNaN(a.UInt0)||IsNaN(b.UInt0)?~0u:0;
returndst;
}
// _mm_cmpunord_ps
/// <summary> Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128cmpunord_ps(v128a,v128b)
{
v128dst=default(v128);
dst.UInt0=IsNaN(a.UInt0)||IsNaN(b.UInt0)?~0u:0;
dst.UInt1=IsNaN(a.UInt1)||IsNaN(b.UInt1)?~0u:0;
dst.UInt2=IsNaN(a.UInt2)||IsNaN(b.UInt2)?~0u:0;
dst.UInt3=IsNaN(a.UInt3)||IsNaN(b.UInt3)?~0u:0;
returndst;
}
// _mm_comieq_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for equality, and return the boolean result (0 or 1). </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintcomieq_ss(v128a,v128b)
{
returna.Float0==b.Float0?1:0;
}
// _mm_comilt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than, and return the boolean result (0 or 1). </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintcomilt_ss(v128a,v128b)
{
returna.Float0<b.Float0?1:0;
}
// _mm_comile_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than-or-equal, and return the boolean result (0 or 1). </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintcomile_ss(v128a,v128b)
{
returna.Float0<=b.Float0?1:0;
}
// _mm_comigt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than, and return the boolean result (0 or 1). </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintcomigt_ss(v128a,v128b)
{
returna.Float0>b.Float0?1:0;
}
// _mm_comige_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than-or-equal, and return the boolean result (0 or 1). </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintcomige_ss(v128a,v128b)
{
returna.Float0>=b.Float0?1:0;
}
// _mm_comineq_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for not-equal, and return the boolean result (0 or 1). </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintcomineq_ss(v128a,v128b)
{
returna.Float0!=b.Float0?1:0;
}
// _mm_ucomieq_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for equality, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs. </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintucomieq_ss(v128a,v128b)
{
returna.Float0==b.Float0?1:0;
}
// _mm_ucomilt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs. </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintucomilt_ss(v128a,v128b)
{
returna.Float0<b.Float0?1:0;
}
// _mm_ucomile_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than-or-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs. </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintucomile_ss(v128a,v128b)
{
returna.Float0<=b.Float0?1:0;
}
// _mm_ucomigt_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs. </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintucomigt_ss(v128a,v128b)
{
returna.Float0>b.Float0?1:0;
}
// _mm_ucomige_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than-or-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs. </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintucomige_ss(v128a,v128b)
{
returna.Float0>=b.Float0?1:0;
}
// _mm_ucomineq_ss
/// <summary> Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for not-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs. </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Boolean result</returns>
[DebuggerStepThrough]
publicstaticintucomineq_ss(v128a,v128b)
{
returna.Float0!=b.Float0?1:0;
}
// _mm_cvtss_si32
/// <summary> Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>Integer</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticintcvtss_si32(v128a)
{
returncvt_ss2si(a);
}
// _mm_cvt_ss2si
/// <summary> Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>Integer</returns>
[DebuggerStepThrough]
publicstaticintcvt_ss2si(v128a)
{
return(int)a.Float0;
}
// _mm_cvtss_si64
/// <summary> Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>64-bit integer</returns>
[DebuggerStepThrough]
publicstaticlongcvtss_si64(v128a)
{
return(long)a.Float0;
}
// _mm_cvtss_f32
/// <summary> Copy the lower single-precision (32-bit) floating-point element of "a" to "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>32-bit floating point element</returns>
[DebuggerStepThrough]
publicstaticfloatcvtss_f32(v128a)
{
returna.Float0;
}
// _mm_cvttss_si32
/// <summary> Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst". </summary>
/// <summary> Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst". </summary>
/// <param name="a">Vector a</param>
/// <returns>32-bit integer</returns>
[DebuggerStepThrough]
[BurstTargetCpu(BurstTargetCpu.X64_SSE2)]
publicstaticintcvtt_ss2si(v128a)
{
returncvttss_si32(a);
}
// _mm_cvttss_si64
/// <summary> Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst". </summary>
/// <summary> Move the lower single-precision (32-bit) floating-point element from "b" to the lower element of "dst", and copy the upper 3 elements from "a" to the upper elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128move_ss(v128a,v128b)
{
v128dst=a;
dst.Float0=b.Float0;
returndst;
}
// _MM_SHUFFLE macro
/// <summary>
/// Return a shuffle immediate suitable for use with shuffle_ps and similar instructions.
/// </summary>
/// <param name="d">Integer d</param>
/// <param name="c">Integer c</param>
/// <param name="b">Integer b</param>
/// <param name="a">Integer a</param>
/// <returns>Shuffle suitable for use with shuffle_ps</returns>
publicstaticintSHUFFLE(intd,intc,intb,inta)
{
return((a&3))|((b&3)<<2)|((c&3)<<4)|((d&3)<<6);
}
// _mm_shuffle_ps
/// <summary> Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst". </summary>
/// <summary> Unpack and interleave single-precision (32-bit) floating-point elements from the high half "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128unpackhi_ps(v128a,v128b)
{
v128dst=default(v128);
dst.Float0=a.Float2;
dst.Float1=b.Float2;
dst.Float2=a.Float3;
dst.Float3=b.Float3;
returndst;
}
// _mm_unpacklo_ps
/// <summary> Unpack and interleave single-precision (32-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128unpacklo_ps(v128a,v128b)
{
v128dst=default(v128);
dst.Float0=a.Float0;
dst.Float1=b.Float0;
dst.Float2=a.Float1;
dst.Float3=b.Float1;
returndst;
}
// _mm_movehl_ps
/// <summary> Move the upper 2 single-precision (32-bit) floating-point elements from "b" to the lower 2 elements of "dst", and copy the upper 2 elements from "a" to the upper 2 elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128movehl_ps(v128a,v128b)
{
v128dst=default(v128);
dst.Float0=b.Float2;
dst.Float1=b.Float3;
dst.Float2=a.Float2;
dst.Float3=a.Float3;
returndst;
}
// _mm_movelh_ps
/// <summary> Move the lower 2 single-precision (32-bit) floating-point elements from "b" to the upper 2 elements of "dst", and copy the lower 2 elements from "a" to the lower 2 elements of "dst". </summary>
/// <param name="a">Vector a</param>
/// <param name="b">Vector b</param>
/// <returns>Vector</returns>
[DebuggerStepThrough]
publicstaticv128movelh_ps(v128a,v128b)
{
v128dst=default(v128);
dst.Float0=a.Float0;
dst.Float1=a.Float1;
dst.Float2=b.Float0;
dst.Float3=b.Float1;
returndst;
}
// _mm_movemask_ps
/// <summary> Set each bit of mask "dst" based on the most significant bit of the corresponding packed single-precision (32-bit) floating-point element in "a". </summary>
/// <param name="a">Vector a</param>
/// <returns>Integer</returns>
[DebuggerStepThrough]
publicstaticintmovemask_ps(v128a)
{
intdst=0;
if((a.UInt0&0x80000000)!=0)dst|=1;
if((a.UInt1&0x80000000)!=0)dst|=2;
if((a.UInt2&0x80000000)!=0)dst|=4;
if((a.UInt3&0x80000000)!=0)dst|=8;
returndst;
}
/// <summary>
/// Transposes a 4x4 matrix of single precision floating point values (_MM_TRANSPOSE4_PS).
/// </summary>
/// <remarks>
/// Arguments row0, row1, row2, and row3 are __m128
/// values whose elements form the corresponding rows
/// of a 4x4 matrix. The matrix transpose is returned
/// in arguments row0, row1, row2, and row3 where row0
/// now holds column 0 of the original matrix, row1 now
/// holds column 1 of the original matrix, etc.
/// </remarks>
/// <param name="row0">__m128 value on corresponding row</param>
/// <param name="row1">__m128 value on corresponding row</param>
/// <param name="row2">__m128 value on corresponding row</param>
/// <param name="row3">__m128 value on corresponding row</param>