Untitled diff
64 removals
Words removed | 96 |
Total words | 1096 |
Words removed (%) | 8.76 |
158 lines
61 additions
Words added | 106 |
Total words | 1106 |
Words added (%) | 9.58 |
154 lines
; Assembly listing for method System.MemoryExtensions:Trim[int](System.ReadOnlyMemory`1[int],int):System.ReadOnlyMemory`1[int] (FullOpts)
; Assembly listing for method System.MemoryExtensions:Trim[int](System.ReadOnlyMemory`1[int],int):System.ReadOnlyMemory`1[int] (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; FullOpts code
; optimized code
; optimized code
; rbp based frame
; rbp based frame
; partially interruptible
; partially interruptible
; No PGO data
; No PGO data
; 0 inlinees with PGO data; 5 single block inlinees; 2 inlinees without PGO data
; 0 inlinees with PGO data; 8 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
; Final local variable assignments
;
;
; V00 arg0 [V00,T04] ( 3, 3 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[int]>
; V00 arg0 [V00,T04] ( 3, 3 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[int]>
; V01 arg1 [V01,T01] ( 4, 4 ) int -> r15 single-def
; V01 arg1 [V01,T01] ( 4, 4 ) int -> r15 single-def
; V02 loc0 [V02,T05] ( 4, 4 ) int -> [rbp-0x3C] spill-single-def
; V02 loc0 [V02,T05] ( 4, 4 ) int -> [rbp-0x3C] spill-single-def
; V03 loc1 [V03,T09] ( 3, 3 ) int -> rax
; V03 loc1 [V03,T09] ( 3, 3 ) int -> rax
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "dup spill" <System.ReadOnlySpan`1[int]>
;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "dup spill" <System.ReadOnlySpan`1[int]>
;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SRM] multireg-ret multireg-dest "Return value temp for multireg return" <System.ReadOnlyMemory`1[int]>
;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SRM] multireg-ret multireg-dest "Return value temp for multireg return" <System.ReadOnlyMemory`1[int]>
;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[int]>
;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[int]>
; V08 tmp4 [V08,T02] ( 7, 5 ) byref -> r13 "Inline stloc first use temp"
; V08 tmp4 [V08,T02] ( 7, 5 ) byref -> r13 "Inline stloc first use temp"
; V09 tmp5 [V09,T03] ( 7, 5 ) int -> r12 "Inline stloc first use temp"
; V09 tmp5 [V09,T03] ( 7, 5 ) int -> r12 "Inline stloc first use temp"
;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Object>
;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Object>
;* V11 tmp7 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
;* V11 tmp7 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
;* V12 tmp8 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[int]>
;* V12 tmp8 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[int]>
;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBRM] multireg-ret multireg-dest "Return value temp for multireg return" <System.Span`1[int]>
;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBRM] multireg-ret multireg-dest "Return value temp for multireg return" <System.Span`1[int]>
;* V14 tmp10 [V14 ] ( 0, 0 ) struct (16) zero-ref multireg-ret multireg-dest ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
;* V14 tmp10 [V14 ] ( 0, 0 ) struct (16) zero-ref multireg-ret multireg-dest ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
; V15 tmp11 [V15,T11] ( 3, 1.50) long -> rdi "Inline stloc first use temp"
; V15 tmp11 [V15,T14] ( 2, 1 ) int -> rdi "Inline stloc first use temp"
;* V16 tmp12 [V16 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V16 tmp12 [V16 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V17 tmp13 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <int[]>
;* V17 tmp13 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <int[]>
;* V18 tmp14 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <int[]>
;* V18 tmp14 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <int[]>
; V19 tmp15 [V19,T10] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
; V19 tmp15 [V19,T10] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V20 tmp16 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V20 tmp16 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[int]>
;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[int]>
;* V22 tmp18 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object>
;* V22 tmp18 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V23 tmp19 [V23,T06] ( 2, 4 ) int -> r15 "Inlining Arg"
;* V23 tmp19 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object>
;* V24 tmp20 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
; V24 tmp20 [V24,T06] ( 2, 4 ) int -> r15 "Inlining Arg"
;* V25 tmp21 [V25 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V25 tmp21 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V26 tmp22 [V26 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
;* V26 tmp22 [V26 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V27 tmp23 [V27 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V27 tmp23 [V27 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp24 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp24 [V28 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V29 tmp25 [V29 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V29 tmp25 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp26 [V30 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-DEP
;* V30 tmp26 [V30 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V31 tmp27 [V31 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-DEP
;* V31 tmp27 [V31 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-DEP
; V32 tmp28 [V32,T13] ( 2, 1 ) byref -> r13 "field V14._reference (fldOffset=0x0)" P-INDEP
;* V32 tmp28 [V32 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-DEP
; V33 tmp29 [V33,T14] ( 2, 1 ) int -> r12 "field V14._length (fldOffset=0x8)" P-INDEP
; V33 tmp29 [V33,T13] ( 2, 1 ) byref -> r13 "field V14._reference (fldOffset=0x0)" P-INDEP
;* V34 tmp30 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
; V34 tmp30 [V34,T15] ( 2, 1 ) int -> r12 "field V14._length (fldOffset=0x8)" P-INDEP
;* V35 tmp31 [V35 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V35 tmp31 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V36 tmp32 [V36 ] ( 0, 0 ) ref -> zero-ref single-def "field V21._object (fldOffset=0x0)" P-INDEP
;* V36 tmp32 [V36 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V37 tmp33 [V37 ] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x8)" P-INDEP
;* V37 tmp33 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "field V21._object (fldOffset=0x0)" P-INDEP
;* V38 tmp34 [V38 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP
;* V38 tmp34 [V38 ] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x8)" P-INDEP
; V39 tmp35 [V39,T00] ( 8, 6 ) ref -> rbx single-def "V00.[000..008) V00.rdi"
;* V39 tmp35 [V39 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP
; V40 tmp36 [V40,T07] ( 4, 3.50) int -> r14 "V00.[008..012) V00.rsi"
; V40 tmp36 [V40,T00] ( 8, 6 ) ref -> rbx single-def "V00.[000..008) V00.rdi"
; V41 tmp37 [V41,T08] ( 4, 3 ) int -> [rbp-0x40] spill-single-def "V00.[012..016)"
; V41 tmp37 [V41,T07] ( 4, 3.50) int -> r14 "V00.[008..012) V00.rsi"
; V42 cse0 [V42,T12] ( 3, 1.50) long -> rcx "CSE #01: moderate"
; V42 tmp38 [V42,T08] ( 4, 3 ) int -> [rbp-0x40] spill-single-def "V00.[012..016)"
; V43 cse0 [V43,T11] ( 3, 1.50) long -> rdi "CSE #02: moderate"
; V44 cse1 [V44,T12] ( 3, 1.50) long -> rcx "CSE #01: moderate"
;
;
; Lcl frame size = 24
; Lcl frame size = 24
G_M47667_IG01:
G_M47667_IG01:
push rbp
push rbp
push r15
push r15
push r14
push r14
push r13
push r13
push r12
push r12
push rbx
push rbx
sub rsp, 24
sub rsp, 24
lea rbp, [rsp+0x40]
lea rbp, [rsp+0x40]
mov gword ptr [rbp-0x38], rdi
mov gword ptr [rbp-0x38], rdi
mov qword ptr [rbp-0x30], rsi
mov qword ptr [rbp-0x30], rsi
mov rbx, rdi
mov rbx, rdi
mov r14d, esi
mov r14d, esi
mov r15d, edx
mov r15d, edx
;; size=36 bbWeight=1 PerfScore 9.50
;; size=36 bbWeight=1 PerfScore 9.50
G_M47667_IG02:
G_M47667_IG02:
xor r13, r13
xor r13, r13
xor r12d, r12d
xor r12d, r12d
mov eax, dword ptr [rbp-0x2C]
mov eax, dword ptr [rbp-0x2C]
mov dword ptr [rbp-0x40], eax
mov dword ptr [rbp-0x40], eax
test rbx, rbx
test rbx, rbx
je SHORT G_M47667_IG06
je SHORT G_M47667_IG06
;; size=17 bbWeight=1 PerfScore 3.75
;; size=17 bbWeight=1 PerfScore 3.75
G_M47667_IG03:
G_M47667_IG03:
mov rcx, qword ptr [rbx]
mov rcx, qword ptr [rbx]
mov rdi, rcx
mov rdi, rcx
test dword ptr [rdi], 0xD1FFAB1E
test dword ptr [rdi], 0xD1FFAB1E
jne SHORT G_M47667_IG04
jne SHORT G_M47667_IG04
mov rdi, rbx
mov rdi, rbx
mov rcx, qword ptr [rcx+0x40]
mov rcx, qword ptr [rcx+0x40]
call [rcx+0x28]System.Buffers.MemoryManager`1[int]:GetSpan():System.Span`1[int]:this
call [rcx+0x28]System.Buffers.MemoryManager`1[int]:GetSpan():System.Span`1[int]:this
mov r13, rax
mov r13, rax
mov r12d, edx
mov r12d, edx
jmp SHORT G_M47667_IG05
jmp SHORT G_M47667_IG05
;; size=32 bbWeight=0.50 PerfScore 7.00
;; size=32 bbWeight=0.50 PerfScore 7.00
G_M47667_IG04:
G_M47667_IG04:
lea r13, bword ptr [rbx+0x10]
lea r13, bword ptr [rbx+0x10]
mov r12d, dword ptr [rbx+0x08]
mov r12d, dword ptr [rbx+0x08]
;; size=8 bbWeight=0.50 PerfScore 1.25
;; size=8 bbWeight=0.50 PerfScore 1.25
G_M47667_IG05:
G_M47667_IG05:
mov edi, r14d
mov edi, r14d
and edi, 0xD1FFAB1E
and edi, 0xD1FFAB1E
mov eax, dword ptr [rbp-0x40]
mov eax, dword ptr [rbp-0x40]
mov esi, eax
mov esi, eax
add rsi, rdi
add rsi, rdi
mov edx, r12d
mov edx, r12d
cmp rsi, rdx
cmp rsi, rdx
ja G_M47667_IG09
ja SHORT G_M47667_IG08
lea r13, bword ptr [r13+4*rdi]
lea r13, bword ptr [r13+4*rdi]
mov r12d, eax
mov r12d, eax
;; size=37 bbWeight=0.50 PerfScore 2.88
;; size=33 bbWeight=0.50 PerfScore 2.88
G_M47667_IG06:
G_M47667_IG06:
mov rdi, r13
mov rdi, r13
mov esi, r12d
mov esi, r12d
mov edx, r15d
mov edx, r15d
mov rcx, 0xD1FFAB1E ; code for System.MemoryExtensions:ClampStart[int](System.ReadOnlySpan`1[int],int):int
mov rcx, 0xD1FFAB1E ; code for System.MemoryExtensions:ClampStart[int](System.ReadOnlySpan`1[int],int):int
call [rcx]System.MemoryExtensions:ClampStart[int](System.ReadOnlySpan`1[int],int):int
call [rcx]System.MemoryExtensions:ClampStart[int](System.ReadOnlySpan`1[int],int):int
mov dword ptr [rbp-0x3C], eax
mov dword ptr [rbp-0x3C], eax
mov rdi, r13
mov rdi, r13
mov esi, r12d
mov esi, r12d
mov edx, eax
mov edx, eax
mov ecx, r15d
mov ecx, r15d
mov r8, 0xD1FFAB1E ; code for System.MemoryExtensions:ClampEnd[int](System.ReadOnlySpan`1[int],int,int):int
mov r8, 0xD1FFAB1E ; code for System.MemoryExtensions:ClampEnd[int](System.ReadOnlySpan`1[int],int,int):int
call [r8]System.MemoryExtensions:ClampEnd[int](System.ReadOnlySpan`1[int],int,int):int
call [r8]System.MemoryExtensions:ClampEnd[int](System.ReadOnlySpan`1[int],int,int):int
mov r15d, dword ptr [rbp-0x3C]
mov r15d, dword ptr [rbp-0x3C]
mov edx, r15d
mov edx, r15d
mov edi, eax
mov ecx, eax
add rdx, rdi
add rdx, rcx
mov edi, dword ptr [rbp-0x40]
mov ecx, dword ptr [rbp-0x40]
cmp rdx, rdi
cmp rdx, rcx
ja SHORT G_M47667_IG08
ja SHORT G_M47667_IG08
add r15d, r14d
add r15d, r14d
mov edx, eax
mov edx, eax
shl rdx, 32
shl rdx, 32
mov edi, r15d
mov ecx, r15d
or rdx, rdi
or rdx, rcx
mov rax, rbx
mov rax, rbx
;; size=86 bbWeight=1 PerfScore 15.00
;; size=86 bbWeight=1 PerfScore 15.00
G_M47667_IG07:
G_M47667_IG07:
add rsp, 24
add rsp, 24
pop rbx
pop rbx
pop r12
pop r12
pop r13
pop r13
pop r14
pop r14
pop r15
pop r15
pop rbp
pop rbp
ret
ret
;; size=15 bbWeight=1 PerfScore 4.25
;; size=15 bbWeight=1 PerfScore 4.25
G_M47667_IG08:
G_M47667_IG08:
mov edi, 33
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M47667_IG09:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
;; size=13 bbWeight=0.50 PerfScore 1.75
; Total bytes of code 262, prolog size 19, PerfScore 47.25, instruction count 81, allocated bytes for code 262 (MethodHash=873845cc) for method System.MemoryExtensions:Trim[int](System.ReadOnlyMemory`1[int],int):System.ReadOnlyMemory`1[int] (FullOpts)
; Total bytes of code 240, prolog size 19, PerfScore 45.38, instruction count 77, allocated bytes for code 240 (MethodHash=873845cc) for method System.MemoryExtensions:Trim[int](System.ReadOnlyMemory`1[int],int):System.ReadOnlyMemory`1[int] (FullOpts)
; ============================================================
; ============================================================