Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Not()

unsafe BitArray System.Collections.BitArray.Not ( )
inline

Definition at line 656 of file BitArray.cs.

657 {
658 int[] array = m_array;
659 int int32ArrayLengthFromBitLength = GetInt32ArrayLengthFromBitLength(Length);
660 switch (int32ArrayLengthFromBitLength)
661 {
662 case 7:
663 array[6] = ~array[6];
664 goto case 6;
665 case 6:
666 array[5] = ~array[5];
667 goto case 5;
668 case 5:
669 array[4] = ~array[4];
670 goto case 4;
671 case 4:
672 array[3] = ~array[3];
673 goto case 3;
674 case 3:
675 array[2] = ~array[2];
676 goto case 2;
677 case 2:
678 array[1] = ~array[1];
679 goto case 1;
680 case 1:
681 array[0] = ~array[0];
682 break;
683 default:
684 {
685 uint num = 0u;
686 if (Avx2.IsSupported)
687 {
688 Vector256<int> right = Vector256.Create(-1);
689 fixed (int* ptr = array)
690 {
691 for (; num < (uint)(int32ArrayLengthFromBitLength - 7); num += 8)
692 {
693 Vector256<int> left = Avx.LoadVector256(ptr + num);
694 Avx.Store(ptr + num, Avx2.Xor(left, right));
695 }
696 }
697 }
698 else if (Sse2.IsSupported)
699 {
700 Vector128<int> right2 = Vector128.Create(-1);
701 fixed (int* ptr2 = array)
702 {
703 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
704 {
705 Vector128<int> left2 = Sse2.LoadVector128(ptr2 + num);
706 Sse2.Store(ptr2 + num, Sse2.Xor(left2, right2));
707 }
708 }
709 }
710 else if (AdvSimd.IsSupported)
711 {
712 fixed (int* ptr3 = array)
713 {
714 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
715 {
717 AdvSimd.Store(ptr3 + num, AdvSimd.Not(value));
718 }
719 }
720 }
721 for (; num < (uint)int32ArrayLengthFromBitLength; num++)
722 {
723 array[num] = ~array[num];
724 }
725 break;
726 }
727 case 0:
728 break;
729 }
730 _version++;
731 return this;
732 }
static int GetInt32ArrayLengthFromBitLength(int n)
Definition BitArray.cs:988
static unsafe void Store(byte *address, Vector64< byte > source)
Definition AdvSimd.cs:10249
static unsafe Vector128< byte > LoadVector128(byte *address)
Definition AdvSimd.cs:6034
static Vector64< byte > Not(Vector64< byte > value)
Definition AdvSimd.cs:7834
static Vector128< byte > Create(byte value)
Definition Vector128.cs:138
static Vector256< byte > Create(byte value)
Definition Vector256.cs:105
static new bool IsSupported
Definition Avx2.cs:15
static Vector256< sbyte > Xor(Vector256< sbyte > left, Vector256< sbyte > right)
Definition Avx2.cs:2278
static unsafe Vector256< sbyte > LoadVector256(sbyte *address)
Definition Avx.cs:462
static unsafe void Store(sbyte *address, Vector256< sbyte > source)
Definition Avx.cs:962
static unsafe Vector128< sbyte > LoadVector128(sbyte *address)
Definition Sse2.cs:582
static Vector128< byte > Xor(Vector128< byte > left, Vector128< byte > right)
Definition Sse2.cs:1512
static unsafe void Store(sbyte *address, Vector128< sbyte > source)
Definition Sse2.cs:1287
static new bool IsSupported
Definition Sse2.cs:60

References System.Collections.BitArray._version, System.array, System.Runtime.Intrinsics.Vector128< T >.Create(), System.Runtime.Intrinsics.Vector256< T >.Create(), System.Collections.BitArray.GetInt32ArrayLengthFromBitLength(), System.Runtime.Intrinsics.Arm.AdvSimd.IsSupported, System.Runtime.Intrinsics.X86.Avx2.IsSupported, System.Runtime.Intrinsics.X86.Sse2.IsSupported, System.Collections.BitArray.Length, System.Runtime.Intrinsics.Arm.AdvSimd.LoadVector128(), System.Runtime.Intrinsics.X86.Sse2.LoadVector128(), System.Runtime.Intrinsics.X86.Avx.LoadVector256(), System.Collections.BitArray.m_array, System.Runtime.Intrinsics.Arm.AdvSimd.Not(), System.Runtime.Intrinsics.Arm.AdvSimd.Store(), System.Runtime.Intrinsics.X86.Sse2.Store(), System.Runtime.Intrinsics.X86.Avx.Store(), System.value, System.Runtime.Intrinsics.X86.Sse2.Xor(), and System.Runtime.Intrinsics.X86.Avx2.Xor().