-
-
Notifications
You must be signed in to change notification settings - Fork 977
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hight Volatility & Strange4 Disasm #1124
Comments
@yahorsi I just want to clarify: do you suspect that BenchmarkDotNet produces incorrect results or do you want to just understand performance difference between different modes? In the second case, it's better to create an issue in https://github.com/dotnet/coreclr/ |
I want to understand the source of the volatility I see in the benchmark. My wild guess is that in the benchmark we compare code that is jitted differently (using different tiers). My wild guess is that issues/volatility is caused by the tiered jit. In general, after thinking about tiered jit I do not see how is that possible to benchmark without all benchmarks being jitted using exactly the same tier/mode. Otherwise it is not apples to apples. Run benchmark once again with sources and il. Here are results , BTW, there is no JOB description here in the dasm that makes it impossible to understand what JOB it belongs to. Note, I have different jobs with same framework moniker but different environment variables .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rax,qword ptr [rcx+8]
mov edx,dword ptr [rcx+10h]
cmp edx,dword ptr [rax+18h]
jae 00007ffe`153f3095
; Total bytes of code 12 No ILOffsetMap found .NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rax,qword ptr [rcx+8]
mov edx,dword ptr [rcx+10h]
cmp edx,dword ptr [rax+10h]
jae 00007ffe`4afa6d16
; Total bytes of code 12 No ILOffsetMap found .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov qword ptr [rbp-8],rcx
mov rcx,qword ptr [rbp+10h]
call ListBenchmarks.ListBaseBenchmarks.get_Index()
mov dword ptr [rbp-0Ch],eax
mov edx,dword ptr [rbp-0Ch]
mov rcx,qword ptr [rbp-8]
cmp dword ptr [rcx],ecx
call System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]].get_Item(Int32)
; Total bytes of code 38 ; ListBenchmarks.ListBaseBenchmarks.get_Index()
public int Index { get; set; }
^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Int32 ListBenchmarks.ListBaseBenchmarks::<Index>k__BackingField
IL_0006: ret
mov rax,qword ptr [rbp+10h]
mov eax,dword ptr [rax+10h]
; Total bytes of code 7 ; System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]].get_Item(Int32)
IL_0000: ldarg.1
IL_0001: ldarg.0
IL_0002: ldfld System.Int32 System.Collections.Generic.List`1<T>::_size
IL_0007: blt.un.s IL_000e
mov eax,dword ptr [rbp+20h]
mov rdx,qword ptr [rbp+10h]
cmp eax,dword ptr [rdx+18h]
jb M02_L00
IL_0009: call System.Void System.ThrowHelper::ThrowArgumentOutOfRange_IndexException()
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
IL_000e: ldarg.0
IL_000f: ldfld T[] System.Collections.Generic.List`1<T>::_items
IL_0014: ldarg.1
IL_0015: ldelem.any T
IL_001a: ret
M02_L00:
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov eax,dword ptr [rbp+20h]
cmp rax,qword ptr [rcx+8]
jae M02_L01
mov edx,28h
imul rdx,rax
lea rsi,[rcx+rdx+10h]
mov rdi,qword ptr [rbp+18h]
call coreclr!MetaDataGetDispenser+0x3c240
mov ecx,4
rep movs qword ptr [rdi],qword ptr [rsi]
mov rax,qword ptr [rbp+18h]
lea rsp,[rbp-10h]
pop rsi
pop rdi
pop rbp
ret
M02_L01:
call coreclr!GetCLRRuntimeHost+0x7da60
int 3
add byte ptr [rcx],bl
???
add al,0
???
xor al,byte ptr [rbx]
???
add dh,byte ptr [rax+1]
push rax
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x6aa570
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x6aa576
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp edx,dword ptr [rsi+18h]
jae System_Private_CoreLib+0x6aa59f
mov rcx,qword ptr [rsi+8]
call System_Private_CoreLib+0x2d4028
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x70f96f
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x70f975
movsxd rdx,edx
mov eax,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x70f9aa
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x777740
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x777746
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x77777a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x787130
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x787136
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x78716a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x78b7d0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x78b7d6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x78b80a
lea rcx,[System_Private_CoreLib+0xa554c8
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7917cb
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x7917d1
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
movs qword ptr [rdi],qword ptr [rsi]
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x79180a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7936e0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x7936e6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x79371a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7a1360
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x7a1366
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x7a139a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x80e250
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x80e256
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x80e28a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x80fbc0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x80fbc6
movsxd rdx,edx
movzx eax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x80fbfa
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8114e0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8114e6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81151a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x813121
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x813127
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81315a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x814a91
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x814a97
movsxd rdx,edx
movsd xmm0,mmword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x814aca
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8166d1
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x8166d7
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81670a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x818051
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x818057
movsxd rdx,edx
movsx rax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81808a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x819990
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x819996
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x8199ca
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81b2b0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81b2b6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81b2ea
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81cc31
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81cc37
movsxd rdx,edx
movsx rax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81cc6a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81e5a1
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81e5a7
movsxd rdx,edx
movss xmm0,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81e5da
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81ff10
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81ff16
movsxd rdx,edx
movzx eax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81ff4a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8217ef
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8217f5
movsxd rdx,edx
mov eax,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x82182a
lea rcx,[System_Private_CoreLib+0xa554c8
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x823b5e
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x823b64
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x823b9a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8255b0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8255b6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x8255ea
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x827221
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x827227
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x82725a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x86efe2
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x86efe8
movsxd rdx,r8d
shl rdx,5
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
movs qword ptr [rdi],qword ptr [rsi]
movs qword ptr [rdi],qword ptr [rsi]
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x86f01a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x92ce9e
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x92cea4
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x92ceda
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x95c850
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x95c856
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
; Total bytes of code 2183 .NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov qword ptr [rbp-8],rcx
mov rcx,qword ptr [rbp+10h]
call ListBenchmarks.ListBaseBenchmarks.get_Index()
mov dword ptr [rbp-0Ch],eax
mov edx,dword ptr [rbp-0Ch]
mov rcx,qword ptr [rbp-8]
cmp dword ptr [rcx],ecx
call qword ptr [00007ffe`4af87768]
; Total bytes of code 39 ; ListBenchmarks.ListBaseBenchmarks.get_Index()
public int Index { get; set; }
^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Int32 ListBenchmarks.ListBaseBenchmarks::<Index>k__BackingField
IL_0006: ret
mov rax,qword ptr [rbp+10h]
mov eax,dword ptr [rax+10h]
; Total bytes of code 7 .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rax,qword ptr [rcx+8]
mov edx,dword ptr [rcx+10h]
cmp edx,dword ptr [rax+18h]
jae 00007ffe`153c3095
; Total bytes of code 12 No ILOffsetMap found .NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rax,qword ptr [rcx+8]
mov edx,dword ptr [rcx+10h]
cmp edx,dword ptr [rax+10h]
jae 00007ffe`4af86d16
; Total bytes of code 12 No ILOffsetMap found .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov qword ptr [rbp-8],rcx
mov rcx,qword ptr [rbp+10h]
call ListBenchmarks.ListBaseBenchmarks.get_Index()
mov dword ptr [rbp-0Ch],eax
mov edx,dword ptr [rbp-0Ch]
mov rcx,qword ptr [rbp-8]
cmp dword ptr [rcx],ecx
call System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]].get_Item(Int32)
; Total bytes of code 38 ; ListBenchmarks.ListBaseBenchmarks.get_Index()
public int Index { get; set; }
^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Int32 ListBenchmarks.ListBaseBenchmarks::<Index>k__BackingField
IL_0006: ret
mov rax,qword ptr [rbp+10h]
mov eax,dword ptr [rax+10h]
; Total bytes of code 7 ; System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]].get_Item(Int32)
IL_0000: ldarg.1
IL_0001: ldarg.0
IL_0002: ldfld System.Int32 System.Collections.Generic.List`1<T>::_size
IL_0007: blt.un.s IL_000e
mov eax,dword ptr [rbp+20h]
mov rdx,qword ptr [rbp+10h]
cmp eax,dword ptr [rdx+18h]
jb M02_L00
IL_0009: call System.Void System.ThrowHelper::ThrowArgumentOutOfRange_IndexException()
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
IL_000e: ldarg.0
IL_000f: ldfld T[] System.Collections.Generic.List`1<T>::_items
IL_0014: ldarg.1
IL_0015: ldelem.any T
IL_001a: ret
M02_L00:
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov eax,dword ptr [rbp+20h]
cmp rax,qword ptr [rcx+8]
jae M02_L01
mov edx,28h
imul rdx,rax
lea rsi,[rcx+rdx+10h]
mov rdi,qword ptr [rbp+18h]
call coreclr!MetaDataGetDispenser+0x3c240
mov ecx,4
rep movs qword ptr [rdi],qword ptr [rsi]
mov rax,qword ptr [rbp+18h]
lea rsp,[rbp-10h]
pop rsi
pop rdi
pop rbp
ret
M02_L01:
call coreclr!GetCLRRuntimeHost+0x7da60
int 3
add byte ptr [rcx],bl
???
add al,0
???
xor al,byte ptr [rbx]
???
add dh,byte ptr [rax+1]
push rax
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x6aa570
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x6aa576
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp edx,dword ptr [rsi+18h]
jae System_Private_CoreLib+0x6aa59f
mov rcx,qword ptr [rsi+8]
call System_Private_CoreLib+0x2d4028
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x70f96f
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x70f975
movsxd rdx,edx
mov eax,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x70f9aa
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x777740
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x777746
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x77777a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x787130
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x787136
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x78716a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x78b7d0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x78b7d6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x78b80a
lea rcx,[System_Private_CoreLib+0xa554c8
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7917cb
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x7917d1
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
movs qword ptr [rdi],qword ptr [rsi]
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x79180a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7936e0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x7936e6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x79371a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7a1360
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x7a1366
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x7a139a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x80e250
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x80e256
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x80e28a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x80fbc0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x80fbc6
movsxd rdx,edx
movzx eax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x80fbfa
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8114e0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8114e6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81151a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x813121
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x813127
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81315a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x814a91
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x814a97
movsxd rdx,edx
movsd xmm0,mmword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x814aca
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8166d1
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x8166d7
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81670a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x818051
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x818057
movsxd rdx,edx
movsx rax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81808a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x819990
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x819996
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x8199ca
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81b2b0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81b2b6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81b2ea
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81cc31
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81cc37
movsxd rdx,edx
movsx rax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81cc6a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81e5a1
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81e5a7
movsxd rdx,edx
movss xmm0,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81e5da
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81ff10
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81ff16
movsxd rdx,edx
movzx eax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81ff4a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8217ef
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8217f5
movsxd rdx,edx
mov eax,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x82182a
lea rcx,[System_Private_CoreLib+0xa554c8
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x823b5e
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x823b64
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x823b9a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8255b0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8255b6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x8255ea
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x827221
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x827227
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x82725a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x86efe2
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x86efe8
movsxd rdx,r8d
shl rdx,5
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
movs qword ptr [rdi],qword ptr [rsi]
movs qword ptr [rdi],qword ptr [rsi]
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x86f01a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x92ce9e
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x92cea4
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x92ceda
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x95c850
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x95c856
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
; Total bytes of code 2183 .NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov qword ptr [rbp-8],rcx
mov rcx,qword ptr [rbp+10h]
call ListBenchmarks.ListBaseBenchmarks.get_Index()
mov dword ptr [rbp-0Ch],eax
mov edx,dword ptr [rbp-0Ch]
mov rcx,qword ptr [rbp-8]
cmp dword ptr [rcx],ecx
call qword ptr [00007ffe`4af77768]
; Total bytes of code 39 ; ListBenchmarks.ListBaseBenchmarks.get_Index()
public int Index { get; set; }
^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Int32 ListBenchmarks.ListBaseBenchmarks::<Index>k__BackingField
IL_0006: ret
mov rax,qword ptr [rbp+10h]
mov eax,dword ptr [rax+10h]
; Total bytes of code 7 .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rax,qword ptr [rcx+8]
mov edx,dword ptr [rcx+10h]
cmp edx,dword ptr [rax+18h]
jae 00007ffe`153e3095
; Total bytes of code 12 No ILOffsetMap found .NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rax,qword ptr [rcx+8]
mov edx,dword ptr [rcx+10h]
cmp edx,dword ptr [rax+10h]
jae 00007ffe`4af86d16
; Total bytes of code 12 No ILOffsetMap found .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov qword ptr [rbp-8],rcx
mov rcx,qword ptr [rbp+10h]
call ListBenchmarks.ListBaseBenchmarks.get_Index()
mov dword ptr [rbp-0Ch],eax
mov edx,dword ptr [rbp-0Ch]
mov rcx,qword ptr [rbp-8]
cmp dword ptr [rcx],ecx
call System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]].get_Item(Int32)
; Total bytes of code 38 ; ListBenchmarks.ListBaseBenchmarks.get_Index()
public int Index { get; set; }
^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Int32 ListBenchmarks.ListBaseBenchmarks::<Index>k__BackingField
IL_0006: ret
mov rax,qword ptr [rbp+10h]
mov eax,dword ptr [rax+10h]
; Total bytes of code 7 ; System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]].get_Item(Int32)
IL_0000: ldarg.1
IL_0001: ldarg.0
IL_0002: ldfld System.Int32 System.Collections.Generic.List`1<T>::_size
IL_0007: blt.un.s IL_000e
mov eax,dword ptr [rbp+20h]
mov rdx,qword ptr [rbp+10h]
cmp eax,dword ptr [rdx+18h]
jb M02_L00
IL_0009: call System.Void System.ThrowHelper::ThrowArgumentOutOfRange_IndexException()
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
IL_000e: ldarg.0
IL_000f: ldfld T[] System.Collections.Generic.List`1<T>::_items
IL_0014: ldarg.1
IL_0015: ldelem.any T
IL_001a: ret
M02_L00:
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov eax,dword ptr [rbp+20h]
cmp rax,qword ptr [rcx+8]
jae M02_L01
mov edx,28h
imul rdx,rax
lea rsi,[rcx+rdx+10h]
mov rdi,qword ptr [rbp+18h]
call coreclr!MetaDataGetDispenser+0x3c240
mov ecx,4
rep movs qword ptr [rdi],qword ptr [rsi]
mov rax,qword ptr [rbp+18h]
lea rsp,[rbp-10h]
pop rsi
pop rdi
pop rbp
ret
M02_L01:
call coreclr!GetCLRRuntimeHost+0x7da60
int 3
add byte ptr [rcx],bl
???
add al,0
???
xor al,byte ptr [rbx]
???
add dh,byte ptr [rax+1]
push rax
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x6aa570
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x6aa576
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp edx,dword ptr [rsi+18h]
jae System_Private_CoreLib+0x6aa59f
mov rcx,qword ptr [rsi+8]
call System_Private_CoreLib+0x2d4028
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x70f96f
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x70f975
movsxd rdx,edx
mov eax,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x70f9aa
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x777740
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x777746
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x77777a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x787130
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x787136
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x78716a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x78b7d0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x78b7d6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x78b80a
lea rcx,[System_Private_CoreLib+0xa554c8
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7917cb
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x7917d1
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
movs qword ptr [rdi],qword ptr [rsi]
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x79180a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7936e0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x7936e6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x79371a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x7a1360
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x7a1366
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x7a139a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x80e250
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x80e256
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x80e28a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x80fbc0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x80fbc6
movsxd rdx,edx
movzx eax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x80fbfa
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8114e0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8114e6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81151a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x813121
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x813127
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81315a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x814a91
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x814a97
movsxd rdx,edx
movsd xmm0,mmword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x814aca
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8166d1
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x8166d7
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81670a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x818051
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x818057
movsxd rdx,edx
movsx rax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81808a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x819990
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x819996
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x8199ca
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81b2b0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81b2b6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81b2ea
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81cc31
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81cc37
movsxd rdx,edx
movsx rax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81cc6a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81e5a1
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81e5a7
movsxd rdx,edx
movss xmm0,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81e5da
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x81ff10
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x81ff16
movsxd rdx,edx
movzx eax,word ptr [rax+rdx*2+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x81ff4a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8217ef
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8217f5
movsxd rdx,edx
mov eax,dword ptr [rax+rdx*4+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x82182a
lea rcx,[System_Private_CoreLib+0xa554c8
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x823b5e
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x823b64
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x823b9a
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x8255b0
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x8255b6
movsxd rdx,edx
mov rax,qword ptr [rax+rdx*8+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x8255ea
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x827221
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x827227
movsxd rcx,r8d
shl rcx,4
lea rax,[rax+rcx+10h]
movdqu xmm0,xmmword ptr [rax]
movdqu xmmword ptr [rdx],xmm0
mov rax,rdx
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x82725a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x86efe2
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x86efe8
movsxd rdx,r8d
shl rdx,5
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
movs qword ptr [rdi],qword ptr [rsi]
movs qword ptr [rdi],qword ptr [rsi]
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x86f01a
lea rcx,[System_Private_CoreLib+0xa554c8
call System_Private_CoreLib+0x2d4080
push rdi
push rsi
push rbx
sub rsp,20h
mov rbx,rdx
cmp r8d,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x92ce9e
mov rax,qword ptr [rcx+8]
cmp r8d,dword ptr [rax+8]
jae System_Private_CoreLib+0x92cea4
movsxd rdx,r8d
shl rdx,4
lea rsi,[rax+rdx+10h]
mov rdi,rbx
call System_Private_CoreLib+0x2d4130
call System_Private_CoreLib+0x2d4130
mov rax,rbx
add rsp,20h
pop rbx
pop rsi
pop rdi
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
call System_Private_CoreLib+0x2d4038
int 3
int 3
int 3
int 3
int 3
int 3
int 3
push rsi
sub rsp,20h
mov rsi,rcx
cmp qword ptr [rsi+10h],0
jne System_Private_CoreLib+0x92ceda
lea rcx,[System_Private_CoreLib+0xa554c8
sub rsp,28h
nop
cmp edx,dword ptr [rcx+18h]
jae System_Private_CoreLib+0x95c850
mov rax,qword ptr [rcx+8]
cmp edx,dword ptr [rax+8]
jae System_Private_CoreLib+0x95c856
movsxd rdx,edx
movzx eax,byte ptr [rax+rdx+10h]
add rsp,28h
ret
call System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
int 3
; Total bytes of code 2183 .NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT; ListBenchmarks.ListBaseBenchmarks.AccessByIndex()
return intList[Index];
^^^^^^^^^^^^^^^^^^^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Collections.Generic.List`1<System.Int32> ListBenchmarks.ListBaseBenchmarks::intList
IL_0006: ldarg.0
IL_0007: call System.Int32 ListBenchmarks.ListBaseBenchmarks::get_Index()
IL_000c: callvirt !0 System.Collections.Generic.List`1<System.Int32>::get_Item(System.Int32)
IL_0011: ret
mov rcx,qword ptr [rbp+10h]
mov rcx,qword ptr [rcx+8]
mov qword ptr [rbp-8],rcx
mov rcx,qword ptr [rbp+10h]
call ListBenchmarks.ListBaseBenchmarks.get_Index()
mov dword ptr [rbp-0Ch],eax
mov edx,dword ptr [rbp-0Ch]
mov rcx,qword ptr [rbp-8]
cmp dword ptr [rcx],ecx
call qword ptr [00007ffe`4af87768]
; Total bytes of code 39 ; ListBenchmarks.ListBaseBenchmarks.get_Index()
public int Index { get; set; }
^^^^
IL_0000: ldarg.0
IL_0001: ldfld System.Int32 ListBenchmarks.ListBaseBenchmarks::<Index>k__BackingField
IL_0006: ret
mov rax,qword ptr [rbp+10h]
mov eax,dword ptr [rax+10h]
; Total bytes of code 7 |
Hi @yahorsi
From my experience (I am the person who was working on ensuring that the last few .NET Core releases have not regressed performance) such volatility is typically caused by memory and|or loop body alignment changes. I am currently working on a Workshop for the .NET Team and preparing a doc that provides some examples and describes how to deal with that: https://github.com/adamsitnik/performance/blob/e4987916c83bef9c2203c256043dc4d9f6cc6a29/docs/regressions.md#memory-alignment I hope that this doc answers your question. Since there is nothing actionable on the BDN side and we already have two issues that track the alignment ideas (#756 and #1513) I am closing this one. Thanks, |
Hi Guys!
I'm trying to investigate following benchmark https://github.com/yahorsi/ListBenchmarks where I'm trying to benchmark access to the List[]. The problem I see is that results are very volatile, sometime difference is 3x-4x and I do not understand why. And no, I do not run bitcoin miners on my machine and CPU/IO is not used when I run benchmarks :)
Below see how e.g. 0.0912 is different from 0.5830 ns.
Disasm looks strange for me as well. Why in once case it is so short and not in another case
:
// * Summary *
BenchmarkDotNet=v0.11.4, OS=Windows 10.0.17763.379 (1809/October2018Update/Redstone5)
Intel Core i7-8700 CPU 3.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.0.100-preview3-010431
[Host] : .NET Core 2.1.9 (CoreCLR 4.6.27414.06, CoreFX 4.6.27415.01), 64bit RyuJIT
Tiered Compilation Disabled : .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
Tiered Compilation Enabled : .NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
Runtime=Core
Benchmarks with issues:
ListBaseBenchmarks.AccessByIndex: Job-HLFLUV(IterationCount=100, LaunchCount=3, WarmupCount=100) [Index=1]
ListBaseBenchmarks.AccessByIndex: Job-HLFLUV(IterationCount=100, LaunchCount=3, WarmupCount=100) [Index=5]
ListBaseBenchmarks.AccessByIndex: Job-HLFLUV(IterationCount=100, LaunchCount=3, WarmupCount=100) [Index=9]
// * Warnings *
MultimodalDistribution
ListBaseBenchmarks.AccessByIndex: Tiered Compilation Disabled -> It seems that the distribution can have several modes (mValue = 3.14)
ListBaseBenchmarks.AccessByIndex: Tiered Compilation Disabled -> It seems that the distribution can have several modes (mValue = 3)
// * Hints *
Outliers
ListBaseBenchmarks.AccessByIndex: Tiered Compilation Enabled -> 2 outliers were removed
ListBaseBenchmarks.AccessByIndex: Tiered Compilation Enabled -> 3 outliers were removed, 4 outliers were detected
// * Legends *
Index : Value of the 'Index' parameter
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - DisassemblyDiagnoser *
The results were exported to ".\BenchmarkDotNet.Artifacts\results*-disassembly-report.html"
// ***** BenchmarkRunner: End *****
// ** Remained 0 benchmark(s) to run **
Run time: 00:08:08 (488.07 sec), executed benchmarks: 12
Global total time: 00:08:13 (493.1 sec), executed benchmarks: 12
// * Artifacts cleanup *
.NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
No ILOffsetMap found
ListBenchmarks.ListBaseBenchmarks.get_Index()
.NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT
No ILOffsetMap found
System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
ListBenchmarks.ListBaseBenchmarks.get_Index()
.NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
.NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT
.NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
No ILOffsetMap found
ListBenchmarks.ListBaseBenchmarks.get_Index()
.NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT
No ILOffsetMap found
System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
ListBenchmarks.ListBaseBenchmarks.get_Index()
.NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
.NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT
.NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
No ILOffsetMap found
ListBenchmarks.ListBaseBenchmarks.get_Index()
.NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT
No ILOffsetMap found
System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
ListBenchmarks.ListBaseBenchmarks.get_Index()
.NET Core 2.2.3 (CoreCLR 4.6.27414.05, CoreFX 4.6.27414.05), 64bit RyuJIT
.NET Core 3.0.0-preview3-27503-5 (CoreCLR 4.6.27422.72, CoreFX 4.7.19.12807), 64bit RyuJIT
The text was updated successfully, but these errors were encountered: