mirror of
https://github.com/VSadov/Satori.git
synced 2025-06-10 18:11:04 +09:00
Replace most corelib uses of Unsafe.SizeOf<T> with sizeof(T) (#104923)
Also suppress CS8500 globally rather than in hundreds of files individually and fix NoWarns that weren't inheriting global NoWarns.
This commit is contained in:
parent
769ead4b07
commit
19f03850ca
140 changed files with 112 additions and 442 deletions
|
@ -388,7 +388,7 @@
|
||||||
<Features>strict;nullablePublicOnly</Features>
|
<Features>strict;nullablePublicOnly</Features>
|
||||||
<TreatWarningsAsErrors Condition="'$(TreatWarningsAsErrors)' == ''">true</TreatWarningsAsErrors>
|
<TreatWarningsAsErrors Condition="'$(TreatWarningsAsErrors)' == ''">true</TreatWarningsAsErrors>
|
||||||
<!-- Warnings to always disable -->
|
<!-- Warnings to always disable -->
|
||||||
<NoWarn>$(NoWarn),CS8969</NoWarn>
|
<NoWarn>$(NoWarn);CS8500;CS8969</NoWarn>
|
||||||
<!-- Always pass portable to override arcade sdk which uses embedded for local builds -->
|
<!-- Always pass portable to override arcade sdk which uses embedded for local builds -->
|
||||||
<DebugType>portable</DebugType>
|
<DebugType>portable</DebugType>
|
||||||
<KeepNativeSymbols Condition="'$(KeepNativeSymbols)' == '' and '$(DotNetBuildSourceOnly)' == 'true'">true</KeepNativeSymbols>
|
<KeepNativeSymbols Condition="'$(KeepNativeSymbols)' == '' and '$(DotNetBuildSourceOnly)' == 'true'">true</KeepNativeSymbols>
|
||||||
|
|
|
@ -58,7 +58,6 @@ namespace System
|
||||||
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "ArgIterator_Init2")]
|
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "ArgIterator_Init2")]
|
||||||
private static partial void Init(ArgIterator* thisPtr, IntPtr cookie, void* ptr);
|
private static partial void Init(ArgIterator* thisPtr, IntPtr cookie, void* ptr);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // Takes a pointer to a managed type
|
|
||||||
// Fetch an argument as a typed referece, advance the iterator.
|
// Fetch an argument as a typed referece, advance the iterator.
|
||||||
// Throws an exception if past end of argument list
|
// Throws an exception if past end of argument list
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
|
|
|
@ -790,9 +790,7 @@ namespace System
|
||||||
// for debug builds we always want to call AllocateNewArray to detect AllocateNewArray bugs
|
// for debug builds we always want to call AllocateNewArray to detect AllocateNewArray bugs
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
// small arrays are allocated using `new[]` as that is generally faster.
|
// small arrays are allocated using `new[]` as that is generally faster.
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
if (length < 2048 / sizeof(T))
|
if (length < 2048 / sizeof(T))
|
||||||
#pragma warning restore 8500
|
|
||||||
{
|
{
|
||||||
return new T[length];
|
return new T[length];
|
||||||
}
|
}
|
||||||
|
@ -892,9 +890,7 @@ namespace System
|
||||||
Configurations = new Dictionary<string, object>()
|
Configurations = new Dictionary<string, object>()
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
_EnumerateConfigurationValues(&context, &ConfigCallback);
|
_EnumerateConfigurationValues(&context, &ConfigCallback);
|
||||||
#pragma warning restore CS8500
|
|
||||||
return context.Configurations!;
|
return context.Configurations!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,9 +93,7 @@ namespace System.Reflection
|
||||||
throw new ArgumentException(SR.Arg_TypedReference_Null);
|
throw new ArgumentException(SR.Arg_TypedReference_Null);
|
||||||
|
|
||||||
// Passing TypedReference by reference is easier to make correct in native code
|
// Passing TypedReference by reference is easier to make correct in native code
|
||||||
#pragma warning disable CS8500 // Takes a pointer to a managed type
|
|
||||||
return RuntimeFieldHandle.GetValueDirect(this, (RuntimeType)FieldType, &obj, (RuntimeType?)DeclaringType);
|
return RuntimeFieldHandle.GetValueDirect(this, (RuntimeType)FieldType, &obj, (RuntimeType?)DeclaringType);
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[DebuggerStepThrough]
|
[DebuggerStepThrough]
|
||||||
|
@ -111,9 +109,7 @@ namespace System.Reflection
|
||||||
throw new ArgumentException(SR.Arg_TypedReference_Null);
|
throw new ArgumentException(SR.Arg_TypedReference_Null);
|
||||||
|
|
||||||
// Passing TypedReference by reference is easier to make correct in native code
|
// Passing TypedReference by reference is easier to make correct in native code
|
||||||
#pragma warning disable CS8500 // Takes a pointer to a managed type
|
|
||||||
RuntimeFieldHandle.SetValueDirect(this, (RuntimeType)FieldType, &obj, value, (RuntimeType?)DeclaringType);
|
RuntimeFieldHandle.SetValueDirect(this, (RuntimeType)FieldType, &obj, value, (RuntimeType?)DeclaringType);
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override RuntimeFieldHandle FieldHandle => new RuntimeFieldHandle(this);
|
public override RuntimeFieldHandle FieldHandle => new RuntimeFieldHandle(this);
|
||||||
|
|
|
@ -253,9 +253,7 @@ namespace System.Runtime
|
||||||
// This optimization is the same that is used in GCHandle in RELEASE mode.
|
// This optimization is the same that is used in GCHandle in RELEASE mode.
|
||||||
// This is not used in DEBUG builds as the runtime performs additional checks.
|
// This is not used in DEBUG builds as the runtime performs additional checks.
|
||||||
// The logic below is the inlined copy of ObjectFromHandle in the unmanaged runtime.
|
// The logic below is the inlined copy of ObjectFromHandle in the unmanaged runtime.
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
private static unsafe object? InternalGetTarget(IntPtr dependentHandle) => *(object*)dependentHandle;
|
private static unsafe object? InternalGetTarget(IntPtr dependentHandle) => *(object*)dependentHandle;
|
||||||
#pragma warning restore 8500
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace System.Runtime.ExceptionServices
|
||||||
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "ResumeAtInterceptionLocation")]
|
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "ResumeAtInterceptionLocation")]
|
||||||
internal static unsafe partial void ResumeAtInterceptionLocation(void* pvRegDisplay);
|
internal static unsafe partial void ResumeAtInterceptionLocation(void* pvRegDisplay);
|
||||||
|
|
||||||
#pragma warning disable CS8500
|
|
||||||
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "CallCatchFunclet")]
|
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "CallCatchFunclet")]
|
||||||
internal static unsafe partial IntPtr RhpCallCatchFunclet(
|
internal static unsafe partial IntPtr RhpCallCatchFunclet(
|
||||||
ObjectHandleOnStack exceptionObj, byte* pHandlerIP, void* pvRegDisplay, EH.ExInfo* exInfo);
|
ObjectHandleOnStack exceptionObj, byte* pHandlerIP, void* pvRegDisplay, EH.ExInfo* exInfo);
|
||||||
|
@ -38,7 +37,6 @@ namespace System.Runtime.ExceptionServices
|
||||||
|
|
||||||
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "AppendExceptionStackFrame")]
|
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "AppendExceptionStackFrame")]
|
||||||
internal static unsafe partial void RhpAppendExceptionStackFrame(ObjectHandleOnStack exceptionObj, IntPtr ip, UIntPtr sp, int flags, EH.ExInfo* exInfo);
|
internal static unsafe partial void RhpAppendExceptionStackFrame(ObjectHandleOnStack exceptionObj, IntPtr ip, UIntPtr sp, int flags, EH.ExInfo* exInfo);
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "EHEnumInitFromStackFrameIterator")]
|
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "EHEnumInitFromStackFrameIterator")]
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
|
|
@ -46,9 +46,7 @@ namespace System.Runtime.InteropServices
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
internal static extern object? InternalGet(IntPtr handle);
|
internal static extern object? InternalGet(IntPtr handle);
|
||||||
#else
|
#else
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
internal static unsafe object? InternalGet(IntPtr handle) => *(object*)handle;
|
internal static unsafe object? InternalGet(IntPtr handle) => *(object*)handle;
|
||||||
#pragma warning restore 8500
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
|
|
|
@ -206,7 +206,6 @@ namespace Internal.Runtime.CompilerHelpers
|
||||||
nint blockAddr = MethodTable.SupportsRelativePointers ? (nint)ReadRelPtr32(pBlock) : *pBlock;
|
nint blockAddr = MethodTable.SupportsRelativePointers ? (nint)ReadRelPtr32(pBlock) : *pBlock;
|
||||||
if ((blockAddr & GCStaticRegionConstants.Uninitialized) == GCStaticRegionConstants.Uninitialized)
|
if ((blockAddr & GCStaticRegionConstants.Uninitialized) == GCStaticRegionConstants.Uninitialized)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
object? obj = null;
|
object? obj = null;
|
||||||
RuntimeImports.RhAllocateNewObject(
|
RuntimeImports.RhAllocateNewObject(
|
||||||
new IntPtr(blockAddr & ~GCStaticRegionConstants.Mask),
|
new IntPtr(blockAddr & ~GCStaticRegionConstants.Mask),
|
||||||
|
@ -234,7 +233,6 @@ namespace Internal.Runtime.CompilerHelpers
|
||||||
|
|
||||||
// Update the base pointer to point to the pinned object
|
// Update the base pointer to point to the pinned object
|
||||||
*pBlock = *(IntPtr*)&obj;
|
*pBlock = *(IntPtr*)&obj;
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
currentBase++;
|
currentBase++;
|
||||||
|
|
|
@ -15,9 +15,7 @@ namespace System.Runtime
|
||||||
private static unsafe IntPtr RhpCidResolve(IntPtr callerTransitionBlockParam, IntPtr pCell)
|
private static unsafe IntPtr RhpCidResolve(IntPtr callerTransitionBlockParam, IntPtr pCell)
|
||||||
{
|
{
|
||||||
IntPtr locationOfThisPointer = callerTransitionBlockParam + TransitionBlock.GetThisOffset();
|
IntPtr locationOfThisPointer = callerTransitionBlockParam + TransitionBlock.GetThisOffset();
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
object pObject = *(object*)locationOfThisPointer;
|
object pObject = *(object*)locationOfThisPointer;
|
||||||
#pragma warning restore 8500
|
|
||||||
IntPtr dispatchResolveTarget = RhpCidResolve_Worker(pObject, pCell);
|
IntPtr dispatchResolveTarget = RhpCidResolve_Worker(pObject, pCell);
|
||||||
return dispatchResolveTarget;
|
return dispatchResolveTarget;
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,12 +279,11 @@ namespace System.Runtime
|
||||||
isFirstFrame = false;
|
isFirstFrame = false;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#pragma warning disable CS8500
|
|
||||||
fixed (EH.ExInfo* pExInfo = &exInfo)
|
fixed (EH.ExInfo* pExInfo = &exInfo)
|
||||||
{
|
{
|
||||||
InternalCalls.RhpAppendExceptionStackFrame(ObjectHandleOnStack.Create(ref exception), ip, sp, flags, pExInfo);
|
InternalCalls.RhpAppendExceptionStackFrame(ObjectHandleOnStack.Create(ref exception), ip, sp, flags, pExInfo);
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500
|
|
||||||
// Clear flags only if we called the function
|
// Clear flags only if we called the function
|
||||||
isFirstRethrowFrame = false;
|
isFirstRethrowFrame = false;
|
||||||
isFirstFrame = false;
|
isFirstFrame = false;
|
||||||
|
@ -686,13 +685,11 @@ namespace System.Runtime
|
||||||
if (unwoundReversePInvoke)
|
if (unwoundReversePInvoke)
|
||||||
{
|
{
|
||||||
object exceptionObj = exInfo.ThrownException;
|
object exceptionObj = exInfo.ThrownException;
|
||||||
#pragma warning disable CS8500
|
|
||||||
fixed (EH.ExInfo* pExInfo = &exInfo)
|
fixed (EH.ExInfo* pExInfo = &exInfo)
|
||||||
{
|
{
|
||||||
InternalCalls.RhpCallCatchFunclet(
|
InternalCalls.RhpCallCatchFunclet(
|
||||||
ObjectHandleOnStack.Create(ref exceptionObj), null, exInfo._frameIter.RegisterSet, pExInfo);
|
ObjectHandleOnStack.Create(ref exceptionObj), null, exInfo._frameIter.RegisterSet, pExInfo);
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -922,13 +919,11 @@ namespace System.Runtime
|
||||||
InternalCalls.RhpCallCatchFunclet(
|
InternalCalls.RhpCallCatchFunclet(
|
||||||
exceptionObj, pCatchHandler, frameIter.RegisterSet, ref exInfo);
|
exceptionObj, pCatchHandler, frameIter.RegisterSet, ref exInfo);
|
||||||
#else // NATIVEAOT
|
#else // NATIVEAOT
|
||||||
#pragma warning disable CS8500
|
|
||||||
fixed (EH.ExInfo* pExInfo = &exInfo)
|
fixed (EH.ExInfo* pExInfo = &exInfo)
|
||||||
{
|
{
|
||||||
InternalCalls.RhpCallCatchFunclet(
|
InternalCalls.RhpCallCatchFunclet(
|
||||||
ObjectHandleOnStack.Create(ref exceptionObj), pCatchHandler, frameIter.RegisterSet, pExInfo);
|
ObjectHandleOnStack.Create(ref exceptionObj), pCatchHandler, frameIter.RegisterSet, pExInfo);
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500
|
|
||||||
#endif // NATIVEAOT
|
#endif // NATIVEAOT
|
||||||
// currently, RhpCallCatchFunclet will resume after the catch
|
// currently, RhpCallCatchFunclet will resume after the catch
|
||||||
Debug.Assert(false, "unreachable");
|
Debug.Assert(false, "unreachable");
|
||||||
|
@ -1209,12 +1204,10 @@ namespace System.Runtime
|
||||||
#if NATIVEAOT
|
#if NATIVEAOT
|
||||||
InternalCalls.RhpCallFinallyFunclet(pFinallyHandler, exInfo._frameIter.RegisterSet);
|
InternalCalls.RhpCallFinallyFunclet(pFinallyHandler, exInfo._frameIter.RegisterSet);
|
||||||
#else // NATIVEAOT
|
#else // NATIVEAOT
|
||||||
#pragma warning disable CS8500
|
|
||||||
fixed (EH.ExInfo* pExInfo = &exInfo)
|
fixed (EH.ExInfo* pExInfo = &exInfo)
|
||||||
{
|
{
|
||||||
InternalCalls.RhpCallFinallyFunclet(pFinallyHandler, exInfo._frameIter.RegisterSet, pExInfo);
|
InternalCalls.RhpCallFinallyFunclet(pFinallyHandler, exInfo._frameIter.RegisterSet, pExInfo);
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500
|
|
||||||
#endif // NATIVEAOT
|
#endif // NATIVEAOT
|
||||||
exInfo._idxCurClause = MaxTryRegionIdx;
|
exInfo._idxCurClause = MaxTryRegionIdx;
|
||||||
}
|
}
|
||||||
|
|
|
@ -695,9 +695,7 @@ namespace System
|
||||||
Configurations = new Dictionary<string, object>()
|
Configurations = new Dictionary<string, object>()
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
RuntimeImports.RhEnumerateConfigurationValues(&context, &ConfigCallback);
|
RuntimeImports.RhEnumerateConfigurationValues(&context, &ConfigCallback);
|
||||||
#pragma warning restore CS8500
|
|
||||||
return context.Configurations!;
|
return context.Configurations!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -810,9 +808,7 @@ namespace System
|
||||||
// for debug builds we always want to call AllocateNewArray to detect AllocateNewArray bugs
|
// for debug builds we always want to call AllocateNewArray to detect AllocateNewArray bugs
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
// small arrays are allocated using `new[]` as that is generally faster.
|
// small arrays are allocated using `new[]` as that is generally faster.
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
if (length < 2048 / sizeof(T))
|
if (length < 2048 / sizeof(T))
|
||||||
#pragma warning restore 8500
|
|
||||||
{
|
{
|
||||||
return new T[length];
|
return new T[length];
|
||||||
}
|
}
|
||||||
|
@ -832,9 +828,7 @@ namespace System
|
||||||
throw new OverflowException();
|
throw new OverflowException();
|
||||||
|
|
||||||
T[]? array = null;
|
T[]? array = null;
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
RuntimeImports.RhAllocateNewArray(MethodTable.Of<T[]>(), (uint)length, (uint)flags, &array);
|
RuntimeImports.RhAllocateNewArray(MethodTable.Of<T[]>(), (uint)length, (uint)flags, &array);
|
||||||
#pragma warning restore CS8500
|
|
||||||
if (array == null)
|
if (array == null)
|
||||||
throw new OutOfMemoryException();
|
throw new OutOfMemoryException();
|
||||||
|
|
||||||
|
@ -861,9 +855,7 @@ namespace System
|
||||||
throw new OverflowException();
|
throw new OverflowException();
|
||||||
|
|
||||||
T[]? array = null;
|
T[]? array = null;
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
RuntimeImports.RhAllocateNewArray(MethodTable.Of<T[]>(), (uint)length, (uint)flags, &array);
|
RuntimeImports.RhAllocateNewArray(MethodTable.Of<T[]>(), (uint)length, (uint)flags, &array);
|
||||||
#pragma warning restore CS8500
|
|
||||||
if (array == null)
|
if (array == null)
|
||||||
throw new OutOfMemoryException();
|
throw new OutOfMemoryException();
|
||||||
|
|
||||||
|
|
|
@ -365,9 +365,7 @@ namespace System.Reflection
|
||||||
else if (argCount == 1)
|
else if (argCount == 1)
|
||||||
{
|
{
|
||||||
ByReference br = ByReference.Create(ref parameters[0]);
|
ByReference br = ByReference.Create(ref parameters[0]);
|
||||||
#pragma warning disable CS8500
|
|
||||||
void* pByrefStorage = &br;
|
void* pByrefStorage = &br;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
// Since no copy of args is required, pass 'parameters' for both arguments.
|
// Since no copy of args is required, pass 'parameters' for both arguments.
|
||||||
CheckArguments(parameters, pByrefStorage, parameters);
|
CheckArguments(parameters, pByrefStorage, parameters);
|
||||||
|
@ -410,9 +408,7 @@ namespace System.Reflection
|
||||||
IntPtr* pStorage = stackalloc IntPtr[2 * argCount];
|
IntPtr* pStorage = stackalloc IntPtr[2 * argCount];
|
||||||
NativeMemory.Clear(pStorage, (nuint)(2 * argCount) * (nuint)sizeof(IntPtr));
|
NativeMemory.Clear(pStorage, (nuint)(2 * argCount) * (nuint)sizeof(IntPtr));
|
||||||
|
|
||||||
#pragma warning disable 8500
|
|
||||||
void* pByRefStorage = (ByReference*)(pStorage + argCount);
|
void* pByRefStorage = (ByReference*)(pStorage + argCount);
|
||||||
#pragma warning restore 8500
|
|
||||||
|
|
||||||
GCFrameRegistration regArgStorage = new((void**)pStorage, (uint)argCount, areByRefs: false);
|
GCFrameRegistration regArgStorage = new((void**)pStorage, (uint)argCount, areByRefs: false);
|
||||||
GCFrameRegistration regByRefStorage = new((void**)pByRefStorage, (uint)argCount, areByRefs: true);
|
GCFrameRegistration regByRefStorage = new((void**)pByRefStorage, (uint)argCount, areByRefs: true);
|
||||||
|
@ -461,9 +457,7 @@ namespace System.Reflection
|
||||||
IntPtr* pStorage = stackalloc IntPtr[2 * argCount];
|
IntPtr* pStorage = stackalloc IntPtr[2 * argCount];
|
||||||
NativeMemory.Clear(pStorage, (nuint)(2 * argCount) * (nuint)sizeof(IntPtr));
|
NativeMemory.Clear(pStorage, (nuint)(2 * argCount) * (nuint)sizeof(IntPtr));
|
||||||
|
|
||||||
#pragma warning disable 8500
|
|
||||||
void* pByRefStorage = (ByReference*)(pStorage + argCount);
|
void* pByRefStorage = (ByReference*)(pStorage + argCount);
|
||||||
#pragma warning restore 8500
|
|
||||||
|
|
||||||
GCFrameRegistration regArgStorage = new((void**)pStorage, (uint)argCount, areByRefs: false);
|
GCFrameRegistration regArgStorage = new((void**)pStorage, (uint)argCount, areByRefs: false);
|
||||||
GCFrameRegistration regByRefStorage = new((void**)pByRefStorage, (uint)argCount, areByRefs: true);
|
GCFrameRegistration regByRefStorage = new((void**)pByRefStorage, (uint)argCount, areByRefs: true);
|
||||||
|
@ -501,9 +495,7 @@ namespace System.Reflection
|
||||||
StackAllocatedArguments argStorage = default;
|
StackAllocatedArguments argStorage = default;
|
||||||
Span<object?> copyOfParameters = ((Span<object?>)argStorage._args).Slice(0, _argumentCount);
|
Span<object?> copyOfParameters = ((Span<object?>)argStorage._args).Slice(0, _argumentCount);
|
||||||
StackAllocatedByRefs byrefStorage = default;
|
StackAllocatedByRefs byrefStorage = default;
|
||||||
#pragma warning disable CS8500
|
|
||||||
void* pByRefStorage = (ByReference*)&byrefStorage;
|
void* pByRefStorage = (ByReference*)&byrefStorage;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
CheckArguments(copyOfParameters, pByRefStorage, parameters, binderBundle);
|
CheckArguments(copyOfParameters, pByRefStorage, parameters, binderBundle);
|
||||||
|
|
||||||
|
@ -535,9 +527,7 @@ namespace System.Reflection
|
||||||
StackAllocatedArguments argStorage = default;
|
StackAllocatedArguments argStorage = default;
|
||||||
Span<object?> copyOfParameters = ((Span<object?>)argStorage._args).Slice(0, _argumentCount);
|
Span<object?> copyOfParameters = ((Span<object?>)argStorage._args).Slice(0, _argumentCount);
|
||||||
StackAllocatedByRefs byrefStorage = default;
|
StackAllocatedByRefs byrefStorage = default;
|
||||||
#pragma warning disable CS8500
|
|
||||||
void* pByRefStorage = (ByReference*)&byrefStorage;
|
void* pByRefStorage = (ByReference*)&byrefStorage;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
CheckArguments(copyOfParameters, pByRefStorage, parameters);
|
CheckArguments(copyOfParameters, pByRefStorage, parameters);
|
||||||
|
|
||||||
|
@ -562,9 +552,7 @@ namespace System.Reflection
|
||||||
Debug.Assert(_argumentCount <= MaxStackAllocArgCount);
|
Debug.Assert(_argumentCount <= MaxStackAllocArgCount);
|
||||||
|
|
||||||
StackAllocatedByRefs byrefStorage = default;
|
StackAllocatedByRefs byrefStorage = default;
|
||||||
#pragma warning disable CS8500
|
|
||||||
void* pByRefStorage = (ByReference*)&byrefStorage;
|
void* pByRefStorage = (ByReference*)&byrefStorage;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
// Since no copy of args is required, pass 'parameters' for both arguments.
|
// Since no copy of args is required, pass 'parameters' for both arguments.
|
||||||
CheckArguments(parameters, pByRefStorage, parameters);
|
CheckArguments(parameters, pByRefStorage, parameters);
|
||||||
|
@ -686,10 +674,10 @@ namespace System.Reflection
|
||||||
|
|
||||||
copyOfParameters[i] = arg!;
|
copyOfParameters[i] = arg!;
|
||||||
|
|
||||||
#pragma warning disable 8500, 9094
|
#pragma warning disable 9094
|
||||||
((ByReference*)byrefParameters)[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
|
((ByReference*)byrefParameters)[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
|
||||||
ref Unsafe.As<object?, byte>(ref copyOfParameters[i]) : ref arg.GetRawData());
|
ref Unsafe.As<object?, byte>(ref copyOfParameters[i]) : ref arg.GetRawData());
|
||||||
#pragma warning restore 8500, 9094
|
#pragma warning restore 9094
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -763,10 +751,10 @@ namespace System.Reflection
|
||||||
|
|
||||||
copyOfParameters[i] = arg;
|
copyOfParameters[i] = arg;
|
||||||
|
|
||||||
#pragma warning disable 8500, 9094
|
#pragma warning disable 9094
|
||||||
((ByReference*)byrefParameters)[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
|
((ByReference*)byrefParameters)[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
|
||||||
ref Unsafe.As<object?, byte>(ref copyOfParameters[i]) : ref arg.GetRawData());
|
ref Unsafe.As<object?, byte>(ref copyOfParameters[i]) : ref arg.GetRawData());
|
||||||
#pragma warning restore 8500, 9094
|
#pragma warning restore 9094
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,6 @@ using System.Runtime;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Reflection
|
namespace System.Reflection
|
||||||
{
|
{
|
||||||
public abstract class EnumInfo
|
public abstract class EnumInfo
|
||||||
|
|
|
@ -429,10 +429,8 @@ namespace System.Runtime.InteropServices
|
||||||
private static bool IsRootedCallback(IntPtr pObj)
|
private static bool IsRootedCallback(IntPtr pObj)
|
||||||
{
|
{
|
||||||
// We are paused in the GC, so this is safe.
|
// We are paused in the GC, so this is safe.
|
||||||
#pragma warning disable CS8500 // Takes a pointer to a managed type
|
|
||||||
ManagedObjectWrapperHolder* holder = (ManagedObjectWrapperHolder*)&pObj;
|
ManagedObjectWrapperHolder* holder = (ManagedObjectWrapperHolder*)&pObj;
|
||||||
return holder->_wrapper->IsRooted;
|
return holder->_wrapper->IsRooted;
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly ManagedObjectWrapper* _wrapper;
|
private readonly ManagedObjectWrapper* _wrapper;
|
||||||
|
|
|
@ -260,9 +260,7 @@ namespace System.Runtime.InteropServices
|
||||||
|
|
||||||
// Compat note: CLR wouldn't bother with a range check. If someone does this,
|
// Compat note: CLR wouldn't bother with a range check. If someone does this,
|
||||||
// they're likely taking dependency on some CLR implementation detail quirk.
|
// they're likely taking dependency on some CLR implementation detail quirk.
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(checked(ofs + sizeof(T)), size, nameof(ofs));
|
ArgumentOutOfRangeException.ThrowIfGreaterThan(checked(ofs + sizeof(T)), size, nameof(ofs));
|
||||||
#pragma warning restore 8500
|
|
||||||
|
|
||||||
IntPtr nativeBytes = AllocCoTaskMem(size);
|
IntPtr nativeBytes = AllocCoTaskMem(size);
|
||||||
NativeMemory.Clear((void*)nativeBytes, (nuint)size);
|
NativeMemory.Clear((void*)nativeBytes, (nuint)size);
|
||||||
|
@ -340,9 +338,7 @@ namespace System.Runtime.InteropServices
|
||||||
|
|
||||||
// Compat note: CLR wouldn't bother with a range check. If someone does this,
|
// Compat note: CLR wouldn't bother with a range check. If someone does this,
|
||||||
// they're likely taking dependency on some CLR implementation detail quirk.
|
// they're likely taking dependency on some CLR implementation detail quirk.
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(checked(ofs + sizeof(T)), size, nameof(ofs));
|
ArgumentOutOfRangeException.ThrowIfGreaterThan(checked(ofs + sizeof(T)), size, nameof(ofs));
|
||||||
#pragma warning restore 8500
|
|
||||||
|
|
||||||
IntPtr nativeBytes = AllocCoTaskMem(size);
|
IntPtr nativeBytes = AllocCoTaskMem(size);
|
||||||
NativeMemory.Clear((void*)nativeBytes, (nuint)size);
|
NativeMemory.Clear((void*)nativeBytes, (nuint)size);
|
||||||
|
|
|
@ -350,11 +350,9 @@ namespace Internal.JitInterface
|
||||||
IntPtr exception;
|
IntPtr exception;
|
||||||
IntPtr nativeEntry;
|
IntPtr nativeEntry;
|
||||||
uint codeSize;
|
uint codeSize;
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
var result = JitCompileMethod(out exception,
|
var result = JitCompileMethod(out exception,
|
||||||
_jit, (IntPtr)(&_this), _unmanagedCallbacks,
|
_jit, (IntPtr)(&_this), _unmanagedCallbacks,
|
||||||
ref methodInfo, (uint)CorJitFlag.CORJIT_FLAG_CALL_GETJITFLAGS, out nativeEntry, out codeSize);
|
ref methodInfo, (uint)CorJitFlag.CORJIT_FLAG_CALL_GETJITFLAGS, out nativeEntry, out codeSize);
|
||||||
#pragma warning restore CS8500
|
|
||||||
if (exception != IntPtr.Zero)
|
if (exception != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
if (_lastException != null)
|
if (_lastException != null)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<!-- ILSpy requires this assembly to target netstandard2.0 -->
|
<!-- ILSpy requires this assembly to target netstandard2.0 -->
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<CLSCompliant>false</CLSCompliant>
|
<CLSCompliant>false</CLSCompliant>
|
||||||
<NoWarn>8002,NU1701</NoWarn>
|
<NoWarn>$(NoWarn);8002;NU1701</NoWarn>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
|
||||||
<OutputPath>$(RuntimeBinDir)</OutputPath>
|
<OutputPath>$(RuntimeBinDir)</OutputPath>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<IsDotNetFrameworkProductAssembly>true</IsDotNetFrameworkProductAssembly>
|
<IsDotNetFrameworkProductAssembly>true</IsDotNetFrameworkProductAssembly>
|
||||||
<TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
|
<TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
|
||||||
<CLSCompliant>false</CLSCompliant>
|
<CLSCompliant>false</CLSCompliant>
|
||||||
<NoWarn>8002,NU1701</NoWarn>
|
<NoWarn>$(NoWarn);8002;NU1701</NoWarn>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
|
||||||
<OutputPath>$(RuntimeBinDir)/R2RDump</OutputPath>
|
<OutputPath>$(RuntimeBinDir)/R2RDump</OutputPath>
|
||||||
<RunAnalyzers>false</RunAnalyzers>
|
<RunAnalyzers>false</RunAnalyzers>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
|
<TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
|
||||||
<NoWarn>8002,NU1701</NoWarn>
|
<NoWarn>$(NoWarn);8002;NU1701</NoWarn>
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<OutputPath>$(RuntimeBinDir)\R2RTest</OutputPath>
|
<OutputPath>$(RuntimeBinDir)\R2RTest</OutputPath>
|
||||||
<RunAnalyzers>false</RunAnalyzers>
|
<RunAnalyzers>false</RunAnalyzers>
|
||||||
|
|
|
@ -7,8 +7,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.ExceptionServices;
|
using System.Runtime.ExceptionServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // takes address of managed type
|
|
||||||
|
|
||||||
internal static partial class Interop
|
internal static partial class Interop
|
||||||
{
|
{
|
||||||
internal static partial class Sys
|
internal static partial class Sys
|
||||||
|
|
|
@ -193,10 +193,8 @@ namespace System
|
||||||
}
|
}
|
||||||
return result.ToString();
|
return result.ToString();
|
||||||
#else
|
#else
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
return string.Create(bytes.Length * 2, (RosPtr: (IntPtr)(&bytes), casing), static (chars, args) =>
|
return string.Create(bytes.Length * 2, (RosPtr: (IntPtr)(&bytes), casing), static (chars, args) =>
|
||||||
EncodeToUtf16(*(ReadOnlySpan<byte>*)args.RosPtr, chars, args.casing));
|
EncodeToUtf16(*(ReadOnlySpan<byte>*)args.RosPtr, chars, args.casing));
|
||||||
#pragma warning restore CS8500
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,6 @@ namespace System.IO
|
||||||
string.Empty;
|
string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
ReadOnlySpan<char> tmpPath = path; // avoid address exposing the span and impacting the other code in the method that uses it
|
ReadOnlySpan<char> tmpPath = path; // avoid address exposing the span and impacting the other code in the method that uses it
|
||||||
return string.Create(appendPathSeparator ? tmpPath.Length + 1 : tmpPath.Length, (appendPathSeparator, RosPtr: (IntPtr)(&tmpPath)), static (dest, state) =>
|
return string.Create(appendPathSeparator ? tmpPath.Length + 1 : tmpPath.Length, (appendPathSeparator, RosPtr: (IntPtr)(&tmpPath)), static (dest, state) =>
|
||||||
{
|
{
|
||||||
|
@ -84,7 +83,6 @@ namespace System.IO
|
||||||
// all slashes should be forward slashes.
|
// all slashes should be forward slashes.
|
||||||
dest.Replace('\\', '/');
|
dest.Replace('\\', '/');
|
||||||
});
|
});
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<EnablePreviewFeatures>True</EnablePreviewFeatures>
|
<EnablePreviewFeatures>True</EnablePreviewFeatures>
|
||||||
<NoWarn>CA2252</NoWarn>
|
<NoWarn>$(NoWarn);CA2252</NoWarn>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
|
@ -569,9 +569,7 @@ namespace Microsoft.Extensions.Logging.EventSource
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
eventData.DataPointer = (IntPtr)Unsafe.AsPointer(ref value);
|
eventData.DataPointer = (IntPtr)Unsafe.AsPointer(ref value);
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
eventData.Size = sizeof(T);
|
eventData.Size = sizeof(T);
|
||||||
#pragma warning restore 8500
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<NoWarn>0436</NoWarn>
|
<NoWarn>$(NoWarn);0436</NoWarn>
|
||||||
<TargetFrameworks>$(NetCoreAppCurrent);$(NetFrameworkMinimum)</TargetFrameworks>
|
<TargetFrameworks>$(NetCoreAppCurrent);$(NetFrameworkMinimum)</TargetFrameworks>
|
||||||
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and ('$(TargetOS)' == 'browser' or '$(TargetOS)' == 'wasi')">true</DebuggerSupport>
|
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and ('$(TargetOS)' == 'browser' or '$(TargetOS)' == 'wasi')">true</DebuggerSupport>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
@ -11,12 +11,10 @@ namespace System.Buffers
|
||||||
|
|
||||||
public sealed override unsafe IMemoryOwner<T> Rent(int minimumBufferSize = -1)
|
public sealed override unsafe IMemoryOwner<T> Rent(int minimumBufferSize = -1)
|
||||||
{
|
{
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
if (minimumBufferSize == -1)
|
if (minimumBufferSize == -1)
|
||||||
minimumBufferSize = 1 + (4095 / sizeof(T));
|
minimumBufferSize = 1 + (4095 / sizeof(T));
|
||||||
else if (((uint)minimumBufferSize) > Array.MaxLength)
|
else if (((uint)minimumBufferSize) > Array.MaxLength)
|
||||||
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.minimumBufferSize);
|
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.minimumBufferSize);
|
||||||
#pragma warning restore 8500
|
|
||||||
|
|
||||||
return new ArrayMemoryPoolBuffer(minimumBufferSize);
|
return new ArrayMemoryPoolBuffer(minimumBufferSize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Versioning;
|
using System.Runtime.Versioning;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed types
|
|
||||||
|
|
||||||
namespace System.Net.NetworkInformation
|
namespace System.Net.NetworkInformation
|
||||||
{
|
{
|
||||||
internal sealed class BsdIPv4GlobalStatistics : IPGlobalStatistics
|
internal sealed class BsdIPv4GlobalStatistics : IPGlobalStatistics
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Versioning;
|
using System.Runtime.Versioning;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed types
|
|
||||||
|
|
||||||
namespace System.Net.NetworkInformation
|
namespace System.Net.NetworkInformation
|
||||||
{
|
{
|
||||||
internal sealed class BsdIpInterfaceProperties : UnixIPInterfaceProperties
|
internal sealed class BsdIpInterfaceProperties : UnixIPInterfaceProperties
|
||||||
|
|
|
@ -5,8 +5,6 @@ using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed types
|
|
||||||
|
|
||||||
namespace System.Net.NetworkInformation
|
namespace System.Net.NetworkInformation
|
||||||
{
|
{
|
||||||
internal sealed class BsdNetworkInterface : UnixNetworkInterface
|
internal sealed class BsdNetworkInterface : UnixNetworkInterface
|
||||||
|
|
|
@ -8,8 +8,6 @@ using System.Runtime.Versioning;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed types
|
|
||||||
|
|
||||||
namespace System.Net.NetworkInformation
|
namespace System.Net.NetworkInformation
|
||||||
{
|
{
|
||||||
internal abstract class UnixIPGlobalProperties : IPGlobalProperties
|
internal abstract class UnixIPGlobalProperties : IPGlobalProperties
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<NoWarn>169,649</NoWarn>
|
<NoWarn>$(NoWarn);169;649</NoWarn>
|
||||||
<StringResourcesPath>../../src/Resources/Strings.resx</StringResourcesPath>
|
<StringResourcesPath>../../src/Resources/Strings.resx</StringResourcesPath>
|
||||||
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser</TargetFrameworks>
|
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
@ -63,7 +63,7 @@ namespace System.Net.Security
|
||||||
SSPIWrapper.GetVerifyPackageInfo(GlobalSSPI.SSPISecureChannel, SecurityPackage, true);
|
SSPIWrapper.GetVerifyPackageInfo(GlobalSSPI.SSPISecureChannel, SecurityPackage, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetAlpn(ref InputSecurityBuffers inputBuffers, List<SslApplicationProtocol> alpn, Span<byte> localBuffer)
|
private static unsafe void SetAlpn(ref InputSecurityBuffers inputBuffers, List<SslApplicationProtocol> alpn, Span<byte> localBuffer)
|
||||||
{
|
{
|
||||||
if (alpn.Count == 1 && alpn[0] == SslApplicationProtocol.Http11)
|
if (alpn.Count == 1 && alpn[0] == SslApplicationProtocol.Http11)
|
||||||
{
|
{
|
||||||
|
@ -84,7 +84,7 @@ namespace System.Net.Security
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int protocolLength = Interop.Sec_Application_Protocols.GetProtocolLength(alpn);
|
int protocolLength = Interop.Sec_Application_Protocols.GetProtocolLength(alpn);
|
||||||
int bufferLength = Unsafe.SizeOf<Interop.Sec_Application_Protocols>() + protocolLength;
|
int bufferLength = sizeof(Interop.Sec_Application_Protocols) + protocolLength;
|
||||||
|
|
||||||
Span<byte> alpnBuffer = bufferLength <= localBuffer.Length ? localBuffer : new byte[bufferLength];
|
Span<byte> alpnBuffer = bufferLength <= localBuffer.Length ? localBuffer : new byte[bufferLength];
|
||||||
Interop.Sec_Application_Protocols.SetProtocols(alpnBuffer, alpn, protocolLength);
|
Interop.Sec_Application_Protocols.SetProtocols(alpnBuffer, alpn, protocolLength);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
Dependencies are broken via Fakes. Since we are referencing netstandard, the real types can conflict with the ones
|
Dependencies are broken via Fakes. Since we are referencing netstandard, the real types can conflict with the ones
|
||||||
imported. We are disabling the "Type conflicts with the imported type CS0436 warning" for these types of projects.
|
imported. We are disabling the "Type conflicts with the imported type CS0436 warning" for these types of projects.
|
||||||
-->
|
-->
|
||||||
<NoWarn>436</NoWarn>
|
<NoWarn>$(NoWarn);436</NoWarn>
|
||||||
<!-- Disable: CLSCompliant attribute is not needed -->
|
<!-- Disable: CLSCompliant attribute is not needed -->
|
||||||
<NoWarn>$(NoWarn);3021;SYSLIB0057</NoWarn>
|
<NoWarn>$(NoWarn);3021;SYSLIB0057</NoWarn>
|
||||||
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser;$(NetCoreAppCurrent)-osx;$(NetCoreAppCurrent)-ios;$(NetCoreAppCurrent)-android</TargetFrameworks>
|
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser;$(NetCoreAppCurrent)-osx;$(NetCoreAppCurrent)-ios;$(NetCoreAppCurrent)-android</TargetFrameworks>
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
// Changes to this file must follow the https://aka.ms/api-review process.
|
// Changes to this file must follow the https://aka.ms/api-review process.
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
|
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
public readonly partial struct NIndex : System.IEquatable<System.Buffers.NIndex>
|
public readonly partial struct NIndex : System.IEquatable<System.Buffers.NIndex>
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Diagnostics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
/// <summary>Performs primitive tensor operations over spans of memory.</summary>
|
/// <summary>Performs primitive tensor operations over spans of memory.</summary>
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
@ -2278,28 +2276,28 @@ namespace System.Numerics.Tensors
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static Vector128<T> CreateAlignmentMaskVector128<T>(int count)
|
private static Vector128<T> CreateAlignmentMaskVector128<T>(int count)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(AlignmentByteMask_64x65)),
|
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(AlignmentByteMask_64x65)),
|
||||||
(uint)(count * 64));
|
(uint)(count * 64));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 2)
|
if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(AlignmentUInt16Mask_32x33)),
|
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(AlignmentUInt16Mask_32x33)),
|
||||||
(uint)(count * 32));
|
(uint)(count * 32));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 4)
|
if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(AlignmentUInt32Mask_16x17)),
|
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(AlignmentUInt32Mask_16x17)),
|
||||||
(uint)(count * 16));
|
(uint)(count * 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(AlignmentUInt64Mask_8x9)),
|
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(AlignmentUInt64Mask_8x9)),
|
||||||
|
@ -2314,28 +2312,28 @@ namespace System.Numerics.Tensors
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static Vector256<T> CreateAlignmentMaskVector256<T>(int count)
|
private static Vector256<T> CreateAlignmentMaskVector256<T>(int count)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(AlignmentByteMask_64x65)),
|
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(AlignmentByteMask_64x65)),
|
||||||
(uint)(count * 64));
|
(uint)(count * 64));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 2)
|
if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(AlignmentUInt16Mask_32x33)),
|
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(AlignmentUInt16Mask_32x33)),
|
||||||
(uint)(count * 32));
|
(uint)(count * 32));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 4)
|
if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(AlignmentUInt32Mask_16x17)),
|
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(AlignmentUInt32Mask_16x17)),
|
||||||
(uint)(count * 16));
|
(uint)(count * 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(AlignmentUInt64Mask_8x9)),
|
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(AlignmentUInt64Mask_8x9)),
|
||||||
|
@ -2350,28 +2348,28 @@ namespace System.Numerics.Tensors
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static Vector512<T> CreateAlignmentMaskVector512<T>(int count)
|
private static Vector512<T> CreateAlignmentMaskVector512<T>(int count)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(AlignmentByteMask_64x65)),
|
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(AlignmentByteMask_64x65)),
|
||||||
(uint)(count * 64));
|
(uint)(count * 64));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 2)
|
if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(AlignmentUInt16Mask_32x33)),
|
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(AlignmentUInt16Mask_32x33)),
|
||||||
(uint)(count * 32));
|
(uint)(count * 32));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 4)
|
if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(AlignmentUInt32Mask_16x17)),
|
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(AlignmentUInt32Mask_16x17)),
|
||||||
(uint)(count * 16));
|
(uint)(count * 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(AlignmentUInt64Mask_8x9)),
|
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(AlignmentUInt64Mask_8x9)),
|
||||||
|
@ -2386,28 +2384,28 @@ namespace System.Numerics.Tensors
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static Vector128<T> CreateRemainderMaskVector128<T>(int count)
|
private static Vector128<T> CreateRemainderMaskVector128<T>(int count)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(RemainderByteMask_64x65)),
|
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(RemainderByteMask_64x65)),
|
||||||
(uint)(count * 64) + 48); // last 16 bytes in the row
|
(uint)(count * 64) + 48); // last 16 bytes in the row
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 2)
|
if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(RemainderUInt16Mask_32x33)),
|
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(RemainderUInt16Mask_32x33)),
|
||||||
(uint)(count * 32) + 24); // last 8 shorts in the row
|
(uint)(count * 32) + 24); // last 8 shorts in the row
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 4)
|
if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(RemainderUInt32Mask_16x17)),
|
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(RemainderUInt32Mask_16x17)),
|
||||||
(uint)(count * 16) + 12); // last 4 ints in the row
|
(uint)(count * 16) + 12); // last 4 ints in the row
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
{
|
{
|
||||||
return Vector128.LoadUnsafe(
|
return Vector128.LoadUnsafe(
|
||||||
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(RemainderUInt64Mask_8x9)),
|
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(RemainderUInt64Mask_8x9)),
|
||||||
|
@ -2422,28 +2420,28 @@ namespace System.Numerics.Tensors
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static Vector256<T> CreateRemainderMaskVector256<T>(int count)
|
private static Vector256<T> CreateRemainderMaskVector256<T>(int count)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(RemainderByteMask_64x65)),
|
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(RemainderByteMask_64x65)),
|
||||||
(uint)(count * 64) + 32); // last 32 bytes in the row
|
(uint)(count * 64) + 32); // last 32 bytes in the row
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 2)
|
if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(RemainderUInt16Mask_32x33)),
|
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(RemainderUInt16Mask_32x33)),
|
||||||
(uint)(count * 32) + 16); // last 16 shorts in the row
|
(uint)(count * 32) + 16); // last 16 shorts in the row
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 4)
|
if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(RemainderUInt32Mask_16x17)),
|
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(RemainderUInt32Mask_16x17)),
|
||||||
(uint)(count * 16) + 8); // last 8 ints in the row
|
(uint)(count * 16) + 8); // last 8 ints in the row
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
{
|
{
|
||||||
return Vector256.LoadUnsafe(
|
return Vector256.LoadUnsafe(
|
||||||
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(RemainderUInt64Mask_8x9)),
|
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(RemainderUInt64Mask_8x9)),
|
||||||
|
@ -2458,28 +2456,28 @@ namespace System.Numerics.Tensors
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static Vector512<T> CreateRemainderMaskVector512<T>(int count)
|
private static Vector512<T> CreateRemainderMaskVector512<T>(int count)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(RemainderByteMask_64x65)),
|
ref Unsafe.As<byte, T>(ref MemoryMarshal.GetReference(RemainderByteMask_64x65)),
|
||||||
(uint)(count * 64));
|
(uint)(count * 64));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 2)
|
if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(RemainderUInt16Mask_32x33)),
|
ref Unsafe.As<ushort, T>(ref MemoryMarshal.GetReference(RemainderUInt16Mask_32x33)),
|
||||||
(uint)(count * 32));
|
(uint)(count * 32));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 4)
|
if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(RemainderUInt32Mask_16x17)),
|
ref Unsafe.As<uint, T>(ref MemoryMarshal.GetReference(RemainderUInt32Mask_16x17)),
|
||||||
(uint)(count * 16));
|
(uint)(count * 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
{
|
{
|
||||||
return Vector512.LoadUnsafe(
|
return Vector512.LoadUnsafe(
|
||||||
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(RemainderUInt64Mask_8x9)),
|
ref Unsafe.As<ulong, T>(ref MemoryMarshal.GetReference(RemainderUInt64Mask_8x9)),
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
@ -2740,27 +2738,27 @@ namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
// We need to do log2(count) operations to compute the total sum
|
// We need to do log2(count) operations to compute the total sum
|
||||||
|
|
||||||
if (Unsafe.SizeOf<T>() == 1)
|
if (sizeof(T) == 1)
|
||||||
{
|
{
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7)).As<byte, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7)).As<byte, T>());
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)4, 5, 6, 7, 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15)).As<byte, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)4, 5, 6, 7, 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15)).As<byte, T>());
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)2, 3, 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)).As<byte, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)2, 3, 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)).As<byte, T>());
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)).As<byte, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsByte(), Vector128.Create((byte)1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)).As<byte, T>());
|
||||||
}
|
}
|
||||||
else if (Unsafe.SizeOf<T>() == 2)
|
else if (sizeof(T) == 2)
|
||||||
{
|
{
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt16(), Vector128.Create(4, 5, 6, 7, 0, 1, 2, 3)).As<short, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt16(), Vector128.Create(4, 5, 6, 7, 0, 1, 2, 3)).As<short, T>());
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt16(), Vector128.Create(2, 3, 0, 1, 4, 5, 6, 7)).As<short, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt16(), Vector128.Create(2, 3, 0, 1, 4, 5, 6, 7)).As<short, T>());
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt16(), Vector128.Create(1, 0, 2, 3, 4, 5, 6, 7)).As<short, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt16(), Vector128.Create(1, 0, 2, 3, 4, 5, 6, 7)).As<short, T>());
|
||||||
}
|
}
|
||||||
else if (Unsafe.SizeOf<T>() == 4)
|
else if (sizeof(T) == 4)
|
||||||
{
|
{
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt32(), Vector128.Create(2, 3, 0, 1)).As<int, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt32(), Vector128.Create(2, 3, 0, 1)).As<int, T>());
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt32(), Vector128.Create(1, 0, 3, 2)).As<int, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt32(), Vector128.Create(1, 0, 3, 2)).As<int, T>());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == 8);
|
Debug.Assert(sizeof(T) == 8);
|
||||||
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt64(), Vector128.Create(1, 0)).As<long, T>());
|
x = TAggregate.Invoke(x, Vector128.Shuffle(x.AsInt64(), Vector128.Create(1, 0)).As<long, T>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,6 @@ using System.Diagnostics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
@ -90,7 +88,7 @@ namespace System.Numerics.Tensors
|
||||||
|
|
||||||
nuint remainder = (uint)x.Length;
|
nuint remainder = (uint)x.Length;
|
||||||
|
|
||||||
if (Vector512.IsHardwareAccelerated && Vector512<TInput>.IsSupported && Vector512<TOutput>.IsSupported && TUnaryOperator.Vectorizable && Unsafe.SizeOf<TInput>() == Unsafe.SizeOf<TOutput>())
|
if (Vector512.IsHardwareAccelerated && Vector512<TInput>.IsSupported && Vector512<TOutput>.IsSupported && TUnaryOperator.Vectorizable && sizeof(TInput) == sizeof(TOutput))
|
||||||
{
|
{
|
||||||
if (remainder >= (uint)Vector512<TInput>.Count)
|
if (remainder >= (uint)Vector512<TInput>.Count)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +106,7 @@ namespace System.Numerics.Tensors
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Vector256.IsHardwareAccelerated && Vector256<TInput>.IsSupported && Vector256<TOutput>.IsSupported && TUnaryOperator.Vectorizable && Unsafe.SizeOf<TInput>() == Unsafe.SizeOf<TOutput>())
|
if (Vector256.IsHardwareAccelerated && Vector256<TInput>.IsSupported && Vector256<TOutput>.IsSupported && TUnaryOperator.Vectorizable && sizeof(TInput) == sizeof(TOutput))
|
||||||
{
|
{
|
||||||
if (remainder >= (uint)Vector256<TInput>.Count)
|
if (remainder >= (uint)Vector256<TInput>.Count)
|
||||||
{
|
{
|
||||||
|
@ -126,7 +124,7 @@ namespace System.Numerics.Tensors
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Vector128.IsHardwareAccelerated && Vector128<TInput>.IsSupported && Vector128<TOutput>.IsSupported && TUnaryOperator.Vectorizable && Unsafe.SizeOf<TInput>() == Unsafe.SizeOf<TOutput>())
|
if (Vector128.IsHardwareAccelerated && Vector128<TInput>.IsSupported && Vector128<TOutput>.IsSupported && TUnaryOperator.Vectorizable && sizeof(TInput) == sizeof(TOutput))
|
||||||
{
|
{
|
||||||
if (remainder >= (uint)Vector128<TInput>.Count)
|
if (remainder >= (uint)Vector128<TInput>.Count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static unsafe partial class TensorPrimitives
|
public static unsafe partial class TensorPrimitives
|
||||||
|
|
|
@ -12,7 +12,6 @@ using EditorBrowsableAttribute = System.ComponentModel.EditorBrowsableAttribute;
|
||||||
using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
|
using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
|
||||||
|
|
||||||
#pragma warning disable 0809 //warning CS0809: Obsolete member 'ReadOnlyTensorSpan<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
|
#pragma warning disable 0809 //warning CS0809: Obsolete member 'ReadOnlyTensorSpan<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,6 @@ using Microsoft.VisualBasic;
|
||||||
|
|
||||||
#pragma warning disable CS8601 // Possible null reference assignment.
|
#pragma warning disable CS8601 // Possible null reference assignment.
|
||||||
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,7 +14,6 @@ using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||||
|
|
||||||
#pragma warning disable CS8601 // Possible null reference assignment.
|
#pragma warning disable CS8601 // Possible null reference assignment.
|
||||||
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,7 +14,6 @@ using System.Runtime.Serialization;
|
||||||
|
|
||||||
#pragma warning disable CS8601 // Possible null reference assignment.
|
#pragma warning disable CS8601 // Possible null reference assignment.
|
||||||
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static partial class TensorPrimitives
|
public static partial class TensorPrimitives
|
||||||
|
|
|
@ -7,8 +7,6 @@ using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
using System.Runtime.Intrinsics.X86;
|
using System.Runtime.Intrinsics.X86;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static partial class TensorPrimitives
|
public static partial class TensorPrimitives
|
||||||
|
|
|
@ -7,8 +7,6 @@ using System.Runtime.Intrinsics;
|
||||||
using System.Runtime.Intrinsics.Arm;
|
using System.Runtime.Intrinsics.Arm;
|
||||||
using System.Runtime.Intrinsics.X86;
|
using System.Runtime.Intrinsics.X86;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static partial class TensorPrimitives
|
public static partial class TensorPrimitives
|
||||||
|
|
|
@ -7,8 +7,6 @@ using System.Runtime.Intrinsics;
|
||||||
using System.Runtime.Intrinsics.Arm;
|
using System.Runtime.Intrinsics.Arm;
|
||||||
using System.Runtime.Intrinsics.Wasm;
|
using System.Runtime.Intrinsics.Wasm;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static partial class TensorPrimitives
|
public static partial class TensorPrimitives
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static partial class TensorPrimitives
|
public static partial class TensorPrimitives
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
using System.Runtime.Intrinsics.Arm;
|
using System.Runtime.Intrinsics.Arm;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
public static partial class TensorPrimitives
|
public static partial class TensorPrimitives
|
||||||
|
|
|
@ -12,7 +12,6 @@ using EditorBrowsableAttribute = System.ComponentModel.EditorBrowsableAttribute;
|
||||||
using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
|
using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
|
||||||
|
|
||||||
#pragma warning disable 0809 //warning CS0809: Obsolete member 'TensorSpan<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
|
#pragma warning disable 0809 //warning CS0809: Obsolete member 'TensorSpan<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
internal static partial class TensorSpanHelpers // .T
|
internal static partial class TensorSpanHelpers // .T
|
||||||
|
|
|
@ -8,8 +8,6 @@ using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Numerics.Tensors
|
namespace System.Numerics.Tensors
|
||||||
{
|
{
|
||||||
internal static partial class TensorSpanHelpers
|
internal static partial class TensorSpanHelpers
|
||||||
|
|
|
@ -321,14 +321,12 @@ namespace System.Numerics
|
||||||
public static bool LessThanOrEqualAny<T>(System.Numerics.Vector<T> left, System.Numerics.Vector<T> right) { throw null; }
|
public static bool LessThanOrEqualAny<T>(System.Numerics.Vector<T> left, System.Numerics.Vector<T> right) { throw null; }
|
||||||
public static System.Numerics.Vector<T> LessThanOrEqual<T>(System.Numerics.Vector<T> left, System.Numerics.Vector<T> right) { throw null; }
|
public static System.Numerics.Vector<T> LessThanOrEqual<T>(System.Numerics.Vector<T> left, System.Numerics.Vector<T> right) { throw null; }
|
||||||
public static System.Numerics.Vector<T> LessThan<T>(System.Numerics.Vector<T> left, System.Numerics.Vector<T> right) { throw null; }
|
public static System.Numerics.Vector<T> LessThan<T>(System.Numerics.Vector<T> left, System.Numerics.Vector<T> right) { throw null; }
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static unsafe System.Numerics.Vector<T> Load<T>(T* source) { throw null; }
|
public static unsafe System.Numerics.Vector<T> Load<T>(T* source) { throw null; }
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static unsafe System.Numerics.Vector<T> LoadAligned<T>(T* source) { throw null; }
|
public static unsafe System.Numerics.Vector<T> LoadAligned<T>(T* source) { throw null; }
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static unsafe System.Numerics.Vector<T> LoadAlignedNonTemporal<T>(T* source) { throw null; }
|
public static unsafe System.Numerics.Vector<T> LoadAlignedNonTemporal<T>(T* source) { throw null; }
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
public static System.Numerics.Vector<T> LoadUnsafe<T>(ref readonly T source) { throw null; }
|
public static System.Numerics.Vector<T> LoadUnsafe<T>(ref readonly T source) { throw null; }
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static System.Numerics.Vector<T> LoadUnsafe<T>(ref readonly T source, nuint elementOffset) { throw null; }
|
public static System.Numerics.Vector<T> LoadUnsafe<T>(ref readonly T source, nuint elementOffset) { throw null; }
|
||||||
|
@ -407,14 +405,12 @@ namespace System.Numerics
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static System.Numerics.Vector<System.UInt64> ShiftRightLogical(System.Numerics.Vector<System.UInt64> value, int shiftCount) { throw null; }
|
public static System.Numerics.Vector<System.UInt64> ShiftRightLogical(System.Numerics.Vector<System.UInt64> value, int shiftCount) { throw null; }
|
||||||
public static System.Numerics.Vector<T> SquareRoot<T>(System.Numerics.Vector<T> value) { throw null; }
|
public static System.Numerics.Vector<T> SquareRoot<T>(System.Numerics.Vector<T> value) { throw null; }
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static unsafe void Store<T>(this System.Numerics.Vector<T> source, T* destination) { throw null; }
|
public static unsafe void Store<T>(this System.Numerics.Vector<T> source, T* destination) { throw null; }
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static unsafe void StoreAligned<T>(this System.Numerics.Vector<T> source, T* destination) { throw null; }
|
public static unsafe void StoreAligned<T>(this System.Numerics.Vector<T> source, T* destination) { throw null; }
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static unsafe void StoreAlignedNonTemporal<T>(this System.Numerics.Vector<T> source, T* destination) { throw null; }
|
public static unsafe void StoreAlignedNonTemporal<T>(this System.Numerics.Vector<T> source, T* destination) { throw null; }
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
public static void StoreUnsafe<T>(this System.Numerics.Vector<T> source, ref T destination) { throw null; }
|
public static void StoreUnsafe<T>(this System.Numerics.Vector<T> source, ref T destination) { throw null; }
|
||||||
[System.CLSCompliantAttribute(false)]
|
[System.CLSCompliantAttribute(false)]
|
||||||
public static void StoreUnsafe<T>(this System.Numerics.Vector<T> source, ref T destination, nuint elementOffset) { throw null; }
|
public static void StoreUnsafe<T>(this System.Numerics.Vector<T> source, ref T destination, nuint elementOffset) { throw null; }
|
||||||
|
|
|
@ -12,8 +12,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using Internal.Runtime;
|
using Internal.Runtime;
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
|
|
|
@ -150,7 +150,6 @@ namespace System
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
internal static unsafe void Memmove<T>(ref T destination, ref T source, nuint elementCount)
|
internal static unsafe void Memmove<T>(ref T destination, ref T source, nuint elementCount)
|
||||||
{
|
{
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
if (!RuntimeHelpers.IsReferenceOrContainsReferences<T>())
|
if (!RuntimeHelpers.IsReferenceOrContainsReferences<T>())
|
||||||
{
|
{
|
||||||
// Blittable memmove
|
// Blittable memmove
|
||||||
|
@ -167,7 +166,6 @@ namespace System
|
||||||
ref Unsafe.As<T, byte>(ref source),
|
ref Unsafe.As<T, byte>(ref source),
|
||||||
elementCount * (nuint)sizeof(T));
|
elementCount * (nuint)sizeof(T));
|
||||||
}
|
}
|
||||||
#pragma warning restore 8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The maximum block size to for __BulkMoveWithWriteBarrier FCall. This is required to avoid GC starvation.
|
// The maximum block size to for __BulkMoveWithWriteBarrier FCall. This is required to avoid GC starvation.
|
||||||
|
|
|
@ -154,14 +154,12 @@ namespace System.Buffers.Text
|
||||||
#if NET
|
#if NET
|
||||||
int encodedLength = GetEncodedLength(source.Length);
|
int encodedLength = GetEncodedLength(source.Length);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
return string.Create(encodedLength, (IntPtr)(&source), static (buffer, spanPtr) =>
|
return string.Create(encodedLength, (IntPtr)(&source), static (buffer, spanPtr) =>
|
||||||
{
|
{
|
||||||
ReadOnlySpan<byte> source = *(ReadOnlySpan<byte>*)spanPtr;
|
ReadOnlySpan<byte> source = *(ReadOnlySpan<byte>*)spanPtr;
|
||||||
EncodeToChars(source, buffer, out _, out int charsWritten);
|
EncodeToChars(source, buffer, out _, out int charsWritten);
|
||||||
Debug.Assert(buffer.Length == charsWritten, $"The source length: {source.Length}, bytes written: {charsWritten}");
|
Debug.Assert(buffer.Length == charsWritten, $"The source length: {source.Length}, bytes written: {charsWritten}");
|
||||||
});
|
});
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
#else
|
#else
|
||||||
char[] destination = new char[GetEncodedLength(source.Length)];
|
char[] destination = new char[GetEncodedLength(source.Length)];
|
||||||
EncodeToChars(source, destination, out _, out int charsWritten);
|
EncodeToChars(source, destination, out _, out int charsWritten);
|
||||||
|
|
|
@ -500,9 +500,8 @@ namespace System.Collections.Generic
|
||||||
{
|
{
|
||||||
Swap(ref leftRef, ref nextToLastRef);
|
Swap(ref leftRef, ref nextToLastRef);
|
||||||
}
|
}
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
return (int)((nint)Unsafe.ByteOffset(ref zeroRef, ref leftRef) / sizeof(T));
|
return (int)((nint)Unsafe.ByteOffset(ref zeroRef, ref leftRef) / sizeof(T));
|
||||||
#pragma warning restore 8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HeapSort(Span<T> keys)
|
private static void HeapSort(Span<T> keys)
|
||||||
|
|
|
@ -1121,12 +1121,7 @@ namespace System.Diagnostics.Tracing
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the object as a IntPtr - safe when only used for logging
|
// Returns the object as a IntPtr - safe when only used for logging
|
||||||
internal static unsafe nint ObjectIDForEvents(object? o)
|
internal static unsafe nint ObjectIDForEvents(object? o) => *(nint*)&o;
|
||||||
{
|
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
return *(nint*)&o;
|
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma warning restore 1591
|
#pragma warning restore 1591
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,6 @@ using System.Diagnostics;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
public abstract partial class Enum
|
public abstract partial class Enum
|
||||||
|
|
|
@ -14,8 +14,6 @@ using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // Allow taking address of managed types
|
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
/// <summary>Provides the base class for enumerations.</summary>
|
/// <summary>Provides the base class for enumerations.</summary>
|
||||||
|
@ -172,7 +170,7 @@ namespace System
|
||||||
/// <param name="value">The underlying value for which we're searching.</param>
|
/// <param name="value">The underlying value for which we're searching.</param>
|
||||||
/// <returns>The name of the value if found; otherwise, <see langword="null"/>.</returns>
|
/// <returns>The name of the value if found; otherwise, <see langword="null"/>.</returns>
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static string? GetNameInlined<TStorage>(EnumInfo<TStorage> enumInfo, TStorage value)
|
private static unsafe string? GetNameInlined<TStorage>(EnumInfo<TStorage> enumInfo, TStorage value)
|
||||||
where TStorage : struct, INumber<TStorage>
|
where TStorage : struct, INumber<TStorage>
|
||||||
{
|
{
|
||||||
string[] names = enumInfo.Names;
|
string[] names = enumInfo.Names;
|
||||||
|
@ -182,7 +180,7 @@ namespace System
|
||||||
// in the array is where the corresponding name is stored.
|
// in the array is where the corresponding name is stored.
|
||||||
if (enumInfo.ValuesAreSequentialFromZero)
|
if (enumInfo.ValuesAreSequentialFromZero)
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<TStorage>() <= sizeof(uint))
|
if (sizeof(TStorage) <= sizeof(uint))
|
||||||
{
|
{
|
||||||
// Special-case types types that are <= sizeof(int), as we can then eliminate a bounds check on the array.
|
// Special-case types types that are <= sizeof(int), as we can then eliminate a bounds check on the array.
|
||||||
uint uint32Value = uint.CreateTruncating(value);
|
uint uint32Value = uint.CreateTruncating(value);
|
||||||
|
@ -1541,20 +1539,20 @@ namespace System
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data)
|
fixed (byte* ptr = &data)
|
||||||
{
|
{
|
||||||
return string.Create(Unsafe.SizeOf<TStorage>() * 2, (IntPtr)ptr, (destination, intptr) =>
|
return string.Create(sizeof(TStorage) * 2, (IntPtr)ptr, (destination, intptr) =>
|
||||||
{
|
{
|
||||||
bool success = TryFormatNumberAsHex<TStorage>(ref *(byte*)intptr, destination, out int charsWritten);
|
bool success = TryFormatNumberAsHex<TStorage>(ref *(byte*)intptr, destination, out int charsWritten);
|
||||||
Debug.Assert(success);
|
Debug.Assert(success);
|
||||||
Debug.Assert(charsWritten == Unsafe.SizeOf<TStorage>() * 2);
|
Debug.Assert(charsWritten == sizeof(TStorage) * 2);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Tries to format the data for the underlying value as hex into the destination span.</summary>
|
/// <summary>Tries to format the data for the underlying value as hex into the destination span.</summary>
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static bool TryFormatNumberAsHex<TStorage>(ref byte data, Span<char> destination, out int charsWritten) where TStorage : struct
|
private static unsafe bool TryFormatNumberAsHex<TStorage>(ref byte data, Span<char> destination, out int charsWritten) where TStorage : struct
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<TStorage>() * 2 <= destination.Length)
|
if (sizeof(TStorage) * 2 <= destination.Length)
|
||||||
{
|
{
|
||||||
if (typeof(TStorage) == typeof(byte) ||
|
if (typeof(TStorage) == typeof(byte) ||
|
||||||
typeof(TStorage) == typeof(sbyte))
|
typeof(TStorage) == typeof(sbyte))
|
||||||
|
@ -1604,7 +1602,7 @@ namespace System
|
||||||
throw new InvalidOperationException(SR.InvalidOperation_UnknownEnumType);
|
throw new InvalidOperationException(SR.InvalidOperation_UnknownEnumType);
|
||||||
}
|
}
|
||||||
|
|
||||||
charsWritten = Unsafe.SizeOf<TStorage>() * 2;
|
charsWritten = sizeof(TStorage) * 2;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,9 +144,7 @@ namespace System.Globalization
|
||||||
IcuEnumCalendarsData callbackContext = default;
|
IcuEnumCalendarsData callbackContext = default;
|
||||||
callbackContext.Results = new List<string>();
|
callbackContext.Results = new List<string>();
|
||||||
callbackContext.DisallowDuplicates = true;
|
callbackContext.DisallowDuplicates = true;
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
bool result = EnumCalendarInfo(localeName, calendarId, dataType, &callbackContext);
|
bool result = EnumCalendarInfo(localeName, calendarId, dataType, &callbackContext);
|
||||||
#pragma warning restore CS8500
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
List<string> datePatternsList = callbackContext.Results;
|
List<string> datePatternsList = callbackContext.Results;
|
||||||
|
@ -372,9 +370,7 @@ namespace System.Globalization
|
||||||
|
|
||||||
IcuEnumCalendarsData callbackContext = default;
|
IcuEnumCalendarsData callbackContext = default;
|
||||||
callbackContext.Results = new List<string>();
|
callbackContext.Results = new List<string>();
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
bool result = EnumCalendarInfo(localeName, calendarId, dataType, &callbackContext);
|
bool result = EnumCalendarInfo(localeName, calendarId, dataType, &callbackContext);
|
||||||
#pragma warning restore CS8500
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
// the month-name arrays are expected to have 13 elements. If ICU only returns 12, add an
|
// the month-name arrays are expected to have 13 elements. If ICU only returns 12, add an
|
||||||
|
@ -422,9 +418,7 @@ namespace System.Globalization
|
||||||
|
|
||||||
IcuEnumCalendarsData callbackContext = default;
|
IcuEnumCalendarsData callbackContext = default;
|
||||||
callbackContext.Results = new List<string>();
|
callbackContext.Results = new List<string>();
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
bool result = EnumCalendarInfo(localeName, calendarId, dataType, &callbackContext);
|
bool result = EnumCalendarInfo(localeName, calendarId, dataType, &callbackContext);
|
||||||
#pragma warning restore CS8500
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
calendarData = callbackContext.Results.ToArray();
|
calendarData = callbackContext.Results.ToArray();
|
||||||
|
@ -433,7 +427,6 @@ namespace System.Globalization
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // takes address of managed type
|
|
||||||
private static unsafe bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, IcuEnumCalendarsData* callbackContext)
|
private static unsafe bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, IcuEnumCalendarsData* callbackContext)
|
||||||
{
|
{
|
||||||
#if TARGET_MACCATALYST || TARGET_IOS || TARGET_TVOS
|
#if TARGET_MACCATALYST || TARGET_IOS || TARGET_TVOS
|
||||||
|
@ -443,7 +436,6 @@ namespace System.Globalization
|
||||||
return Interop.Globalization.EnumCalendarInfo(&EnumCalendarInfoCallback, localeName, calendarId, dataType, (IntPtr)callbackContext);
|
return Interop.Globalization.EnumCalendarInfo(&EnumCalendarInfoCallback, localeName, calendarId, dataType, (IntPtr)callbackContext);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
[UnmanagedCallersOnly]
|
[UnmanagedCallersOnly]
|
||||||
private static unsafe void EnumCalendarInfoCallback(char* calendarStringPtr, IntPtr context)
|
private static unsafe void EnumCalendarInfoCallback(char* calendarStringPtr, IntPtr context)
|
||||||
|
@ -451,9 +443,7 @@ namespace System.Globalization
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ReadOnlySpan<char> calendarStringSpan = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(calendarStringPtr);
|
ReadOnlySpan<char> calendarStringSpan = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(calendarStringPtr);
|
||||||
#pragma warning disable 8500
|
|
||||||
IcuEnumCalendarsData* callbackContext = (IcuEnumCalendarsData*)context;
|
IcuEnumCalendarsData* callbackContext = (IcuEnumCalendarsData*)context;
|
||||||
#pragma warning restore 8500
|
|
||||||
|
|
||||||
if (callbackContext->DisallowDuplicates)
|
if (callbackContext->DisallowDuplicates)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Diagnostics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed type
|
|
||||||
|
|
||||||
namespace System.Globalization
|
namespace System.Globalization
|
||||||
{
|
{
|
||||||
internal sealed partial class CalendarData
|
internal sealed partial class CalendarData
|
||||||
|
|
|
@ -5,8 +5,6 @@ using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed type
|
|
||||||
|
|
||||||
namespace System.Globalization
|
namespace System.Globalization
|
||||||
{
|
{
|
||||||
internal sealed partial class CalendarData
|
internal sealed partial class CalendarData
|
||||||
|
|
|
@ -8,8 +8,6 @@ using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
#pragma warning disable 8500 // taking address of managed type
|
|
||||||
|
|
||||||
namespace System.Globalization
|
namespace System.Globalization
|
||||||
{
|
{
|
||||||
internal sealed partial class CultureData
|
internal sealed partial class CultureData
|
||||||
|
|
|
@ -731,7 +731,6 @@ namespace System.IO
|
||||||
{
|
{
|
||||||
Debug.Assert(first.Length > 0 && second.Length > 0 && third.Length > 0 && fourth.Length > 0, "should have dealt with empty paths");
|
Debug.Assert(first.Length > 0 && second.Length > 0 && third.Length > 0 && fourth.Length > 0, "should have dealt with empty paths");
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
|
|
||||||
var state = new JoinInternalState
|
var state = new JoinInternalState
|
||||||
{
|
{
|
||||||
ReadOnlySpanPtr1 = (IntPtr)(&first),
|
ReadOnlySpanPtr1 = (IntPtr)(&first),
|
||||||
|
@ -782,7 +781,6 @@ namespace System.IO
|
||||||
Debug.Assert(fourth.Length == destination.Length);
|
Debug.Assert(fourth.Length == destination.Length);
|
||||||
fourth.CopyTo(destination);
|
fourth.CopyTo(destination);
|
||||||
});
|
});
|
||||||
#pragma warning restore CS8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private struct JoinInternalState // used to avoid rooting ValueTuple`7
|
private struct JoinInternalState // used to avoid rooting ValueTuple`7
|
||||||
|
|
|
@ -11,8 +11,6 @@ using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3986,32 +3984,32 @@ namespace System
|
||||||
/// <param name="value">The value for which to search.</param>
|
/// <param name="value">The value for which to search.</param>
|
||||||
/// <returns>The number of times <paramref name="value"/> was found in the <paramref name="span"/>.</returns>
|
/// <returns>The number of times <paramref name="value"/> was found in the <paramref name="span"/>.</returns>
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static int Count<T>(this ReadOnlySpan<T> span, T value) where T : IEquatable<T>?
|
public static unsafe int Count<T>(this ReadOnlySpan<T> span, T value) where T : IEquatable<T>?
|
||||||
{
|
{
|
||||||
if (RuntimeHelpers.IsBitwiseEquatable<T>())
|
if (RuntimeHelpers.IsBitwiseEquatable<T>())
|
||||||
{
|
{
|
||||||
if (Unsafe.SizeOf<T>() == sizeof(byte))
|
if (sizeof(T) == sizeof(byte))
|
||||||
{
|
{
|
||||||
return SpanHelpers.CountValueType(
|
return SpanHelpers.CountValueType(
|
||||||
ref Unsafe.As<T, byte>(ref MemoryMarshal.GetReference(span)),
|
ref Unsafe.As<T, byte>(ref MemoryMarshal.GetReference(span)),
|
||||||
Unsafe.BitCast<T, byte>(value),
|
Unsafe.BitCast<T, byte>(value),
|
||||||
span.Length);
|
span.Length);
|
||||||
}
|
}
|
||||||
else if (Unsafe.SizeOf<T>() == sizeof(short))
|
else if (sizeof(T) == sizeof(short))
|
||||||
{
|
{
|
||||||
return SpanHelpers.CountValueType(
|
return SpanHelpers.CountValueType(
|
||||||
ref Unsafe.As<T, short>(ref MemoryMarshal.GetReference(span)),
|
ref Unsafe.As<T, short>(ref MemoryMarshal.GetReference(span)),
|
||||||
Unsafe.BitCast<T, short>(value),
|
Unsafe.BitCast<T, short>(value),
|
||||||
span.Length);
|
span.Length);
|
||||||
}
|
}
|
||||||
else if (Unsafe.SizeOf<T>() == sizeof(int))
|
else if (sizeof(T) == sizeof(int))
|
||||||
{
|
{
|
||||||
return SpanHelpers.CountValueType(
|
return SpanHelpers.CountValueType(
|
||||||
ref Unsafe.As<T, int>(ref MemoryMarshal.GetReference(span)),
|
ref Unsafe.As<T, int>(ref MemoryMarshal.GetReference(span)),
|
||||||
Unsafe.BitCast<T, int>(value),
|
Unsafe.BitCast<T, int>(value),
|
||||||
span.Length);
|
span.Length);
|
||||||
}
|
}
|
||||||
else if (Unsafe.SizeOf<T>() == sizeof(long))
|
else if (sizeof(T) == sizeof(long))
|
||||||
{
|
{
|
||||||
return SpanHelpers.CountValueType(
|
return SpanHelpers.CountValueType(
|
||||||
ref Unsafe.As<T, long>(ref MemoryMarshal.GetReference(span)),
|
ref Unsafe.As<T, long>(ref MemoryMarshal.GetReference(span)),
|
||||||
|
|
|
@ -1501,7 +1501,6 @@ namespace System.Numerics
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
|
@ -1540,7 +1539,6 @@ namespace System.Numerics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static Vector<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
public static Vector<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
@ -2444,7 +2442,6 @@ namespace System.Numerics
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The vector that will be stored.</param>
|
/// <param name="source">The vector that will be stored.</param>
|
||||||
|
@ -2483,7 +2480,6 @@ namespace System.Numerics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static void StoreAlignedNonTemporal<T>(this Vector<T> source, T* destination) => source.StoreAligned(destination);
|
public static void StoreAlignedNonTemporal<T>(this Vector<T> source, T* destination) => source.StoreAligned(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
|
|
@ -136,7 +136,6 @@ namespace System.Numerics
|
||||||
get => Vector.Create(Scalar<T>.AllBitsSet);
|
get => Vector.Create(Scalar<T>.AllBitsSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector{T}" />.</summary>
|
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector{T}" />.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the current instance (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the current instance (<typeparamref name="T" />) is not supported.</exception>
|
||||||
public static int Count
|
public static int Count
|
||||||
|
@ -148,7 +147,6 @@ namespace System.Numerics
|
||||||
return sizeof(Vector<T>) / sizeof(T);
|
return sizeof(Vector<T>) / sizeof(T);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Gets a new <see cref="Vector{T}" /> with the elements set to their index.</summary>
|
/// <summary>Gets a new <see cref="Vector{T}" /> with the elements set to their index.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
|
@ -931,7 +929,6 @@ namespace System.Numerics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
||||||
static bool ISimdVector<Vector<T>, T>.LessThanOrEqualAny(Vector<T> left, Vector<T> right) => Vector.LessThanOrEqualAny(left, right);
|
static bool ISimdVector<Vector<T>, T>.LessThanOrEqualAny(Vector<T> left, Vector<T> right) => Vector.LessThanOrEqualAny(left, right);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
||||||
static Vector<T> ISimdVector<Vector<T>, T>.Load(T* source) => Vector.Load(source);
|
static Vector<T> ISimdVector<Vector<T>, T>.Load(T* source) => Vector.Load(source);
|
||||||
|
|
||||||
|
@ -940,7 +937,6 @@ namespace System.Numerics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
||||||
static Vector<T> ISimdVector<Vector<T>, T>.LoadAlignedNonTemporal(T* source) => Vector.LoadAlignedNonTemporal(source);
|
static Vector<T> ISimdVector<Vector<T>, T>.LoadAlignedNonTemporal(T* source) => Vector.LoadAlignedNonTemporal(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
||||||
static Vector<T> ISimdVector<Vector<T>, T>.LoadUnsafe(ref readonly T source) => Vector.LoadUnsafe(in source);
|
static Vector<T> ISimdVector<Vector<T>, T>.LoadUnsafe(ref readonly T source) => Vector.LoadUnsafe(in source);
|
||||||
|
@ -1008,7 +1004,6 @@ namespace System.Numerics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
||||||
static Vector<T> ISimdVector<Vector<T>, T>.Sqrt(Vector<T> vector) => Vector.SquareRoot(vector);
|
static Vector<T> ISimdVector<Vector<T>, T>.Sqrt(Vector<T> vector) => Vector.SquareRoot(vector);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector<T>, T>.Store(Vector<T> source, T* destination) => source.Store(destination);
|
static void ISimdVector<Vector<T>, T>.Store(Vector<T> source, T* destination) => source.Store(destination);
|
||||||
|
|
||||||
|
@ -1017,7 +1012,6 @@ namespace System.Numerics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector<T>, T>.StoreAlignedNonTemporal(Vector<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
static void ISimdVector<Vector<T>, T>.StoreAlignedNonTemporal(Vector<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
||||||
static void ISimdVector<Vector<T>, T>.StoreUnsafe(Vector<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
static void ISimdVector<Vector<T>, T>.StoreUnsafe(Vector<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
||||||
|
|
|
@ -11,7 +11,6 @@ using EditorBrowsableAttribute = System.ComponentModel.EditorBrowsableAttribute;
|
||||||
using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
|
using EditorBrowsableState = System.ComponentModel.EditorBrowsableState;
|
||||||
|
|
||||||
#pragma warning disable 0809 // Obsolete member 'Span<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
|
#pragma warning disable 0809 // Obsolete member 'Span<T>.Equals(object)' overrides non-obsolete member 'object.Equals(object)'
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
|
|
|
@ -290,15 +290,11 @@ namespace System.Reflection
|
||||||
}
|
}
|
||||||
|
|
||||||
StackAllocatedByRefs byrefs = default;
|
StackAllocatedByRefs byrefs = default;
|
||||||
#pragma warning disable CS8500
|
|
||||||
IntPtr* pByRefFixedStorage = (IntPtr*)&byrefs;
|
IntPtr* pByRefFixedStorage = (IntPtr*)&byrefs;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
for (int i = 0; i < _argCount; i++)
|
for (int i = 0; i < _argCount; i++)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefFixedStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefFixedStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref copyOfArgs[i]!.GetRawData()) :
|
ByReference.Create(ref copyOfArgs[i]!.GetRawData()) :
|
||||||
ByReference.Create(ref copyOfArgs[i]);
|
ByReference.Create(ref copyOfArgs[i]);
|
||||||
}
|
}
|
||||||
|
@ -370,9 +366,7 @@ namespace System.Reflection
|
||||||
object? arg = arguments[i];
|
object? arg = arguments[i];
|
||||||
shouldCopyBack[i] = CheckArgument(ref arg, i);
|
shouldCopyBack[i] = CheckArgument(ref arg, i);
|
||||||
copyOfArgs[i] = arg;
|
copyOfArgs[i] = arg;
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,9 +40,7 @@ namespace System.Reflection
|
||||||
|
|
||||||
for (int i = 0; i < argCount; i++)
|
for (int i = 0; i < argCount; i++)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,15 +160,11 @@ namespace System.Reflection
|
||||||
}
|
}
|
||||||
|
|
||||||
StackAllocatedByRefs byrefs = default;
|
StackAllocatedByRefs byrefs = default;
|
||||||
#pragma warning disable CS8500
|
|
||||||
IntPtr* pByRefFixedStorage = (IntPtr*)&byrefs;
|
IntPtr* pByRefFixedStorage = (IntPtr*)&byrefs;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
for (int i = 0; i < _argCount; i++)
|
for (int i = 0; i < _argCount; i++)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefFixedStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefFixedStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref copyOfArgs[i]!.GetRawData()) :
|
ByReference.Create(ref copyOfArgs[i]!.GetRawData()) :
|
||||||
ByReference.Create(ref copyOfArgs[i]);
|
ByReference.Create(ref copyOfArgs[i]);
|
||||||
}
|
}
|
||||||
|
@ -256,9 +252,7 @@ namespace System.Reflection
|
||||||
|
|
||||||
for (int i = 0; i < _argCount; i++)
|
for (int i = 0; i < _argCount; i++)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
||||||
}
|
}
|
||||||
|
|
|
@ -343,15 +343,11 @@ namespace System.Reflection
|
||||||
}
|
}
|
||||||
|
|
||||||
StackAllocatedByRefs byrefs = default;
|
StackAllocatedByRefs byrefs = default;
|
||||||
#pragma warning disable CS8500
|
|
||||||
IntPtr* pByRefFixedStorage = (IntPtr*)&byrefs;
|
IntPtr* pByRefFixedStorage = (IntPtr*)&byrefs;
|
||||||
#pragma warning restore CS8500
|
|
||||||
|
|
||||||
for (int i = 0; i < _argCount; i++)
|
for (int i = 0; i < _argCount; i++)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefFixedStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefFixedStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref copyOfArgs[i]!.GetRawData()) :
|
ByReference.Create(ref copyOfArgs[i]!.GetRawData()) :
|
||||||
ByReference.Create(ref copyOfArgs[i]);
|
ByReference.Create(ref copyOfArgs[i]);
|
||||||
}
|
}
|
||||||
|
@ -423,9 +419,7 @@ namespace System.Reflection
|
||||||
object? arg = arguments[i];
|
object? arg = arguments[i];
|
||||||
shouldCopyBack[i] = CheckArgument(ref arg, i);
|
shouldCopyBack[i] = CheckArgument(ref arg, i);
|
||||||
copyOfArgs[i] = arg;
|
copyOfArgs[i] = arg;
|
||||||
#pragma warning disable CS8500
|
|
||||||
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
*(ByReference*)(pByRefStorage + i) = (_invokerArgFlags[i] & InvokerArgFlags.IsValueType) != 0 ?
|
||||||
#pragma warning restore CS8500
|
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i).GetRawData()) :
|
||||||
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
ByReference.Create(ref Unsafe.AsRef<object>(pStorage + i));
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,13 +7,9 @@ using System.Diagnostics;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Runtime.Versioning;
|
using System.Runtime.Versioning;
|
||||||
|
|
||||||
//
|
|
||||||
// The implementations of most the methods in this file are provided as intrinsics.
|
// The implementations of most the methods in this file are provided as intrinsics.
|
||||||
// In CoreCLR, the body of the functions are replaced by the EE with unsafe code. See see getILIntrinsicImplementationForUnsafe for details.
|
// In CoreCLR, the body of the functions are replaced by the EE with unsafe code. See see getILIntrinsicImplementationForUnsafe for details.
|
||||||
// In AOT compilers, see Internal.IL.Stubs.UnsafeIntrinsics for details.
|
// In AOT compilers, see Internal.IL.Stubs.UnsafeIntrinsics for details.
|
||||||
//
|
|
||||||
|
|
||||||
#pragma warning disable 8500 // address / sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Runtime.CompilerServices
|
namespace System.Runtime.CompilerServices
|
||||||
{
|
{
|
||||||
|
|
|
@ -176,9 +176,7 @@ namespace System.Runtime.InteropServices
|
||||||
|
|
||||||
// Unsafe.AsPointer is safe since array must be pinned
|
// Unsafe.AsPointer is safe since array must be pinned
|
||||||
void* pRawData = Unsafe.AsPointer(ref MemoryMarshal.GetArrayDataReference(arr));
|
void* pRawData = Unsafe.AsPointer(ref MemoryMarshal.GetArrayDataReference(arr));
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
return (IntPtr)((byte*)pRawData + (uint)index * (nuint)sizeof(T));
|
return (IntPtr)((byte*)pRawData + (uint)index * (nuint)sizeof(T));
|
||||||
#pragma warning restore 8500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IntPtr OffsetOf<T>(string fieldName) => OffsetOf(typeof(T), fieldName);
|
public static IntPtr OffsetOf<T>(string fieldName) => OffsetOf(typeof(T), fieldName);
|
||||||
|
|
|
@ -379,7 +379,7 @@ namespace System.Runtime.InteropServices.Marshalling
|
||||||
public static unsafe ComVariant CreateRaw<T>(VarEnum vt, T rawValue)
|
public static unsafe ComVariant CreateRaw<T>(VarEnum vt, T rawValue)
|
||||||
where T : unmanaged
|
where T : unmanaged
|
||||||
{
|
{
|
||||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(Unsafe.SizeOf<T>(), sizeof(UnionTypes), nameof(T));
|
ArgumentOutOfRangeException.ThrowIfGreaterThan(sizeof(T), sizeof(UnionTypes), nameof(T));
|
||||||
if (vt == VarEnum.VT_DECIMAL)
|
if (vt == VarEnum.VT_DECIMAL)
|
||||||
{
|
{
|
||||||
throw new ArgumentException(SR.ComVariant_VT_DECIMAL_NotSupported_CreateRaw, nameof(vt));
|
throw new ArgumentException(SR.ComVariant_VT_DECIMAL_NotSupported_CreateRaw, nameof(vt));
|
||||||
|
@ -571,7 +571,7 @@ namespace System.Runtime.InteropServices.Marshalling
|
||||||
public unsafe ref T GetRawDataRef<T>()
|
public unsafe ref T GetRawDataRef<T>()
|
||||||
where T : unmanaged
|
where T : unmanaged
|
||||||
{
|
{
|
||||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(Unsafe.SizeOf<T>(), sizeof(UnionTypes), nameof(T));
|
ArgumentOutOfRangeException.ThrowIfGreaterThan(sizeof(T), sizeof(UnionTypes), nameof(T));
|
||||||
if (typeof(T) == typeof(decimal))
|
if (typeof(T) == typeof(decimal))
|
||||||
{
|
{
|
||||||
throw new ArgumentException(SR.ComVariant_VT_DECIMAL_NotSupported_RawDataRef, nameof(T));
|
throw new ArgumentException(SR.ComVariant_VT_DECIMAL_NotSupported_RawDataRef, nameof(T));
|
||||||
|
|
|
@ -7,8 +7,6 @@ using System.Diagnostics;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Runtime.InteropServices
|
namespace System.Runtime.InteropServices
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -113,7 +111,7 @@ namespace System.Runtime.InteropServices
|
||||||
/// Thrown when <typeparamref name="TFrom"/> or <typeparamref name="TTo"/> contains pointers.
|
/// Thrown when <typeparamref name="TFrom"/> or <typeparamref name="TTo"/> contains pointers.
|
||||||
/// </exception>
|
/// </exception>
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static Span<TTo> Cast<TFrom, TTo>(Span<TFrom> span)
|
public static unsafe Span<TTo> Cast<TFrom, TTo>(Span<TFrom> span)
|
||||||
where TFrom : struct
|
where TFrom : struct
|
||||||
where TTo : struct
|
where TTo : struct
|
||||||
{
|
{
|
||||||
|
@ -124,8 +122,8 @@ namespace System.Runtime.InteropServices
|
||||||
|
|
||||||
// Use unsigned integers - unsigned division by constant (especially by power of 2)
|
// Use unsigned integers - unsigned division by constant (especially by power of 2)
|
||||||
// and checked casts are faster and smaller.
|
// and checked casts are faster and smaller.
|
||||||
uint fromSize = (uint)Unsafe.SizeOf<TFrom>();
|
uint fromSize = (uint)sizeof(TFrom);
|
||||||
uint toSize = (uint)Unsafe.SizeOf<TTo>();
|
uint toSize = (uint)sizeof(TTo);
|
||||||
uint fromLength = (uint)span.Length;
|
uint fromLength = (uint)span.Length;
|
||||||
int toLength;
|
int toLength;
|
||||||
if (fromSize == toSize)
|
if (fromSize == toSize)
|
||||||
|
@ -168,7 +166,7 @@ namespace System.Runtime.InteropServices
|
||||||
/// Thrown when <typeparamref name="TFrom"/> or <typeparamref name="TTo"/> contains pointers.
|
/// Thrown when <typeparamref name="TFrom"/> or <typeparamref name="TTo"/> contains pointers.
|
||||||
/// </exception>
|
/// </exception>
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static ReadOnlySpan<TTo> Cast<TFrom, TTo>(ReadOnlySpan<TFrom> span)
|
public static unsafe ReadOnlySpan<TTo> Cast<TFrom, TTo>(ReadOnlySpan<TFrom> span)
|
||||||
where TFrom : struct
|
where TFrom : struct
|
||||||
where TTo : struct
|
where TTo : struct
|
||||||
{
|
{
|
||||||
|
@ -179,8 +177,8 @@ namespace System.Runtime.InteropServices
|
||||||
|
|
||||||
// Use unsigned integers - unsigned division by constant (especially by power of 2)
|
// Use unsigned integers - unsigned division by constant (especially by power of 2)
|
||||||
// and checked casts are faster and smaller.
|
// and checked casts are faster and smaller.
|
||||||
uint fromSize = (uint)Unsafe.SizeOf<TFrom>();
|
uint fromSize = (uint)sizeof(TFrom);
|
||||||
uint toSize = (uint)Unsafe.SizeOf<TTo>();
|
uint toSize = (uint)sizeof(TTo);
|
||||||
uint fromLength = (uint)span.Length;
|
uint fromLength = (uint)span.Length;
|
||||||
int toLength;
|
int toLength;
|
||||||
if (fromSize == toSize)
|
if (fromSize == toSize)
|
||||||
|
|
|
@ -405,9 +405,7 @@ namespace System.Runtime.InteropServices
|
||||||
if (RuntimeHelpers.IsReferenceOrContainsReferences<T>())
|
if (RuntimeHelpers.IsReferenceOrContainsReferences<T>())
|
||||||
throw new ArgumentException(SR.Argument_NeedStructWithNoRefs);
|
throw new ArgumentException(SR.Argument_NeedStructWithNoRefs);
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
return (uint)sizeof(T);
|
return (uint)sizeof(T);
|
||||||
#pragma warning restore 8500
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -399,7 +399,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <exception cref="NotSupportedException">The type of the elements in the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the elements in the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
static abstract bool LessThanOrEqualAny(TSelf left, TSelf right);
|
static abstract bool LessThanOrEqualAny(TSelf left, TSelf right);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
/// <returns>The vector loaded from <paramref name="source" />.</returns>
|
/// <returns>The vector loaded from <paramref name="source" />.</returns>
|
||||||
|
@ -425,7 +424,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <remarks>This method may bypass the cache on certain platforms.</remarks>
|
/// <remarks>This method may bypass the cache on certain platforms.</remarks>
|
||||||
/// <exception cref="NotSupportedException">The type of <paramref name="source" /> (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of <paramref name="source" /> (<typeparamref name="T" />) is not supported.</exception>
|
||||||
static virtual TSelf LoadAlignedNonTemporal(T* source) => TSelf.LoadAligned(source);
|
static virtual TSelf LoadAlignedNonTemporal(T* source) => TSelf.LoadAligned(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
|
@ -584,7 +582,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <exception cref="NotSupportedException">The type of <paramref name="vector" /> (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of <paramref name="vector" /> (<typeparamref name="T" />) is not supported.</exception>
|
||||||
static abstract TSelf Sqrt(TSelf vector);
|
static abstract TSelf Sqrt(TSelf vector);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <param name="source">The vector that will be stored.</param>
|
/// <param name="source">The vector that will be stored.</param>
|
||||||
/// <param name="destination">The destination at which <paramref name="source" /> will be stored.</param>
|
/// <param name="destination">The destination at which <paramref name="source" /> will be stored.</param>
|
||||||
|
@ -610,7 +607,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <remarks>This method may bypass the cache on certain platforms.</remarks>
|
/// <remarks>This method may bypass the cache on certain platforms.</remarks>
|
||||||
/// <exception cref="NotSupportedException">The type of <paramref name="source" /> (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of <paramref name="source" /> (<typeparamref name="T" />) is not supported.</exception>
|
||||||
static virtual void StoreAlignedNonTemporal(TSelf source, T* destination) => TSelf.StoreAligned(source, destination);
|
static virtual void StoreAlignedNonTemporal(TSelf source, T* destination) => TSelf.StoreAligned(source, destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <param name="vector">The vector that will be stored.</param>
|
/// <param name="vector">The vector that will be stored.</param>
|
||||||
|
|
|
@ -64,7 +64,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return TVector.GetElement(vector, index);
|
return TVector.GetElement(vector, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="TVector">The type of the vector.</typeparam>
|
/// <typeparam name="TVector">The type of the vector.</typeparam>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
@ -101,7 +100,6 @@ namespace System.Runtime.Intrinsics
|
||||||
{
|
{
|
||||||
TVector.StoreAlignedNonTemporal(source, destination);
|
TVector.StoreAlignedNonTemporal(source, destination);
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="TVector">The type of the vector.</typeparam>
|
/// <typeparam name="TVector">The type of the vector.</typeparam>
|
||||||
|
|
|
@ -2077,7 +2077,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|| Vector64.LessThanOrEqualAny(left._upper, right._upper);
|
|| Vector64.LessThanOrEqualAny(left._upper, right._upper);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
|
@ -2116,7 +2115,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static unsafe Vector128<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
public static unsafe Vector128<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
@ -3160,7 +3158,6 @@ namespace System.Runtime.Intrinsics
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The vector that will be stored.</param>
|
/// <param name="source">The vector that will be stored.</param>
|
||||||
|
@ -3199,7 +3196,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static unsafe void StoreAlignedNonTemporal<T>(this Vector128<T> source, T* destination) => source.StoreAligned(destination);
|
public static unsafe void StoreAlignedNonTemporal<T>(this Vector128<T> source, T* destination) => source.StoreAligned(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stores to lower 64 bits of <paramref name="source"/> to memory destination of <paramref name="destination"/>[<paramref name="elementOffset"/>]
|
/// Stores to lower 64 bits of <paramref name="source"/> to memory destination of <paramref name="destination"/>[<paramref name="elementOffset"/>]
|
||||||
|
|
|
@ -42,7 +42,6 @@ namespace System.Runtime.Intrinsics
|
||||||
get => Vector128.Create(Scalar<T>.AllBitsSet);
|
get => Vector128.Create(Scalar<T>.AllBitsSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector128{T}" />.</summary>
|
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector128{T}" />.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
public static int Count
|
public static int Count
|
||||||
|
@ -54,7 +53,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return Vector128.Size / sizeof(T);
|
return Vector128.Size / sizeof(T);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Gets a new <see cref="Vector128{T}" /> with the elements set to their index.</summary>
|
/// <summary>Gets a new <see cref="Vector128{T}" /> with the elements set to their index.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
|
@ -578,7 +576,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
||||||
static bool ISimdVector<Vector128<T>, T>.LessThanOrEqualAny(Vector128<T> left, Vector128<T> right) => Vector128.LessThanOrEqualAny(left, right);
|
static bool ISimdVector<Vector128<T>, T>.LessThanOrEqualAny(Vector128<T> left, Vector128<T> right) => Vector128.LessThanOrEqualAny(left, right);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
||||||
static Vector128<T> ISimdVector<Vector128<T>, T>.Load(T* source) => Vector128.Load(source);
|
static Vector128<T> ISimdVector<Vector128<T>, T>.Load(T* source) => Vector128.Load(source);
|
||||||
|
|
||||||
|
@ -587,7 +584,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
||||||
static Vector128<T> ISimdVector<Vector128<T>, T>.LoadAlignedNonTemporal(T* source) => Vector128.LoadAlignedNonTemporal(source);
|
static Vector128<T> ISimdVector<Vector128<T>, T>.LoadAlignedNonTemporal(T* source) => Vector128.LoadAlignedNonTemporal(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
||||||
static Vector128<T> ISimdVector<Vector128<T>, T>.LoadUnsafe(ref readonly T source) => Vector128.LoadUnsafe(in source);
|
static Vector128<T> ISimdVector<Vector128<T>, T>.LoadUnsafe(ref readonly T source) => Vector128.LoadUnsafe(in source);
|
||||||
|
@ -655,7 +651,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
||||||
static Vector128<T> ISimdVector<Vector128<T>, T>.Sqrt(Vector128<T> vector) => Vector128.Sqrt(vector);
|
static Vector128<T> ISimdVector<Vector128<T>, T>.Sqrt(Vector128<T> vector) => Vector128.Sqrt(vector);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector128<T>, T>.Store(Vector128<T> source, T* destination) => source.Store(destination);
|
static void ISimdVector<Vector128<T>, T>.Store(Vector128<T> source, T* destination) => source.Store(destination);
|
||||||
|
|
||||||
|
@ -664,7 +659,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector128<T>, T>.StoreAlignedNonTemporal(Vector128<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
static void ISimdVector<Vector128<T>, T>.StoreAlignedNonTemporal(Vector128<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
||||||
static void ISimdVector<Vector128<T>, T>.StoreUnsafe(Vector128<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
static void ISimdVector<Vector128<T>, T>.StoreUnsafe(Vector128<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
||||||
|
|
|
@ -1993,7 +1993,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|| Vector128.LessThanOrEqualAny(left._upper, right._upper);
|
|| Vector128.LessThanOrEqualAny(left._upper, right._upper);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
|
@ -2032,7 +2031,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static Vector256<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
public static Vector256<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
@ -3044,7 +3042,6 @@ namespace System.Runtime.Intrinsics
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The vector that will be stored.</param>
|
/// <param name="source">The vector that will be stored.</param>
|
||||||
|
@ -3083,7 +3080,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static void StoreAlignedNonTemporal<T>(this Vector256<T> source, T* destination) => source.StoreAligned(destination);
|
public static void StoreAlignedNonTemporal<T>(this Vector256<T> source, T* destination) => source.StoreAligned(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
|
|
@ -41,7 +41,6 @@ namespace System.Runtime.Intrinsics
|
||||||
get => Vector256.Create(Scalar<T>.AllBitsSet);
|
get => Vector256.Create(Scalar<T>.AllBitsSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector256{T}" />.</summary>
|
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector256{T}" />.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
public static int Count
|
public static int Count
|
||||||
|
@ -53,7 +52,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return Vector256.Size / sizeof(T);
|
return Vector256.Size / sizeof(T);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Gets a new <see cref="Vector256{T}" /> with the elements set to their index.</summary>
|
/// <summary>Gets a new <see cref="Vector256{T}" /> with the elements set to their index.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
|
@ -567,7 +565,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
||||||
static bool ISimdVector<Vector256<T>, T>.LessThanOrEqualAny(Vector256<T> left, Vector256<T> right) => Vector256.LessThanOrEqualAny(left, right);
|
static bool ISimdVector<Vector256<T>, T>.LessThanOrEqualAny(Vector256<T> left, Vector256<T> right) => Vector256.LessThanOrEqualAny(left, right);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
||||||
static Vector256<T> ISimdVector<Vector256<T>, T>.Load(T* source) => Vector256.Load(source);
|
static Vector256<T> ISimdVector<Vector256<T>, T>.Load(T* source) => Vector256.Load(source);
|
||||||
|
|
||||||
|
@ -576,7 +573,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
||||||
static Vector256<T> ISimdVector<Vector256<T>, T>.LoadAlignedNonTemporal(T* source) => Vector256.LoadAlignedNonTemporal(source);
|
static Vector256<T> ISimdVector<Vector256<T>, T>.LoadAlignedNonTemporal(T* source) => Vector256.LoadAlignedNonTemporal(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
||||||
static Vector256<T> ISimdVector<Vector256<T>, T>.LoadUnsafe(ref readonly T source) => Vector256.LoadUnsafe(in source);
|
static Vector256<T> ISimdVector<Vector256<T>, T>.LoadUnsafe(ref readonly T source) => Vector256.LoadUnsafe(in source);
|
||||||
|
@ -644,7 +640,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
||||||
static Vector256<T> ISimdVector<Vector256<T>, T>.Sqrt(Vector256<T> vector) => Vector256.Sqrt(vector);
|
static Vector256<T> ISimdVector<Vector256<T>, T>.Sqrt(Vector256<T> vector) => Vector256.Sqrt(vector);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector256<T>, T>.Store(Vector256<T> source, T* destination) => source.Store(destination);
|
static void ISimdVector<Vector256<T>, T>.Store(Vector256<T> source, T* destination) => source.Store(destination);
|
||||||
|
|
||||||
|
@ -653,7 +648,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector256<T>, T>.StoreAlignedNonTemporal(Vector256<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
static void ISimdVector<Vector256<T>, T>.StoreAlignedNonTemporal(Vector256<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
||||||
static void ISimdVector<Vector256<T>, T>.StoreUnsafe(Vector256<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
static void ISimdVector<Vector256<T>, T>.StoreUnsafe(Vector256<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
||||||
|
|
|
@ -2056,7 +2056,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|| Vector256.LessThanOrEqualAny(left._upper, right._upper);
|
|| Vector256.LessThanOrEqualAny(left._upper, right._upper);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
|
@ -2095,7 +2094,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static Vector512<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
public static Vector512<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
@ -3106,7 +3104,6 @@ namespace System.Runtime.Intrinsics
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The vector that will be stored.</param>
|
/// <param name="source">The vector that will be stored.</param>
|
||||||
|
@ -3145,7 +3142,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static void StoreAlignedNonTemporal<T>(this Vector512<T> source, T* destination) => source.StoreAligned(destination);
|
public static void StoreAlignedNonTemporal<T>(this Vector512<T> source, T* destination) => source.StoreAligned(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
|
|
@ -41,7 +41,6 @@ namespace System.Runtime.Intrinsics
|
||||||
get => Vector512.Create(Scalar<T>.AllBitsSet);
|
get => Vector512.Create(Scalar<T>.AllBitsSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector512{T}" />.</summary>
|
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector512{T}" />.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
public static int Count
|
public static int Count
|
||||||
|
@ -53,7 +52,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return Vector512.Size / sizeof(T);
|
return Vector512.Size / sizeof(T);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Gets a new <see cref="Vector512{T}" /> with the elements set to their index.</summary>
|
/// <summary>Gets a new <see cref="Vector512{T}" /> with the elements set to their index.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
|
@ -567,7 +565,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
||||||
static bool ISimdVector<Vector512<T>, T>.LessThanOrEqualAny(Vector512<T> left, Vector512<T> right) => Vector512.LessThanOrEqualAny(left, right);
|
static bool ISimdVector<Vector512<T>, T>.LessThanOrEqualAny(Vector512<T> left, Vector512<T> right) => Vector512.LessThanOrEqualAny(left, right);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
||||||
static Vector512<T> ISimdVector<Vector512<T>, T>.Load(T* source) => Vector512.Load(source);
|
static Vector512<T> ISimdVector<Vector512<T>, T>.Load(T* source) => Vector512.Load(source);
|
||||||
|
|
||||||
|
@ -576,7 +573,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
||||||
static Vector512<T> ISimdVector<Vector512<T>, T>.LoadAlignedNonTemporal(T* source) => Vector512.LoadAlignedNonTemporal(source);
|
static Vector512<T> ISimdVector<Vector512<T>, T>.LoadAlignedNonTemporal(T* source) => Vector512.LoadAlignedNonTemporal(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
||||||
static Vector512<T> ISimdVector<Vector512<T>, T>.LoadUnsafe(ref readonly T source) => Vector512.LoadUnsafe(in source);
|
static Vector512<T> ISimdVector<Vector512<T>, T>.LoadUnsafe(ref readonly T source) => Vector512.LoadUnsafe(in source);
|
||||||
|
@ -644,7 +640,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
||||||
static Vector512<T> ISimdVector<Vector512<T>, T>.Sqrt(Vector512<T> vector) => Vector512.Sqrt(vector);
|
static Vector512<T> ISimdVector<Vector512<T>, T>.Sqrt(Vector512<T> vector) => Vector512.Sqrt(vector);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector512<T>, T>.Store(Vector512<T> source, T* destination) => source.Store(destination);
|
static void ISimdVector<Vector512<T>, T>.Store(Vector512<T> source, T* destination) => source.Store(destination);
|
||||||
|
|
||||||
|
@ -653,7 +648,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector512<T>, T>.StoreAlignedNonTemporal(Vector512<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
static void ISimdVector<Vector512<T>, T>.StoreAlignedNonTemporal(Vector512<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
||||||
static void ISimdVector<Vector512<T>, T>.StoreUnsafe(Vector512<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
static void ISimdVector<Vector512<T>, T>.StoreUnsafe(Vector512<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
||||||
|
|
|
@ -1847,7 +1847,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The source from which the vector will be loaded.</param>
|
/// <param name="source">The source from which the vector will be loaded.</param>
|
||||||
|
@ -1886,7 +1885,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static unsafe Vector64<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
public static unsafe Vector64<T> LoadAlignedNonTemporal<T>(T* source) => LoadAligned(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Loads a vector from the given source.</summary>
|
/// <summary>Loads a vector from the given source.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
@ -3024,7 +3022,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
/// <param name="source">The vector that will be stored.</param>
|
/// <param name="source">The vector that will be stored.</param>
|
||||||
|
@ -3063,7 +3060,6 @@ namespace System.Runtime.Intrinsics
|
||||||
[Intrinsic]
|
[Intrinsic]
|
||||||
[CLSCompliant(false)]
|
[CLSCompliant(false)]
|
||||||
public static unsafe void StoreAlignedNonTemporal<T>(this Vector64<T> source, T* destination) => source.StoreAligned(destination);
|
public static unsafe void StoreAlignedNonTemporal<T>(this Vector64<T> source, T* destination) => source.StoreAligned(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Stores a vector at the given destination.</summary>
|
/// <summary>Stores a vector at the given destination.</summary>
|
||||||
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
/// <typeparam name="T">The type of the elements in the vector.</typeparam>
|
||||||
|
|
|
@ -41,7 +41,6 @@ namespace System.Runtime.Intrinsics
|
||||||
get => Vector64.Create(Scalar<T>.AllBitsSet);
|
get => Vector64.Create(Scalar<T>.AllBitsSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector64{T}" />.</summary>
|
/// <summary>Gets the number of <typeparamref name="T" /> that are in a <see cref="Vector64{T}" />.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
public static unsafe int Count
|
public static unsafe int Count
|
||||||
|
@ -53,7 +52,6 @@ namespace System.Runtime.Intrinsics
|
||||||
return Vector64.Size / sizeof(T);
|
return Vector64.Size / sizeof(T);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <summary>Gets a new <see cref="Vector64{T}" /> with the elements set to their index.</summary>
|
/// <summary>Gets a new <see cref="Vector64{T}" /> with the elements set to their index.</summary>
|
||||||
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
/// <exception cref="NotSupportedException">The type of the vector (<typeparamref name="T" />) is not supported.</exception>
|
||||||
|
@ -635,7 +633,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LessThanOrEqualAny(TSelf, TSelf)" />
|
||||||
static bool ISimdVector<Vector64<T>, T>.LessThanOrEqualAny(Vector64<T> left, Vector64<T> right) => Vector64.LessThanOrEqualAny(left, right);
|
static bool ISimdVector<Vector64<T>, T>.LessThanOrEqualAny(Vector64<T> left, Vector64<T> right) => Vector64.LessThanOrEqualAny(left, right);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Load(T*)" />
|
||||||
static Vector64<T> ISimdVector<Vector64<T>, T>.Load(T* source) => Vector64.Load(source);
|
static Vector64<T> ISimdVector<Vector64<T>, T>.Load(T* source) => Vector64.Load(source);
|
||||||
|
|
||||||
|
@ -644,7 +641,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadAlignedNonTemporal(T*)" />
|
||||||
static Vector64<T> ISimdVector<Vector64<T>, T>.LoadAlignedNonTemporal(T* source) => Vector64.LoadAlignedNonTemporal(source);
|
static Vector64<T> ISimdVector<Vector64<T>, T>.LoadAlignedNonTemporal(T* source) => Vector64.LoadAlignedNonTemporal(source);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.LoadUnsafe(ref readonly T)" />
|
||||||
static Vector64<T> ISimdVector<Vector64<T>, T>.LoadUnsafe(ref readonly T source) => Vector64.LoadUnsafe(in source);
|
static Vector64<T> ISimdVector<Vector64<T>, T>.LoadUnsafe(ref readonly T source) => Vector64.LoadUnsafe(in source);
|
||||||
|
@ -712,7 +708,6 @@ namespace System.Runtime.Intrinsics
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Sqrt(TSelf)" />
|
||||||
static Vector64<T> ISimdVector<Vector64<T>, T>.Sqrt(Vector64<T> vector) => Vector64.Sqrt(vector);
|
static Vector64<T> ISimdVector<Vector64<T>, T>.Sqrt(Vector64<T> vector) => Vector64.Sqrt(vector);
|
||||||
|
|
||||||
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.Store(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector64<T>, T>.Store(Vector64<T> source, T* destination) => source.Store(destination);
|
static void ISimdVector<Vector64<T>, T>.Store(Vector64<T> source, T* destination) => source.Store(destination);
|
||||||
|
|
||||||
|
@ -721,7 +716,6 @@ namespace System.Runtime.Intrinsics
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreAlignedNonTemporal(TSelf, T*)" />
|
||||||
static void ISimdVector<Vector64<T>, T>.StoreAlignedNonTemporal(Vector64<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
static void ISimdVector<Vector64<T>, T>.StoreAlignedNonTemporal(Vector64<T> source, T* destination) => source.StoreAlignedNonTemporal(destination);
|
||||||
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type ('T')
|
|
||||||
|
|
||||||
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
/// <inheritdoc cref="ISimdVector{TSelf, T}.StoreUnsafe(TSelf, ref T)" />
|
||||||
static void ISimdVector<Vector64<T>, T>.StoreUnsafe(Vector64<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
static void ISimdVector<Vector64<T>, T>.StoreUnsafe(Vector64<T> vector, ref T destination) => vector.StoreUnsafe(ref destination);
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Numerics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
internal sealed class Any1SearchValues<T, TImpl> : SearchValues<T>
|
internal sealed class Any1SearchValues<T, TImpl> : SearchValues<T>
|
||||||
|
@ -16,9 +14,9 @@ namespace System.Buffers
|
||||||
{
|
{
|
||||||
private readonly TImpl _e0;
|
private readonly TImpl _e0;
|
||||||
|
|
||||||
public Any1SearchValues(ReadOnlySpan<TImpl> values)
|
public unsafe Any1SearchValues(ReadOnlySpan<TImpl> values)
|
||||||
{
|
{
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == Unsafe.SizeOf<TImpl>());
|
Debug.Assert(sizeof(T) == sizeof(TImpl));
|
||||||
Debug.Assert(values.Length == 1);
|
Debug.Assert(values.Length == 1);
|
||||||
_e0 = values[0];
|
_e0 = values[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Numerics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
internal sealed class Any2SearchValues<T, TImpl> : SearchValues<T>
|
internal sealed class Any2SearchValues<T, TImpl> : SearchValues<T>
|
||||||
|
@ -16,9 +14,9 @@ namespace System.Buffers
|
||||||
{
|
{
|
||||||
private readonly TImpl _e0, _e1;
|
private readonly TImpl _e0, _e1;
|
||||||
|
|
||||||
public Any2SearchValues(ReadOnlySpan<TImpl> values)
|
public unsafe Any2SearchValues(ReadOnlySpan<TImpl> values)
|
||||||
{
|
{
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == Unsafe.SizeOf<TImpl>());
|
Debug.Assert(sizeof(T) == sizeof(TImpl));
|
||||||
Debug.Assert(values.Length == 2);
|
Debug.Assert(values.Length == 2);
|
||||||
(_e0, _e1) = (values[0], values[1]);
|
(_e0, _e1) = (values[0], values[1]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Numerics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
internal sealed class Any3SearchValues<T, TImpl> : SearchValues<T>
|
internal sealed class Any3SearchValues<T, TImpl> : SearchValues<T>
|
||||||
|
@ -16,9 +14,9 @@ namespace System.Buffers
|
||||||
{
|
{
|
||||||
private readonly TImpl _e0, _e1, _e2;
|
private readonly TImpl _e0, _e1, _e2;
|
||||||
|
|
||||||
public Any3SearchValues(ReadOnlySpan<TImpl> values)
|
public unsafe Any3SearchValues(ReadOnlySpan<TImpl> values)
|
||||||
{
|
{
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == Unsafe.SizeOf<TImpl>());
|
Debug.Assert(sizeof(T) == sizeof(TImpl));
|
||||||
Debug.Assert(values.Length == 3);
|
Debug.Assert(values.Length == 3);
|
||||||
(_e0, _e1, _e2) = (values[0], values[1], values[2]);
|
(_e0, _e1, _e2) = (values[0], values[1], values[2]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Numerics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
internal sealed class Any4SearchValues<T, TImpl> : SearchValues<T>
|
internal sealed class Any4SearchValues<T, TImpl> : SearchValues<T>
|
||||||
|
@ -16,9 +14,9 @@ namespace System.Buffers
|
||||||
{
|
{
|
||||||
private readonly TImpl _e0, _e1, _e2, _e3;
|
private readonly TImpl _e0, _e1, _e2, _e3;
|
||||||
|
|
||||||
public Any4SearchValues(ReadOnlySpan<TImpl> values)
|
public unsafe Any4SearchValues(ReadOnlySpan<TImpl> values)
|
||||||
{
|
{
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == Unsafe.SizeOf<TImpl>());
|
Debug.Assert(sizeof(T) == sizeof(TImpl));
|
||||||
Debug.Assert(values.Length == 4);
|
Debug.Assert(values.Length == 4);
|
||||||
(_e0, _e1, _e2, _e3) = (values[0], values[1], values[2], values[3]);
|
(_e0, _e1, _e2, _e3) = (values[0], values[1], values[2], values[3]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ using System.Numerics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#pragma warning disable 8500 // address of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
internal sealed class Any5SearchValues<T, TImpl> : SearchValues<T>
|
internal sealed class Any5SearchValues<T, TImpl> : SearchValues<T>
|
||||||
|
@ -16,9 +14,9 @@ namespace System.Buffers
|
||||||
{
|
{
|
||||||
private readonly TImpl _e0, _e1, _e2, _e3, _e4;
|
private readonly TImpl _e0, _e1, _e2, _e3, _e4;
|
||||||
|
|
||||||
public Any5SearchValues(ReadOnlySpan<TImpl> values)
|
public unsafe Any5SearchValues(ReadOnlySpan<TImpl> values)
|
||||||
{
|
{
|
||||||
Debug.Assert(Unsafe.SizeOf<T>() == Unsafe.SizeOf<TImpl>());
|
Debug.Assert(sizeof(T) == sizeof(TImpl));
|
||||||
Debug.Assert(values.Length == 5);
|
Debug.Assert(values.Length == 5);
|
||||||
(_e0, _e1, _e2, _e3, _e4) = (values[0], values[1], values[2], values[3], values[4]);
|
(_e0, _e1, _e2, _e3, _e4) = (values[0], values[1], values[2], values[3], values[4]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,6 @@ using System.Runtime.Intrinsics.Arm;
|
||||||
using System.Runtime.Intrinsics.Wasm;
|
using System.Runtime.Intrinsics.Wasm;
|
||||||
using System.Runtime.Intrinsics.X86;
|
using System.Runtime.Intrinsics.X86;
|
||||||
|
|
||||||
#pragma warning disable 8500 // sizeof of managed types
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
internal static class IndexOfAnyAsciiSearcher
|
internal static class IndexOfAnyAsciiSearcher
|
||||||
|
|
|
@ -10,8 +10,6 @@ using System.Runtime.Intrinsics.Arm;
|
||||||
using System.Runtime.Intrinsics.Wasm;
|
using System.Runtime.Intrinsics.Wasm;
|
||||||
using System.Runtime.Intrinsics.X86;
|
using System.Runtime.Intrinsics.X86;
|
||||||
|
|
||||||
#pragma warning disable CS8500 // Takes the address of a managed type
|
|
||||||
|
|
||||||
namespace System.Buffers
|
namespace System.Buffers
|
||||||
{
|
{
|
||||||
/// <summary>Data structure used to optimize checks for whether a char is in a set of chars.</summary>
|
/// <summary>Data structure used to optimize checks for whether a char is in a set of chars.</summary>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue