mirror of https://github.com/icsharpcode/ILSpy.git
12 changed files with 818 additions and 62 deletions
@ -0,0 +1,237 @@
@@ -0,0 +1,237 @@
|
||||
using System; |
||||
using System.Reflection; |
||||
|
||||
[assembly: AssemblyFileVersion("4.0.0.0")] |
||||
[assembly: AssemblyInformationalVersion("4.0.0.0")] |
||||
[assembly: AssemblyTitle("System.Runtime.CompilerServices.Unsafe")] |
||||
[assembly: AssemblyDescription("System.Runtime.CompilerServices.Unsafe")] |
||||
[assembly: AssemblyMetadata(".NETFrameworkAssembly", "")] |
||||
[assembly: AssemblyMetadata("Serviceable", "True")] |
||||
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")] |
||||
[assembly: AssemblyCompany("Microsoft Corporation")] |
||||
[assembly: AssemblyProduct("Microsoft® .NET Framework")] |
||||
[assembly: CLSCompliant(false)] |
||||
|
||||
namespace System.Runtime.CompilerServices |
||||
{ |
||||
public static class Unsafe |
||||
{ |
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static T Read<T>(void* source) |
||||
{ |
||||
return *(T*)source; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static T ReadUnaligned<T>(void* source) |
||||
{ |
||||
return *(T*)source; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static T ReadUnaligned<T>(ref byte source) |
||||
{ |
||||
return *(T*)(&source); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void Write<T>(void* destination, T value) |
||||
{ |
||||
*(T*)destination = value; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void WriteUnaligned<T>(void* destination, T value) |
||||
{ |
||||
*(T*)destination = value; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void WriteUnaligned<T>(ref byte destination, T value) |
||||
{ |
||||
*(T*)(&destination) = value; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void Copy<T>(void* destination, ref T source) |
||||
{ |
||||
*(T*)destination = source; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void Copy<T>(ref T destination, void* source) |
||||
{ |
||||
destination = *(T*)source; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void* AsPointer<T>(ref T value) |
||||
{ |
||||
return &value; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static int SizeOf<T>() |
||||
{ |
||||
return sizeof(T); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void CopyBlock(void* destination, void* source, uint byteCount) |
||||
{ |
||||
// IL cpblk instruction
|
||||
Unsafe.CopyBlock(destination, source, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static void CopyBlock(ref byte destination, ref byte source, uint byteCount) |
||||
{ |
||||
// IL cpblk instruction
|
||||
Unsafe.CopyBlock(ref destination, ref source, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void CopyBlockUnaligned(void* destination, void* source, uint byteCount) |
||||
{ |
||||
// IL cpblk instruction
|
||||
Unsafe.CopyBlockUnaligned(destination, source, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static void CopyBlockUnaligned(ref byte destination, ref byte source, uint byteCount) |
||||
{ |
||||
// IL cpblk instruction
|
||||
Unsafe.CopyBlockUnaligned(ref destination, ref source, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void InitBlock(void* startAddress, byte value, uint byteCount) |
||||
{ |
||||
// IL initblk instruction
|
||||
Unsafe.InitBlock(startAddress, value, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static void InitBlock(ref byte startAddress, byte value, uint byteCount) |
||||
{ |
||||
// IL initblk instruction
|
||||
Unsafe.InitBlock(ref startAddress, value, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void InitBlockUnaligned(void* startAddress, byte value, uint byteCount) |
||||
{ |
||||
// IL initblk instruction
|
||||
Unsafe.InitBlockUnaligned(startAddress, value, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static void InitBlockUnaligned(ref byte startAddress, byte value, uint byteCount) |
||||
{ |
||||
// IL initblk instruction
|
||||
Unsafe.InitBlockUnaligned(ref startAddress, value, byteCount); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static T As<T>(object o) where T : class |
||||
{ |
||||
return (T)o; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static ref T AsRef<T>(void* source) |
||||
{ |
||||
return ref *(T*)source; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T AsRef<T>(in T source) |
||||
{ |
||||
return ref source; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static ref TTo As<TFrom, TTo>(ref TFrom source) |
||||
{ |
||||
return ref *(TTo*)(&source); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T Unbox<T>(object box) where T : struct |
||||
{ |
||||
return ref (T)box; |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T Add<T>(ref T source, int elementOffset) |
||||
{ |
||||
return ref Unsafe.Add(ref source, elementOffset); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void* Add<T>(void* source, int elementOffset) |
||||
{ |
||||
return (byte*)source + (long)elementOffset * (long)sizeof(T); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T Add<T>(ref T source, IntPtr elementOffset) |
||||
{ |
||||
return ref Unsafe.Add(ref source, elementOffset); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T AddByteOffset<T>(ref T source, IntPtr byteOffset) |
||||
{ |
||||
return ref Unsafe.AddByteOffset(ref source, byteOffset); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T Subtract<T>(ref T source, int elementOffset) |
||||
{ |
||||
return ref Unsafe.Subtract(ref source, elementOffset); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public unsafe static void* Subtract<T>(void* source, int elementOffset) |
||||
{ |
||||
return (byte*)source - (long)elementOffset * (long)sizeof(T); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T Subtract<T>(ref T source, IntPtr elementOffset) |
||||
{ |
||||
return ref Unsafe.Subtract(ref source, elementOffset); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static ref T SubtractByteOffset<T>(ref T source, IntPtr byteOffset) |
||||
{ |
||||
return ref Unsafe.SubtractByteOffset(ref source, byteOffset); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static IntPtr ByteOffset<T>(ref T origin, ref T target) |
||||
{ |
||||
return Unsafe.ByteOffset(ref target, ref origin); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static bool AreSame<T>(ref T left, ref T right) |
||||
{ |
||||
return (ref left) == (ref right); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static bool IsAddressGreaterThan<T>(ref T left, ref T right) |
||||
{ |
||||
return (ref left) > (ref right); |
||||
} |
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
||||
public static bool IsAddressLessThan<T>(ref T left, ref T right) |
||||
{ |
||||
return (ref left) < (ref right); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,439 @@
@@ -0,0 +1,439 @@
|
||||
#define CORE_ASSEMBLY "System.Runtime" |
||||
|
||||
.assembly extern CORE_ASSEMBLY |
||||
{ |
||||
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: |
||||
.ver 4:0:0:0 |
||||
} |
||||
|
||||
.assembly System.Runtime.CompilerServices.Unsafe |
||||
{ |
||||
.custom instance void [CORE_ASSEMBLY]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) |
||||
.custom instance void [CORE_ASSEMBLY]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx |
||||
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. |
||||
|
||||
// --- The following custom attribute is added automatically, do not uncomment ------- |
||||
// .custom instance void [CORE_ASSEMBLY]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [CORE_ASSEMBLY]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) |
||||
|
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 34 2E 30 2E 30 2E 30 00 00 ) // ...4.0.0.0.. |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyInformationalVersionAttribute::.ctor(string) = ( 01 00 07 34 2E 30 2E 30 2E 30 00 00 ) // ...4.0.0.0.. |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 26 53 79 73 74 65 6D 2E 52 75 6E 74 69 6D // ..&System.Runtim |
||||
65 2E 43 6F 6D 70 69 6C 65 72 53 65 72 76 69 63 // e.CompilerServic |
||||
65 73 2E 55 6E 73 61 66 65 00 00 ) // es.Unsafe.. |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 26 53 79 73 74 65 6D 2E 52 75 6E 74 69 6D // ..&System.Runtim |
||||
65 2E 43 6F 6D 70 69 6C 65 72 53 65 72 76 69 63 // e.CompilerServic |
||||
65 73 2E 55 6E 73 61 66 65 00 00 ) // es.Unsafe.. |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyMetadataAttribute::.ctor(string, string) = ( |
||||
01 00 15 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b |
||||
41 73 73 65 6d 62 6c 79 00 00 00 |
||||
) // ".NETFrameworkAssembly", "" |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyMetadataAttribute::.ctor(string, string) = ( |
||||
01 00 0b 53 65 72 76 69 63 65 61 62 6c 65 04 54 |
||||
72 75 65 00 00 |
||||
) // "Serviceable", "True" |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 2F C2 A9 20 4D 69 63 72 6F 73 6F 66 74 20 // ../.. Microsoft |
||||
43 6F 72 70 6F 72 61 74 69 6F 6E 2E 20 20 41 6C // Corporation. Al |
||||
6C 20 72 69 67 68 74 73 20 72 65 73 65 72 76 65 // l rights reserve |
||||
64 2E 00 00 ) // d... |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 15 4D 69 63 72 6F 73 6F 66 74 20 43 6F 72 // ...Microsoft Cor |
||||
70 6F 72 61 74 69 6F 6E 00 00 ) // poration.. |
||||
.custom instance void [CORE_ASSEMBLY]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 1A 4D 69 63 72 6F 73 6F 66 74 C2 AE 20 2E // ...Microsoft.. . |
||||
4E 45 54 20 46 72 61 6D 65 77 6F 72 6B 00 00 ) // NET Framework.. |
||||
.custom instance void [CORE_ASSEMBLY]System.CLSCompliantAttribute::.ctor(bool) = ( |
||||
01 00 00 00 00 |
||||
) // false |
||||
.hash algorithm 0x00008004 |
||||
.ver 4:0:5:0 |
||||
} |
||||
.module System.Runtime.CompilerServices.Unsafe.dll |
||||
// MVID: {1E97D84A-565B-49C5-B60A-F31A1A4ACE13} |
||||
.imagebase 0x00400000 |
||||
.file alignment 0x00000200 |
||||
.stackreserve 0x00100000 |
||||
.subsystem 0x0003 // WINDOWS_CUI |
||||
.corflags 0x00000001 // ILONLY |
||||
// Image base: 0x02ED0000 |
||||
|
||||
|
||||
// =============== CLASS MEMBERS DECLARATION =================== |
||||
|
||||
.class public abstract auto ansi sealed beforefieldinit System.Runtime.CompilerServices.Unsafe |
||||
extends [CORE_ASSEMBLY]System.Object |
||||
{ |
||||
.method public hidebysig static !!T Read<T>(void* source) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
ldobj !!T |
||||
ret |
||||
} // end of method Unsafe::Read |
||||
|
||||
.method public hidebysig static !!T ReadUnaligned<T>(void* source) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
unaligned. 0x1 |
||||
ldobj !!T |
||||
ret |
||||
} // end of method Unsafe::ReadUnaligned |
||||
|
||||
.method public hidebysig static !!T ReadUnaligned<T>(uint8& source) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
unaligned. 0x1 |
||||
ldobj !!T |
||||
ret |
||||
} // end of method Unsafe::ReadUnaligned |
||||
|
||||
.method public hidebysig static void Write<T>(void* destination, |
||||
!!T 'value') cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
stobj !!T |
||||
ret |
||||
} // end of method Unsafe::Write |
||||
|
||||
.method public hidebysig static void WriteUnaligned<T>(void* destination, |
||||
!!T 'value') cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
unaligned. 0x01 |
||||
stobj !!T |
||||
ret |
||||
} // end of method Unsafe::WriteUnaligned |
||||
|
||||
.method public hidebysig static void WriteUnaligned<T>(uint8& destination, |
||||
!!T 'value') cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
unaligned. 0x01 |
||||
stobj !!T |
||||
ret |
||||
} // end of method Unsafe::WriteUnaligned |
||||
|
||||
.method public hidebysig static void Copy<T>(void* destination, |
||||
!!T& source) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldobj !!T |
||||
stobj !!T |
||||
ret |
||||
} // end of method Unsafe::Copy |
||||
|
||||
.method public hidebysig static void Copy<T>(!!T& destination, |
||||
void* source) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldobj !!T |
||||
stobj !!T |
||||
ret |
||||
} // end of method Unsafe::Copy |
||||
|
||||
.method public hidebysig static void* AsPointer<T>(!!T& 'value') cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
conv.u |
||||
ret |
||||
} // end of method Unsafe::AsPointer |
||||
|
||||
.method public hidebysig static int32 SizeOf<T>() cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
sizeof !!T |
||||
ret |
||||
} // end of method Unsafe::SizeOf |
||||
|
||||
.method public hidebysig static void CopyBlock(void* destination, void* source, uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
cpblk |
||||
ret |
||||
} // end of method Unsafe::CopyBlock |
||||
|
||||
.method public hidebysig static void CopyBlock(uint8& destination, uint8& source, uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
cpblk |
||||
ret |
||||
} // end of method Unsafe::CopyBlock |
||||
|
||||
.method public hidebysig static void CopyBlockUnaligned(void* destination, void* source, uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
unaligned. 0x1 |
||||
cpblk |
||||
ret |
||||
} // end of method Unsafe::CopyBlockUnaligned |
||||
|
||||
.method public hidebysig static void CopyBlockUnaligned(uint8& destination, uint8& source, uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
unaligned. 0x1 |
||||
cpblk |
||||
ret |
||||
} // end of method Unsafe::CopyBlockUnaligned |
||||
|
||||
.method public hidebysig static void InitBlock(void* startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
initblk |
||||
ret |
||||
} // end of method Unsafe::InitBlock |
||||
|
||||
.method public hidebysig static void InitBlock(uint8& startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
initblk |
||||
ret |
||||
} // end of method Unsafe::InitBlock |
||||
|
||||
.method public hidebysig static void InitBlockUnaligned(void* startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
unaligned. 0x1 |
||||
initblk |
||||
ret |
||||
} // end of method Unsafe::InitBlockUnaligned |
||||
|
||||
.method public hidebysig static void InitBlockUnaligned(uint8& startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ldarg.2 |
||||
unaligned. 0x1 |
||||
initblk |
||||
ret |
||||
} // end of method Unsafe::InitBlockUnaligned |
||||
|
||||
.method public hidebysig static !!T As<class T>(object o) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
ret |
||||
} // end of method Unsafe::As |
||||
|
||||
.method public hidebysig static !!T& AsRef<T>(void* source) cil managed aggressiveinlining |
||||
{ |
||||
// For .NET Core the roundtrip via a local is no longer needed see: |
||||
// https://github.com/dotnet/coreclr/issues/13341 |
||||
// and |
||||
// https://github.com/dotnet/coreclr/pull/11218 |
||||
#ifdef netcoreapp |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
ret |
||||
#else |
||||
.locals (int32&) |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
// Roundtrip via a local to avoid type mismatch on return that the JIT inliner chokes on. |
||||
stloc.0 |
||||
ldloc.0 |
||||
ret |
||||
#endif |
||||
} // end of method Unsafe::AsRef |
||||
|
||||
.method public hidebysig static !!T& AsRef<T>(!!T& source) cil managed aggressiveinlining |
||||
{ |
||||
.param [1] |
||||
#ifdef netcoreapp |
||||
.custom instance void [CORE_ASSEMBLY]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) |
||||
#else |
||||
.custom instance void System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) |
||||
#endif |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
ret |
||||
} // end of method Unsafe::AsRef |
||||
|
||||
.method public hidebysig static !!TTo& As<TFrom, TTo>(!!TFrom& source) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
ret |
||||
} // end of method Unsafe::As |
||||
|
||||
.method public hidebysig static !!T& Unbox<valuetype .ctor ([CORE_ASSEMBLY]System.ValueType) T> (object 'box') cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
unbox !!T |
||||
ret |
||||
} // end of method Unsafe::Unbox |
||||
|
||||
.method public hidebysig static !!T& Add<T>(!!T& source, int32 elementOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sizeof !!T |
||||
conv.i |
||||
mul |
||||
add |
||||
ret |
||||
} // end of method Unsafe::Add |
||||
|
||||
.method public hidebysig static void* Add<T>(void* source, int32 elementOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sizeof !!T |
||||
conv.i |
||||
mul |
||||
add |
||||
ret |
||||
} // end of method Unsafe::Add |
||||
|
||||
.method public hidebysig static !!T& Add<T>(!!T& source, native int elementOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sizeof !!T |
||||
mul |
||||
add |
||||
ret |
||||
} // end of method Unsafe::Add |
||||
|
||||
.method public hidebysig static !!T& AddByteOffset<T>(!!T& source, native int byteOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
add |
||||
ret |
||||
} // end of method Unsafe::AddByteOffset |
||||
|
||||
.method public hidebysig static !!T& Subtract<T>(!!T& source, int32 elementOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sizeof !!T |
||||
conv.i |
||||
mul |
||||
sub |
||||
ret |
||||
} // end of method Unsafe::Subtract |
||||
|
||||
.method public hidebysig static void* Subtract<T>(void* source, int32 elementOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sizeof !!T |
||||
conv.i |
||||
mul |
||||
sub |
||||
ret |
||||
} // end of method Unsafe::Subtract |
||||
|
||||
.method public hidebysig static !!T& Subtract<T>(!!T& source, native int elementOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 3 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sizeof !!T |
||||
mul |
||||
sub |
||||
ret |
||||
} // end of method Unsafe::Subtract |
||||
|
||||
.method public hidebysig static !!T& SubtractByteOffset<T>(!!T& source, native int byteOffset) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
sub |
||||
ret |
||||
} // end of method Unsafe::SubtractByteOffset |
||||
|
||||
.method public hidebysig static native int ByteOffset<T>(!!T& origin, !!T& target) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.1 |
||||
ldarg.0 |
||||
sub |
||||
ret |
||||
} // end of method Unsafe::ByteOffset |
||||
|
||||
.method public hidebysig static bool AreSame<T>(!!T& left, !!T& right) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
ceq |
||||
ret |
||||
} // end of method Unsafe::AreSame |
||||
|
||||
.method public hidebysig static bool IsAddressGreaterThan<T>(!!T& left, !!T& right) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
cgt.un |
||||
ret |
||||
} // end of method Unsafe::IsAddressGreaterThan |
||||
|
||||
.method public hidebysig static bool IsAddressLessThan<T>(!!T& left, !!T& right) cil managed aggressiveinlining |
||||
{ |
||||
.maxstack 2 |
||||
ldarg.0 |
||||
ldarg.1 |
||||
clt.un |
||||
ret |
||||
} // end of method Unsafe::IsAddressLessThan |
||||
|
||||
} // end of class System.Runtime.CompilerServices.Unsafe |
||||
|
||||
#ifdef netcoreapp |
||||
#else |
||||
.class private auto ansi sealed beforefieldinit System.Runtime.CompilerServices.IsReadOnlyAttribute |
||||
extends [CORE_ASSEMBLY]System.Attribute |
||||
{ |
||||
.method public hidebysig specialname rtspecialname |
||||
instance void .ctor () cil managed |
||||
{ |
||||
.maxstack 1 |
||||
ldarg.0 |
||||
call instance void [CORE_ASSEMBLY]System.Attribute::.ctor() |
||||
ret |
||||
} // end of method IsReadOnlyAttribute::.ctor |
||||
|
||||
} // end of class System.Runtime.CompilerServices.IsReadOnlyAttribute |
||||
#endif |
Loading…
Reference in new issue