-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathIntersections.cs
42 lines (35 loc) · 1.33 KB
/
Intersections.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//
using static System.Runtime.Intrinsics.X86.Avx;
using static System.Runtime.Intrinsics.X86.Avx2;
using System.Runtime.Intrinsics.X86;
using System.Runtime.Intrinsics;
using System.Runtime.CompilerServices;
using System;
internal struct Intersections
{
public Vector256<float> Distances;
public Vector256<int> ThingIndices;
public static readonly Vector256<float> NullDistance = Vector256.Create(float.MaxValue);
public static readonly Vector256<int> NullIndex = Vector256.Create(-1);
public Intersections(Vector256<float> dis, Vector256<int> things)
{
Distances = dis;
ThingIndices = things;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool AllNullIntersections()
{
return AllNullIntersections(Distances);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool AllNullIntersections(Vector256<float> dis)
{
var cmp = Compare(dis, NullDistance, FloatComparisonMode.OrderedEqualNonSignaling);
var zero = Vector256<int>.Zero;
var mask = Avx2.CompareEqual(zero, zero);
return TestC(cmp, mask.AsSingle());
}
}