Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
VectorMath.cs
Go to the documentation of this file.
5
6namespace System.Numerics;
7
8internal static class VectorMath
9{
10 [MethodImpl(MethodImplOptions.AggressiveInlining)]
12 {
14 {
15 }
16 if (Sse.IsSupported)
17 {
18 return Sse.Or(Sse.And(ifTrue, selector), Sse.AndNot(selector, ifFalse));
19 }
21 }
22
23 [MethodImpl(MethodImplOptions.AggressiveInlining)]
25 {
27 {
28 }
29 if (Sse2.IsSupported)
30 {
31 return Sse2.Or(Sse2.And(ifTrue, selector), Sse2.AndNot(selector, ifFalse));
32 }
34 }
35
36 [MethodImpl(MethodImplOptions.AggressiveInlining)]
37 public static bool Equal(Vector128<float> vector1, Vector128<float> vector2)
38 {
40 {
41 }
42 if (Sse.IsSupported)
43 {
44 return Sse.MoveMask(Sse.CompareNotEqual(vector1, vector2)) == 0;
45 }
47 }
48
49 [MethodImpl(MethodImplOptions.AggressiveInlining)]
51 {
53 {
54 }
55 if (Fma.IsSupported)
56 {
57 return Fma.MultiplyAdd(Sse.Subtract(b, a), t, a);
58 }
59 if (Sse.IsSupported)
60 {
61 return Sse.Add(Sse.Multiply(a, Sse.Subtract(Vector128.Create(1f), t)), Sse.Multiply(b, t));
62 }
64 }
65
66 [MethodImpl(MethodImplOptions.AggressiveInlining)]
67 public static bool NotEqual(Vector128<float> vector1, Vector128<float> vector2)
68 {
70 {
71 }
72 if (Sse.IsSupported)
73 {
74 return Sse.MoveMask(Sse.CompareNotEqual(vector1, vector2)) != 0;
75 }
77 }
78}
static Vector128< double > ConditionalSelectBitwise(Vector128< double > selector, Vector128< double > ifTrue, Vector128< double > ifFalse)
Definition VectorMath.cs:24
static Vector128< float > Lerp(Vector128< float > a, Vector128< float > b, Vector128< float > t)
Definition VectorMath.cs:50
static bool Equal(Vector128< float > vector1, Vector128< float > vector2)
Definition VectorMath.cs:37
static bool NotEqual(Vector128< float > vector1, Vector128< float > vector2)
Definition VectorMath.cs:67
static Vector128< float > ConditionalSelectBitwise(Vector128< float > selector, Vector128< float > ifTrue, Vector128< float > ifFalse)
Definition VectorMath.cs:11
static Vector128< byte > Create(byte value)
Definition Vector128.cs:138
static Vector128< float > MultiplyAdd(Vector128< float > a, Vector128< float > b, Vector128< float > c)
Definition Fma.cs:17
static new bool IsSupported
Definition Fma.cs:15
static Vector128< byte > Or(Vector128< byte > left, Vector128< byte > right)
Definition Sse2.cs:837
static Vector128< byte > And(Vector128< byte > left, Vector128< byte > right)
Definition Sse2.cs:132
static new bool IsSupported
Definition Sse2.cs:60
static Vector128< byte > AndNot(Vector128< byte > left, Vector128< byte > right)
Definition Sse2.cs:177
static Vector128< float > AndNot(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:47
static int MoveMask(Vector128< float > value)
Definition Sse.cs:317
static Vector128< float > And(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:42
static new bool IsSupported
Definition Sse.cs:30
static Vector128< float > Multiply(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:322
static Vector128< float > Or(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:332
static Vector128< float > Add(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:32
static Vector128< float > Subtract(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:442
static Vector128< float > CompareNotEqual(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:152