-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Description
Run Information
| Name | Value |
|---|---|
| Architecture | x86 |
| OS | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | 7e3bf878c105ea6114e56d3e6e3014c5480cb060 |
| Compare | 1c8d37af80667daffb3cb80ce0fe915621e8f039 |
| Diff | Diff |
| Configs | CompliationMode:tiered, RunKind:micro |
Improvements in System.Buffers.Text.Tests.Utf8ParserTests
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
|---|---|---|---|---|---|---|---|---|---|---|
| TryParseSingle - Duration of single invocation | 119.96 ns | 109.42 ns | 0.91 | 0.00 | False | Trace | Trace | |||
| TryParseSingle - Duration of single invocation | 119.45 ns | 108.59 ns | 0.91 | 0.00 | False | Trace | Trace | |||
| TryParseDouble - Duration of single invocation | 155.32 ns | 144.82 ns | 0.93 | 0.00 | False | Trace | Trace |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Text.Tests.Utf8ParserTests*'Payloads
Histogram
System.Buffers.Text.Tests.Utf8ParserTests.TryParseSingle(value: -3.4028235E+38)
Description of detection logic
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 109.41553414063989 < 113.99170304524004.
IsChangePoint: Marked as a change because one of 3/13/2023 2:14:21 PM, 3/21/2023 3:33:39 AM falls between 3/11/2023 9:11:51 PM and 3/21/2023 3:33:39 AM.
IsImprovementStdDev: Marked as improvement because 70.29001117991471 (T) = (0 -108.45736527964182) / Math.Sqrt((1.132660825972663 / (299)) + (0.999022431739063 / (40))) is greater than 1.9670282846691574 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (40) - 2, .975) and 0.09903013779840154 = (120.37846084509063 - 108.45736527964182) / 120.37846084509063 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline BDN Disasm
```assembly
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseSingle(Utf8TestCase)
push ebp
mov ebp,esp
sub esp,8
xor eax,eax
mov [ebp-4],eax
mov [ebp-8],eax
mov ecx,[edx+4]
test ecx,ecx
je short M00_L01
lea edx,[ecx+8]
mov eax,[ecx+4]
M00_L00:
push eax
push edx
push 0
lea ecx,[ebp-4]
lea edx,[ebp-8]
call dword ptr ds:[0B8AD3D8]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
mov esp,ebp
pop ebp
ret
M00_L01:
xor edx,edx
xor eax,eax
jmp short M00_L00
; Total bytes of code 53
; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
push ebp
mov ebp,esp
push edi
push esi
sub esp,20
vzeroupper
vxorps xmm4,xmm4,xmm4
vmovdqu xmmword ptr [ebp-20],xmm4
xor eax,eax
mov [ebp-10],eax
mov [ebp-0C],esp
mov dword ptr [ebp-24],90004D49
mov edi,ecx
mov esi,edx
test [esp],esp
sub esp,74
lea ecx,[esp]
mov [ebp-0C],esp
mov byte ptr [ebp-16],3
mov [ebp-14],ecx
mov dword ptr [ebp-10],72
lea ecx,[ebp-14]
cmp dword ptr [ecx+4],0
jbe near ptr M01_L09
mov ecx,[ecx]
mov byte ptr [ecx],0
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
movzx ecx,word ptr [ebp+8]
push ecx
lea ecx,[ebp-20]
mov edx,esi
call dword ptr ds:[0B8AD408]; System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint(System.ReadOnlySpan`1<Byte>, NumberBuffer ByRef, Int32 ByRef, Char)
test eax,eax
je short M01_L07
cmp dword ptr [ebp-20],0
je short M01_L00
mov ecx,[ebp-1C]
cmp ecx,0FFFFFFD3
jge short M01_L01
M01_L00:
vxorps xmm0,xmm0,xmm0
jmp short M01_L03
M01_L01:
cmp ecx,27
jle short M01_L02
vmovss xmm0,dword ptr ds:[0B8B2110]
jmp short M01_L03
M01_L02:
lea ecx,[ebp-20]
mov edx,8718388
call dword ptr ds:[8D4DDF8]; System.Number.NumberToSingleFloatingPointBits(NumberBuffer ByRef, FloatingPointInfo ByRef)
vmovd xmm0,eax
M01_L03:
cmp byte ptr [ebp-18],0
jne short M01_L04
jmp short M01_L05
M01_L04:
vxorps xmm0,xmm0,ds:[0B8B2120]
M01_L05:
vmovss dword ptr [edi],xmm0
mov eax,1
cmp dword ptr [ebp-24],90004D49
je short M01_L06
call CORINFO_HELP_FAIL_FAST
M01_L06:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L07:
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
vmovss xmm0,dword ptr ds:[0B8B2110]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0B8B2130]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0B8B2134]
sub esp,4
vmovss dword ptr [esp],xmm0
mov ecx,edi
mov edx,esi
call dword ptr ds:[0B8D3450]
cmp dword ptr [ebp-24],90004D49
je short M01_L08
call CORINFO_HELP_FAIL_FAST
M01_L08:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L09:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 303Compare BDN Disasm
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseSingle(Utf8TestCase)
push ebp
mov ebp,esp
sub esp,8
xor eax,eax
mov [ebp-4],eax
mov [ebp-8],eax
mov ecx,[edx+4]
test ecx,ecx
je short M00_L01
lea edx,[ecx+8]
mov eax,[ecx+4]
M00_L00:
push eax
push edx
push 0
lea ecx,[ebp-4]
lea edx,[ebp-8]
call dword ptr ds:[0B73D3D8]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
mov esp,ebp
pop ebp
ret
M00_L01:
xor edx,edx
xor eax,eax
jmp short M00_L00
; Total bytes of code 53; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
push ebp
mov ebp,esp
push edi
push esi
sub esp,20
vzeroupper
vxorps xmm4,xmm4,xmm4
vmovdqu xmmword ptr [ebp-20],xmm4
xor eax,eax
mov [ebp-10],eax
mov [ebp-0C],esp
mov dword ptr [ebp-24],0D0DE933D
mov edi,ecx
mov esi,edx
test [esp],esp
sub esp,74
lea ecx,[esp]
mov [ebp-0C],esp
mov byte ptr [ebp-16],3
mov [ebp-14],ecx
mov dword ptr [ebp-10],72
lea ecx,[ebp-14]
cmp dword ptr [ecx+4],0
jbe near ptr M01_L09
mov ecx,[ecx]
mov byte ptr [ecx],0
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
movzx ecx,word ptr [ebp+8]
push ecx
lea ecx,[ebp-20]
mov edx,esi
call dword ptr ds:[0B73D408]; System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint(System.ReadOnlySpan`1<Byte>, NumberBuffer ByRef, Int32 ByRef, Char)
test eax,eax
je short M01_L07
cmp dword ptr [ebp-20],0
je short M01_L00
mov ecx,[ebp-1C]
cmp ecx,0FFFFFFD3
jge short M01_L01
M01_L00:
vxorps xmm0,xmm0,xmm0
jmp short M01_L03
M01_L01:
cmp ecx,27
jle short M01_L02
vmovss xmm0,dword ptr ds:[0B741DF0]
jmp short M01_L03
M01_L02:
lea ecx,[ebp-20]
mov edx,86182E0
call dword ptr ds:[8C4DDF8]; System.Number.NumberToSingleFloatingPointBits(NumberBuffer ByRef, FloatingPointInfo ByRef)
vmovd xmm0,eax
M01_L03:
cmp byte ptr [ebp-18],0
jne short M01_L04
jmp short M01_L05
M01_L04:
vxorps xmm0,xmm0,ds:[0B741E00]
M01_L05:
vmovss dword ptr [edi],xmm0
mov eax,1
cmp dword ptr [ebp-24],0D0DE933D
je short M01_L06
call CORINFO_HELP_FAIL_FAST
M01_L06:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L07:
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
vmovss xmm0,dword ptr ds:[0B741DF0]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0B741E10]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0B741E14]
sub esp,4
vmovss dword ptr [esp],xmm0
mov ecx,edi
mov edx,esi
call dword ptr ds:[8D03450]
cmp dword ptr [ebp-24],0D0DE933D
je short M01_L08
call CORINFO_HELP_FAIL_FAST
M01_L08:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L09:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 303System.Buffers.Text.Tests.Utf8ParserTests.TryParseSingle(value: 3.4028235E+38)
Description of detection logic
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 108.58721430764844 < 113.58832355683091.
IsChangePoint: Marked as a change because one of 3/13/2023 2:14:21 PM, 3/21/2023 3:33:39 AM falls between 3/11/2023 9:11:51 PM and 3/21/2023 3:33:39 AM.
IsImprovementStdDev: Marked as improvement because 70.92277304974526 (T) = (0 -107.74075207392741) / Math.Sqrt((1.4502663391790787 / (299)) + (0.9508004005151528 / (40))) is greater than 1.9670282846691574 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (40) - 2, .975) and 0.1002045289753794 = (119.73915800136247 - 107.74075207392741) / 119.73915800136247 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline BDN Disasm
```assembly
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseSingle(Utf8TestCase)
push ebp
mov ebp,esp
sub esp,8
xor eax,eax
mov [ebp-4],eax
mov [ebp-8],eax
mov ecx,[edx+4]
test ecx,ecx
je short M00_L01
lea edx,[ecx+8]
mov eax,[ecx+4]
M00_L00:
push eax
push edx
push 0
lea ecx,[ebp-4]
lea edx,[ebp-8]
call dword ptr ds:[0AE5D3D8]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
mov esp,ebp
pop ebp
ret
M00_L01:
xor edx,edx
xor eax,eax
jmp short M00_L00
; Total bytes of code 53
; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
push ebp
mov ebp,esp
push edi
push esi
sub esp,20
vzeroupper
vxorps xmm4,xmm4,xmm4
vmovdqu xmmword ptr [ebp-20],xmm4
xor eax,eax
mov [ebp-10],eax
mov [ebp-0C],esp
mov dword ptr [ebp-24],0EDDFF450
mov edi,ecx
mov esi,edx
test [esp],esp
sub esp,74
lea ecx,[esp]
mov [ebp-0C],esp
mov byte ptr [ebp-16],3
mov [ebp-14],ecx
mov dword ptr [ebp-10],72
lea ecx,[ebp-14]
cmp dword ptr [ecx+4],0
jbe near ptr M01_L09
mov ecx,[ecx]
mov byte ptr [ecx],0
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
movzx ecx,word ptr [ebp+8]
push ecx
lea ecx,[ebp-20]
mov edx,esi
call dword ptr ds:[0AE5D408]; System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint(System.ReadOnlySpan`1<Byte>, NumberBuffer ByRef, Int32 ByRef, Char)
test eax,eax
je short M01_L07
cmp dword ptr [ebp-20],0
je short M01_L00
mov ecx,[ebp-1C]
cmp ecx,0FFFFFFD3
jge short M01_L01
M01_L00:
vxorps xmm0,xmm0,xmm0
jmp short M01_L03
M01_L01:
cmp ecx,27
jle short M01_L02
vmovss xmm0,dword ptr ds:[0AE62110]
jmp short M01_L03
M01_L02:
lea ecx,[ebp-20]
mov edx,7D38388
call dword ptr ds:[836DDF8]; System.Number.NumberToSingleFloatingPointBits(NumberBuffer ByRef, FloatingPointInfo ByRef)
vmovd xmm0,eax
M01_L03:
cmp byte ptr [ebp-18],0
jne short M01_L04
jmp short M01_L05
M01_L04:
vxorps xmm0,xmm0,ds:[0AE62120]
M01_L05:
vmovss dword ptr [edi],xmm0
mov eax,1
cmp dword ptr [ebp-24],0EDDFF450
je short M01_L06
call CORINFO_HELP_FAIL_FAST
M01_L06:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L07:
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
vmovss xmm0,dword ptr ds:[0AE62110]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0AE62130]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0AE62134]
sub esp,4
vmovss dword ptr [esp],xmm0
mov ecx,edi
mov edx,esi
call dword ptr ds:[0AE83450]
cmp dword ptr [ebp-24],0EDDFF450
je short M01_L08
call CORINFO_HELP_FAIL_FAST
M01_L08:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L09:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 303Compare BDN Disasm
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseSingle(Utf8TestCase)
push ebp
mov ebp,esp
sub esp,8
xor eax,eax
mov [ebp-4],eax
mov [ebp-8],eax
mov ecx,[edx+4]
test ecx,ecx
je short M00_L01
lea edx,[ecx+8]
mov eax,[ecx+4]
M00_L00:
push eax
push edx
push 0
lea ecx,[ebp-4]
lea edx,[ebp-8]
call dword ptr ds:[0B85D3D8]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
mov esp,ebp
pop ebp
ret
M00_L01:
xor edx,edx
xor eax,eax
jmp short M00_L00
; Total bytes of code 53; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Single ByRef, Int32 ByRef, Char)
push ebp
mov ebp,esp
push edi
push esi
sub esp,20
vzeroupper
vxorps xmm4,xmm4,xmm4
vmovdqu xmmword ptr [ebp-20],xmm4
xor eax,eax
mov [ebp-10],eax
mov [ebp-0C],esp
mov dword ptr [ebp-24],0BE02A1E
mov edi,ecx
mov esi,edx
test [esp],esp
sub esp,74
lea ecx,[esp]
mov [ebp-0C],esp
mov byte ptr [ebp-16],3
mov [ebp-14],ecx
mov dword ptr [ebp-10],72
lea ecx,[ebp-14]
cmp dword ptr [ecx+4],0
jbe near ptr M01_L09
mov ecx,[ecx]
mov byte ptr [ecx],0
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
movzx ecx,word ptr [ebp+8]
push ecx
lea ecx,[ebp-20]
mov edx,esi
call dword ptr ds:[0B85D408]; System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint(System.ReadOnlySpan`1<Byte>, NumberBuffer ByRef, Int32 ByRef, Char)
test eax,eax
je short M01_L07
cmp dword ptr [ebp-20],0
je short M01_L00
mov ecx,[ebp-1C]
cmp ecx,0FFFFFFD3
jge short M01_L01
M01_L00:
vxorps xmm0,xmm0,xmm0
jmp short M01_L03
M01_L01:
cmp ecx,27
jle short M01_L02
vmovss xmm0,dword ptr ds:[0B861DF0]
jmp short M01_L03
M01_L02:
lea ecx,[ebp-20]
mov edx,86C82E0
call dword ptr ds:[8CFDDF8]; System.Number.NumberToSingleFloatingPointBits(NumberBuffer ByRef, FloatingPointInfo ByRef)
vmovd xmm0,eax
M01_L03:
cmp byte ptr [ebp-18],0
jne short M01_L04
jmp short M01_L05
M01_L04:
vxorps xmm0,xmm0,ds:[0B861E00]
M01_L05:
vmovss dword ptr [edi],xmm0
mov eax,1
cmp dword ptr [ebp-24],0BE02A1E
je short M01_L06
call CORINFO_HELP_FAIL_FAST
M01_L06:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L07:
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
vmovss xmm0,dword ptr ds:[0B861DF0]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0B861E10]
sub esp,4
vmovss dword ptr [esp],xmm0
vmovss xmm0,dword ptr ds:[0B861E14]
sub esp,4
vmovss dword ptr [esp],xmm0
mov ecx,edi
mov edx,esi
call dword ptr ds:[8DB3450]
cmp dword ptr [ebp-24],0BE02A1E
je short M01_L08
call CORINFO_HELP_FAIL_FAST
M01_L08:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L09:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 303System.Buffers.Text.Tests.Utf8ParserTests.TryParseDouble(value: -1.7976931348623157e+308)
Description of detection logic
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 144.82258224628544 < 147.54377592457058.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 3/13/2023 2:14:21 PM, 3/21/2023 3:33:39 AM falls between 3/11/2023 9:11:51 PM and 3/21/2023 3:33:39 AM.
IsImprovementStdDev: Marked as improvement because 67.86503950349572 (T) = (0 -144.7772247083128) / Math.Sqrt((6.214194891313082 / (299)) + (0.5046326480682843 / (40))) is greater than 1.9670282846691574 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (40) - 2, .975) and 0.07890717394649131 = (157.1798418283439 - 144.7772247083128) / 157.1798418283439 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline BDN Disasm
```assembly
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseDouble(Utf8TestCase)
push ebp
mov ebp,esp
sub esp,0C
xor eax,eax
mov [ebp-8],eax
mov [ebp-4],eax
mov [ebp-0C],eax
mov ecx,[edx+4]
test ecx,ecx
je short M00_L01
lea edx,[ecx+8]
mov eax,[ecx+4]
M00_L00:
push eax
push edx
push 0
lea ecx,[ebp-8]
lea edx,[ebp-0C]
call dword ptr ds:[0B06F138]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Double ByRef, Int32 ByRef, Char)
mov esp,ebp
pop ebp
ret
M00_L01:
xor edx,edx
xor eax,eax
jmp short M00_L00
; Total bytes of code 56
; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Double ByRef, Int32 ByRef, Char)
push ebp
mov ebp,esp
push edi
push esi
sub esp,24
vzeroupper
vxorps xmm4,xmm4,xmm4
vmovdqu xmmword ptr [ebp-20],xmm4
xor eax,eax
mov [ebp-10],eax
mov [ebp-0C],esp
mov dword ptr [ebp-24],0D9066C05
mov edi,ecx
mov esi,edx
test [esp],esp
sub esp,304
lea ecx,[esp]
mov [ebp-0C],esp
mov byte ptr [ebp-16],3
mov [ebp-14],ecx
mov dword ptr [ebp-10],301
lea ecx,[ebp-14]
cmp dword ptr [ecx+4],0
jbe near ptr M01_L03
mov ecx,[ecx]
mov byte ptr [ecx],0
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
movzx ecx,word ptr [ebp+8]
push ecx
lea ecx,[ebp-20]
mov edx,esi
call dword ptr ds:[0B06F150]; System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint(System.ReadOnlySpan`1<Byte>, NumberBuffer ByRef, Int32 ByRef, Char)
test eax,eax
je short M01_L01
lea ecx,[ebp-20]
call dword ptr ds:[853F438]; System.Number.NumberToDouble(NumberBuffer ByRef)
fstp qword ptr [ebp-2C]
vmovsd xmm0,qword ptr [ebp-2C]
vmovsd qword ptr [edi],xmm0
mov eax,1
cmp dword ptr [ebp-24],0D9066C05
je short M01_L00
call CORINFO_HELP_FAIL_FAST
M01_L00:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L01:
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
vmovsd xmm0,qword ptr ds:[86D2BD8]
sub esp,8
vmovsd qword ptr [esp],xmm0
vmovsd xmm0,qword ptr ds:[86D2BE0]
sub esp,8
vmovsd qword ptr [esp],xmm0
vmovsd xmm0,qword ptr ds:[86D2BE8]
sub esp,8
vmovsd qword ptr [esp],xmm0
mov ecx,edi
mov edx,esi
call dword ptr ds:[0B0C50A8]
cmp dword ptr [ebp-24],0D9066C05
je short M01_L02
call CORINFO_HELP_FAIL_FAST
M01_L02:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L03:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 254Compare BDN Disasm
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseDouble(Utf8TestCase)
push ebp
mov ebp,esp
sub esp,0C
xor eax,eax
mov [ebp-8],eax
mov [ebp-4],eax
mov [ebp-0C],eax
mov ecx,[edx+4]
test ecx,ecx
je short M00_L01
lea edx,[ecx+8]
mov eax,[ecx+4]
M00_L00:
push eax
push edx
push 0
lea ecx,[ebp-8]
lea edx,[ebp-0C]
call dword ptr ds:[0B8DF138]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Double ByRef, Int32 ByRef, Char)
mov esp,ebp
pop ebp
ret
M00_L01:
xor edx,edx
xor eax,eax
jmp short M00_L00
; Total bytes of code 56; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Double ByRef, Int32 ByRef, Char)
push ebp
mov ebp,esp
push edi
push esi
sub esp,24
vzeroupper
vxorps xmm4,xmm4,xmm4
vmovdqu xmmword ptr [ebp-20],xmm4
xor eax,eax
mov [ebp-10],eax
mov [ebp-0C],esp
mov dword ptr [ebp-24],1972E3C2
mov edi,ecx
mov esi,edx
test [esp],esp
sub esp,304
lea ecx,[esp]
mov [ebp-0C],esp
mov byte ptr [ebp-16],3
mov [ebp-14],ecx
mov dword ptr [ebp-10],301
lea ecx,[ebp-14]
cmp dword ptr [ecx+4],0
jbe near ptr M01_L03
mov ecx,[ecx]
mov byte ptr [ecx],0
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
movzx ecx,word ptr [ebp+8]
push ecx
lea ecx,[ebp-20]
mov edx,esi
call dword ptr ds:[0B8DF150]; System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint(System.ReadOnlySpan`1<Byte>, NumberBuffer ByRef, Int32 ByRef, Char)
test eax,eax
je short M01_L01
lea ecx,[ebp-20]
call dword ptr ds:[8DFF438]; System.Number.NumberToDouble(NumberBuffer ByRef)
fstp qword ptr [ebp-2C]
vmovsd xmm0,qword ptr [ebp-2C]
vmovsd qword ptr [edi],xmm0
mov eax,1
cmp dword ptr [ebp-24],1972E3C2
je short M01_L00
call CORINFO_HELP_FAIL_FAST
M01_L00:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L01:
push dword ptr [ebp+10]
push dword ptr [ebp+0C]
vmovsd xmm0,qword ptr ds:[0B8E2A58]
sub esp,8
vmovsd qword ptr [esp],xmm0
vmovsd xmm0,qword ptr ds:[0B8E2A60]
sub esp,8
vmovsd qword ptr [esp],xmm0
vmovsd xmm0,qword ptr ds:[0B8E2A68]
sub esp,8
vmovsd qword ptr [esp],xmm0
mov ecx,edi
mov edx,esi
call dword ptr ds:[0B9150F0]
cmp dword ptr [ebp-24],1972E3C2
je short M01_L02
call CORINFO_HELP_FAIL_FAST
M01_L02:
lea esp,[ebp-8]
pop esi
pop edi
pop ebp
ret 0C
M01_L03:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 254Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
| Name | Value |
|---|---|
| Architecture | x86 |
| OS | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | 7e3bf878c105ea6114e56d3e6e3014c5480cb060 |
| Compare | 1c8d37af80667daffb3cb80ce0fe915621e8f039 |
| Diff | Diff |
| Configs | CompliationMode:tiered, RunKind:micro |
Improvements in HardwareIntrinsics.RayTracer.SoA
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
|---|---|---|---|---|---|---|---|---|---|---|
| Render - Duration of single invocation | 10.25 ms | 8.27 ms | 0.81 | 0.07 | False | Trace | Trace |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'HardwareIntrinsics.RayTracer.SoA*'Payloads
Histogram
HardwareIntrinsics.RayTracer.SoA.Render
Description of detection logic
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 8.269010107526881 < 9.82156054347826.
IsChangePoint: Marked as a change because one of 3/13/2023 2:14:21 PM, 3/21/2023 3:33:39 AM falls between 3/11/2023 9:11:51 PM and 3/21/2023 3:33:39 AM.
IsImprovementStdDev: Marked as improvement because 74.56907915483032 (T) = (0 -8207030.911006687) / Math.Sqrt((40514341296.62523 / (299)) + (22999639214.799816 / (40))) is greater than 1.9670282846691574 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (40) - 2, .975) and 0.1949685928474675 = (10194671.708568096 - 8207030.911006687) / 10194671.708568096 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline BDN Disasm
```assembly
; HardwareIntrinsics.RayTracer.SoA.Render()
push ebp
mov ebp,esp
push edi
push esi
push ebx
sub esp,2C
vzeroupper
xor eax,eax
mov [ebp-30],eax
mov esi,ecx
mov ecx,offset MT_HardwareIntrinsics.RayTracer.Packet256Tracer
call CORINFO_HELP_NEWSFAST
mov edi,eax
push 0F8
mov ecx,edi
mov edx,0F8
call dword ptr ds:[0B5AB690]; HardwareIntrinsics.RayTracer.Packet256Tracer..ctor(Int32, Int32)
mov ebx,[edi+4]
mov eax,[ebx+4]
cmp dword ptr [eax+4],0
jbe near ptr M00_L05
mov edx,[eax+8]
mov eax,edx
mov [ebp-34],eax
test eax,eax
je short M00_L00
mov ecx,offset MT_HardwareIntrinsics.RayTracer.SpherePacket256
cmp [eax],ecx
jne near ptr M00_L04
M00_L00:
vmovups ymm0,[eax+84]
vmovups [ebp-2C],ymm0
vmovups [eax+44],ymm0
vmovss xmm0,dword ptr ds:[0B587980]
sub esp,4
vmovss dword ptr [esp],xmm0
call System.MathF.Sin(Single)
fstp dword ptr [ebp-38]
vmovss xmm0,dword ptr [ebp-38]
vandps xmm0,xmm0,ds:[0B587990]
vmulss xmm0,xmm0,dword ptr ds:[0B5879A0]
vbroadcastss ymm0,xmm0
vmovups ymm1,[ebp-2C]
vaddps ymm0,ymm1,ymm0
mov ecx,[ebp-34]
vmovups [ecx+44],ymm0
mov ecx,[esi+4]
mov [ebp-30],ecx
test ecx,ecx
je short M00_L01
mov ecx,[ebp-30]
cmp dword ptr [ecx+4],0
jne short M00_L02
M00_L01:
xor ecx,ecx
jmp short M00_L03
M00_L02:
mov ecx,[ebp-30]
cmp dword ptr [ecx+4],0
jbe short M00_L05
mov ecx,[ebp-30]
add ecx,8
M00_L03:
push ecx
mov ecx,edi
mov edx,ebx
call dword ptr ds:[0B5AB6A8]; HardwareIntrinsics.RayTracer.Packet256Tracer.RenderVectorized(HardwareIntrinsics.RayTracer.Scene, Int32*)
xor ecx,ecx
mov [ebp-30],ecx
vzeroupper
lea esp,[ebp-0C]
pop ebx
pop esi
pop edi
pop ebp
ret
M00_L04:
call dword ptr ds:[844B8B8]
int 3
M00_L05:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 253
; HardwareIntrinsics.RayTracer.Packet256Tracer..ctor(Int32, Int32)
push edi
push esi
mov edi,ecx
mov esi,edx
call dword ptr ds:[0B5AB768]; HardwareIntrinsics.RayTracer.Packet256Tracer.CreateDefaultScene()
lea edx,[edi+4]
call CORINFO_HELP_ASSIGN_REF_EAX
test esi,7
je short M01_L00
mov eax,esi
sar eax,1F
and eax,7
add eax,esi
and eax,0FFFFFFF8
mov edx,esi
sub edx,eax
mov eax,edx
neg eax
lea esi,[eax+esi+8]
M01_L00:
mov [edi+8],esi
mov esi,[esp+0C]
mov [edi+0C],esi
pop esi
pop edi
ret 4
; Total bytes of code 68; HardwareIntrinsics.RayTracer.Packet256Tracer.RenderVectorized(HardwareIntrinsics.RayTracer.Scene, Int32*)
push ebp
mov ebp,esp
push edi
push esi
push ebx
sub esp,158
vzeroupper
vxorps xmm4,xmm4,xmm4
mov eax,0FFFFFEE0
M02_L00:
vmovdqu xmmword ptr [ebp+eax-18],xmm4
vmovdqu xmmword ptr [ebp+eax-8],xmm4
vmovdqu xmmword ptr [ebp+eax+8],xmm4
add eax,30
jne short M02_L00
mov ebx,ecx
mov esi,edx
mov eax,[esi+0C]
mov [ebp-164],eax
xor edx,edx
xor ecx,ecx
cmp dword ptr [ebx+0C],0
jle near ptr M02_L04
M02_L01:
mov edx,[ebx+8]
mov [ebp-15C],edx
mov edi,ecx
imul edi,edx
mov [ebp-14],edi
xor edx,edx
mov [ebp-18],edx
cmp dword ptr [ebp-15C],0
jle near ptr M02_L03
mov [ebp-10],ecx
mov ecx,0ACC5DB8
mov edx,0C6
call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
vxorps xmm0,xmm0,xmm0
vcvtsi2ss xmm0,xmm0,dword ptr [ebp-10]
vbroadcastss ymm0,xmm0
vmovups [ebp-158],ymm0
mov [ebp-160],esi
M02_L02:
vxorps xmm1,xmm1,xmm1
vcvtsi2ss xmm1,xmm1,dword ptr [ebp-18]
vbroadcastss ymm1,xmm1
vaddps ymm1,ymm1,ds:[8488400]
sub esp,20
vmovups [esp],ymm1
sub esp,20
vmovups [esp],ymm0
push dword ptr [ebp-164]
lea edx,[ebp-78]
mov ecx,ebx
call dword ptr ds:[0B5AB750]; HardwareIntrinsics.RayTracer.Packet256Tracer.GetPoints(System.Runtime.Intrinsics.Vector256`1<Single>, System.Runtime.Intrinsics.Vector256`1<Single>, HardwareIntrinsics.RayTracer.Camera)
mov ecx,offset MT_HardwareIntrinsics.RayTracer.RayPacket256
call CORINFO_HELP_NEWSFAST
mov edx,[ebp-164]
lea ecx,[edx+4]
vmovups ymm0,[ecx]
vmovups ymm1,[ecx+20]
vmovups ymm2,[ecx+40]
lea ecx,[eax+4]
vmovups [ecx],ymm0
vmovups [ecx+20],ymm1
vmovups [ecx+40],ymm2
lea edi,[eax+64]
lea esi,[ebp-78]
mov ecx,60
rep movsb
push eax
mov esi,[ebp-160]
push esi
push 0
lea edx,[ebp-0D8]
mov ecx,ebx
call dword ptr ds:[0B5AB6C0]; HardwareIntrinsics.RayTracer.Packet256Tracer.TraceRay(HardwareIntrinsics.RayTracer.RayPacket256, HardwareIntrinsics.RayTracer.Scene, Int32)
vmovups ymm0,[ebp-0D8]
vmovups ymm1,[ebp-0B8]
vshufps ymm0,ymm0,ymm1,88
vmovups ymm1,[ebp-0B8]
vmovups ymm2,[ebp-98]
vshufps ymm1,ymm1,ymm2,0DD
vmovups ymm2,[ebp-98]
vmovups ymm3,[ebp-0D8]
vshufps ymm2,ymm2,ymm3,0D8
vshufps ymm3,ymm0,ymm2,88
vshufps ymm0,ymm1,ymm0,0D8
vshufps ymm1,ymm2,ymm1,0DD
vmovaps ymm2,ymm3
vmovaps ymm4,ymm0
vmovaps ymm5,ymm1
vextractf128 xmm3,ymm3,1
vextractf128 xmm0,ymm0,1
vextractf128 xmm1,ymm1,1
vinsertf128 ymm2,ymm2,xmm4,1
vinsertf128 ymm3,ymm5,xmm3,1
vinsertf128 ymm0,ymm0,xmm1,1
sub esp,20
vmovups [esp],ymm0
sub esp,20
vmovups [esp],ymm3
sub esp,20
vmovups [esp],ymm2
lea ecx,[ebp-138]
call dword ptr ds:[0B5ADB10]; HardwareIntrinsics.RayTracer.ColorPacket256Helper.ConvertToIntRGB(HardwareIntrinsics.RayTracer.VectorPacket256)
mov edi,[ebp-18]
mov eax,[ebp-14]
lea edx,[edi+eax]
lea edx,[edx+edx*2]
mov ecx,[ebp+8]
lea edx,[ecx+edx*4]
vmovups ymm0,[ebp-138]
vmovups [edx],ymm0
vmovups ymm0,[ebp-118]
vmovups [edx+20],ymm0
vmovups ymm0,[ebp-0F8]
vmovups [edx+40],ymm0
add edi,8
cmp edi,[ebx+8]
mov [ebp-18],edi
mov [ebp-14],eax
mov [ebp+8],ecx
vmovups ymm0,[ebp-158]
jl short M02_L05
mov eax,[ebp-164]
mov ecx,[ebp-10]
M02_L03:
inc ecx
cmp ecx,[ebx+0C]
jl near ptr M02_L01
M02_L04:
vzeroupper
lea esp,[ebp-0C]
pop ebx
pop esi
pop edi
pop ebp
ret 4
M02_L05:
mov [ebp-160],esi
jmp near ptr M02_L02
; Total bytes of code 583Compare BDN Disasm
; HardwareIntrinsics.RayTracer.SoA.Render()
push ebp
mov ebp,esp
push edi
push esi
push ebx
sub esp,2C
vzeroupper
xor eax,eax
mov [ebp-30],eax
mov esi,ecx
mov ecx,offset MT_HardwareIntrinsics.RayTracer.Packet256Tracer
call CORINFO_HELP_NEWSFAST
mov edi,eax
push 0F8
mov ecx,edi
mov edx,0F8
call dword ptr ds:[0BC5D690]; HardwareIntrinsics.RayTracer.Packet256Tracer..ctor(Int32, Int32)
mov ebx,[edi+4]
mov eax,[ebx+4]
cmp dword ptr [eax+4],0
jbe near ptr M00_L05
mov edx,[eax+8]
mov eax,edx
mov [ebp-34],eax
test eax,eax
je short M00_L00
mov ecx,offset MT_HardwareIntrinsics.RayTracer.SpherePacket256
cmp [eax],ecx
jne near ptr M00_L04
M00_L00:
vmovups ymm0,[eax+84]
vmovups [ebp-2C],ymm0
vmovups [eax+44],ymm0
vmovss xmm0,dword ptr ds:[0BC67C50]
sub esp,4
vmovss dword ptr [esp],xmm0
call System.MathF.Sin(Single)
fstp dword ptr [ebp-38]
vmovss xmm0,dword ptr [ebp-38]
vandps xmm0,xmm0,ds:[0BC67C60]
vmulss xmm0,xmm0,dword ptr ds:[0BC67C70]
vbroadcastss ymm0,xmm0
vmovups ymm1,[ebp-2C]
vaddps ymm0,ymm1,ymm0
mov ecx,[ebp-34]
vmovups [ecx+44],ymm0
mov ecx,[esi+4]
mov [ebp-30],ecx
test ecx,ecx
je short M00_L01
mov ecx,[ebp-30]
cmp dword ptr [ecx+4],0
jne short M00_L02
M00_L01:
xor ecx,ecx
jmp short M00_L03
M00_L02:
mov ecx,[ebp-30]
cmp dword ptr [ecx+4],0
jbe short M00_L05
mov ecx,[ebp-30]
add ecx,8
M00_L03:
push ecx
mov ecx,edi
mov edx,ebx
call dword ptr ds:[0BC5D6A8]; HardwareIntrinsics.RayTracer.Packet256Tracer.RenderVectorized(HardwareIntrinsics.RayTracer.Scene, Int32*)
xor ecx,ecx
mov [ebp-30],ecx
vzeroupper
lea esp,[ebp-0C]
pop ebx
pop esi
pop edi
pop ebp
ret
M00_L04:
call dword ptr ds:[568B8B8]
int 3
M00_L05:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 253; HardwareIntrinsics.RayTracer.Packet256Tracer..ctor(Int32, Int32)
push edi
push esi
mov edi,ecx
mov esi,edx
call dword ptr ds:[0BC5D768]; HardwareIntrinsics.RayTracer.Packet256Tracer.CreateDefaultScene()
lea edx,[edi+4]
call CORINFO_HELP_ASSIGN_REF_EAX
test esi,7
je short M01_L00
mov eax,esi
sar eax,1F
and eax,7
add eax,esi
and eax,0FFFFFFF8
mov edx,esi
sub edx,eax
mov eax,edx
neg eax
lea esi,[eax+esi+8]
M01_L00:
mov [edi+8],esi
mov esi,[esp+0C]
mov [edi+0C],esi
pop esi
pop edi
ret 4
; Total bytes of code 68; HardwareIntrinsics.RayTracer.Packet256Tracer.RenderVectorized(HardwareIntrinsics.RayTracer.Scene, Int32*)
push ebp
mov ebp,esp
push edi
push esi
push ebx
sub esp,150
vzeroupper
vxorps xmm4,xmm4,xmm4
mov eax,0FFFFFEE0
M02_L00:
vmovdqu xmmword ptr [ebp+eax-14],xmm4
vmovdqu xmmword ptr [ebp+eax-4],xmm4
vmovdqu xmmword ptr [ebp+eax+0C],xmm4
add eax,30
jne short M02_L00
mov esi,ecx
mov edi,edx
mov eax,[edi+0C]
mov [ebp-15C],eax
xor ecx,ecx
cmp dword ptr [esi+0C],0
jle near ptr M02_L04
M02_L01:
mov edx,[esi+8]
mov [ebp-158],edx
mov ebx,ecx
imul ebx,edx
xor edx,edx
mov [ebp-14],edx
cmp dword ptr [ebp-158],0
jle near ptr M02_L03
mov [ebp-10],ecx
mov ecx,0B375F10
mov edx,0C6
call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
vxorps xmm0,xmm0,xmm0
vcvtsi2ss xmm0,xmm0,dword ptr [ebp-10]
vbroadcastss ymm0,xmm0
vmovups [ebp-154],ymm0
M02_L02:
vxorps xmm1,xmm1,xmm1
vcvtsi2ss xmm1,xmm1,dword ptr [ebp-14]
vbroadcastss ymm1,xmm1
vaddps ymm1,ymm1,ds:[8BA8358]
sub esp,20
vmovups [esp],ymm1
sub esp,20
vmovups [esp],ymm0
push dword ptr [ebp-15C]
lea edx,[ebp-74]
mov ecx,esi
call dword ptr ds:[0BC5D750]; HardwareIntrinsics.RayTracer.Packet256Tracer.GetPoints(System.Runtime.Intrinsics.Vector256`1<Single>, System.Runtime.Intrinsics.Vector256`1<Single>, HardwareIntrinsics.RayTracer.Camera)
mov ecx,offset MT_HardwareIntrinsics.RayTracer.RayPacket256
call CORINFO_HELP_NEWSFAST
mov ecx,[ebp-15C]
lea edx,[ecx+4]
vmovups ymm0,[edx]
vmovups ymm1,[edx+20]
vmovups ymm2,[edx+40]
lea edx,[eax+4]
vmovups [edx],ymm0
vmovups [edx+20],ymm1
vmovups [edx+40],ymm2
vmovdqu ymm0,ymmword ptr [ebp-74]
vmovdqu ymmword ptr [eax+64],ymm0
vmovdqu ymm0,ymmword ptr [ebp-54]
vmovdqu ymmword ptr [eax+84],ymm0
vmovdqu ymm0,ymmword ptr [ebp-34]
vmovdqu ymmword ptr [eax+0A4],ymm0
push eax
push edi
push 0
lea edx,[ebp-0D4]
mov ecx,esi
call dword ptr ds:[0BC5D6C0]; HardwareIntrinsics.RayTracer.Packet256Tracer.TraceRay(HardwareIntrinsics.RayTracer.RayPacket256, HardwareIntrinsics.RayTracer.Scene, Int32)
vmovups ymm0,[ebp-0D4]
vmovups ymm1,[ebp-0B4]
vshufps ymm0,ymm0,ymm1,88
vmovups ymm1,[ebp-0B4]
vmovups ymm2,[ebp-94]
vshufps ymm1,ymm1,ymm2,0DD
vmovups ymm2,[ebp-94]
vmovups ymm3,[ebp-0D4]
vshufps ymm2,ymm2,ymm3,0D8
vshufps ymm3,ymm0,ymm2,88
vshufps ymm0,ymm1,ymm0,0D8
vshufps ymm1,ymm2,ymm1,0DD
vmovaps ymm2,ymm3
vmovaps ymm4,ymm0
vmovaps ymm5,ymm1
vextractf128 xmm3,ymm3,1
vextractf128 xmm0,ymm0,1
vextractf128 xmm1,ymm1,1
vinsertf128 ymm2,ymm2,xmm4,1
vinsertf128 ymm3,ymm5,xmm3,1
vinsertf128 ymm0,ymm0,xmm1,1
sub esp,20
vmovups [esp],ymm0
sub esp,20
vmovups [esp],ymm3
sub esp,20
vmovups [esp],ymm2
lea ecx,[ebp-134]
call dword ptr ds:[0BC5FB10]; HardwareIntrinsics.RayTracer.ColorPacket256Helper.ConvertToIntRGB(HardwareIntrinsics.RayTracer.VectorPacket256)
mov ecx,[ebp-14]
lea eax,[ecx+ebx]
lea eax,[eax+eax*2]
mov edx,[ebp+8]
lea eax,[edx+eax*4]
vmovups ymm0,[ebp-134]
vmovups [eax],ymm0
vmovups ymm0,[ebp-114]
vmovups [eax+20],ymm0
vmovups ymm0,[ebp-0F4]
vmovups [eax+40],ymm0
add ecx,8
cmp ecx,[esi+8]
mov [ebp-14],ecx
mov [ebp+8],edx
vmovups ymm0,[ebp-154]
jl near ptr M02_L02
mov eax,[ebp-15C]
mov ecx,[ebp-10]
M02_L03:
inc ecx
cmp ecx,[esi+0C]
jl near ptr M02_L01
M02_L04:
vzeroupper
lea esp,[ebp-0C]
pop ebx
pop esi
pop edi
pop ebp
ret 4
; Total bytes of code 576Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

