Diff
checker
Text
Text
Bilder
Dokumente
Excel
Ordner
Legal
Enterprise
Desktop-App
Preise
Einloggen
Diffchecker Desktop herunterladen
Texte vergleichen
Finde den Unterschied zwischen zwei Textdateien
Werkzeuge
Verlauf
Live-Editor
Gleiches ausblenden
Zeilenumbruch aus
Ansicht
Zweispaltig
Einspaltig
Vergleichsgenauigkeit
Intelligent
Wort
Zeichen
Syntaxhervorhebung
Syntax auswählen
Ignorieren
Text umwandeln
Zur ersten Änderung
Eingabe bearbeiten
Diffchecker Desktop
Der sicherste Weg, Diffchecker zu nutzen. Hol dir die Desktop-App: Deine Diffs verlassen nie deinen Computer!
Desktop holen
Untitled diff
Erstellt
letztes Jahr
Diff läuft nie ab
Löschen
Exportieren
Teilen
Erklären
82 Entfernungen
Zeilen
Gesamt
Entfernt
Zeichen
Gesamt
Entfernt
Um diese Funktion weiterhin zu nutzen, aktualisiere auf
Diff
checker
Pro
Preise anzeigen
158 Zeilen
Kopieren
80 Hinzufügungen
Zeilen
Gesamt
Hinzugefügt
Zeichen
Gesamt
Hinzugefügt
Um diese Funktion weiterhin zu nutzen, aktualisiere auf
Diff
checker
Pro
Preise anzeigen
154 Zeilen
Kopieren
; 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
Kopieren
Kopiert
Kopieren
Kopiert
; 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]>
Kopieren
Kopiert
Kopieren
Kopiert
; V15 tmp11 [V15,T1
1
] (
3
, 1
.50
)
long
-> rdi "Inline stloc first use temp"
; V15 tmp11 [V15,T1
4
] (
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]>
Kopieren
Kopiert
Kopieren
Kopiert
;* 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"
; V2
3 tmp19
[V2
3
,T06] ( 2, 4 ) int -> r15 "Inlining Arg"
;* V23 tmp19 [V23 ] ( 0, 0 )
ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object>
;* V2
4
tmp2
0
[V2
4
] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
; V2
4 tmp20
[V2
4
,T06] ( 2, 4 ) int -> r15 "Inlining Arg"
;* V2
5
tmp2
1
[V2
5
] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V2
5
tmp2
1
[V2
5
] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V2
6
tmp2
2
[V2
6
] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
;* V2
6
tmp2
2
[V2
6
] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V2
7
tmp2
3
[V2
7
] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V2
7
tmp2
3
[V2
7
] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
;* V2
8
tmp2
4
[V2
8
] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V2
8
tmp2
4
[V2
8
] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;*
V29
tmp2
5
[
V29
] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V2
9
tmp2
5
[V2
9
] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V3
0
tmp2
6
[V3
0
] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-DEP
;*
V30
tmp2
6
[
V30
] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V3
1
tmp2
7
[V3
1
] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-DEP
;* V3
1
tmp2
7
[V3
1
] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-DEP
; V3
2
tmp2
8
[V3
2
,T13] ( 2, 1 ) byref -> r13 "field V14._reference (fldOffset=0x0)" P-INDEP
;* V3
2
tmp2
8
[V3
2
] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-DEP
; V3
3 tmp29
[V3
3
,T1
4
] ( 2, 1 ) int -> r12 "field V14._length (fldOffset=0x8)" P-INDEP
; V3
3
tmp2
9
[V3
3
,T13] ( 2, 1 ) byref -> r13 "field V14._reference (fldOffset=0x0)" P-INDEP
;* V3
4
tmp3
0
[V3
4
] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
; V3
4 tmp30
[V3
4
,T1
5
] ( 2, 1 ) int -> r12 "field V14._length (fldOffset=0x8)" P-INDEP
;* V3
5
tmp3
1
[V3
5
] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V3
5
tmp3
1
[V3
5
] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V3
6
tmp3
2
[V3
6
] ( 0, 0 ) ref -> zero-ref single-def "field V21._object (fldOffset=0x0)" P-INDEP
;* V3
6
tmp3
2
[V3
6
] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V3
7
tmp3
3
[V3
7
] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x8)" P-INDEP
;* V3
7
tmp3
3
[V3
7
] ( 0, 0 ) ref -> zero-ref single-def "field V21._object (fldOffset=0x0)" P-INDEP
;* V3
8
tmp3
4
[V3
8
] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP
;* V3
8
tmp3
4
[V3
8
] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x8)" P-INDEP
;
V39
tmp3
5
[
V39
,T00] ( 8, 6 ) ref -> rbx single-def "V00.[000..008) V00.rdi"
;* V3
9
tmp3
5
[V3
9
] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP
; V4
0
tmp3
6
[V4
0
,T07] ( 4, 3.50) int -> r14 "V00.[008..012) V00.rsi"
;
V40
tmp3
6
[
V40
,T00] ( 8, 6 ) ref -> rbx single-def "V00.[000..008) V00.rdi"
; V4
1
tmp3
7
[V4
1
,T08] ( 4, 3 ) int -> [rbp-0x40] spill-single-def "V00.[012..016)"
; V4
1
tmp3
7
[V4
1
,T07] ( 4, 3.50) int -> r14 "V00.[008..012) V00.rsi"
; V4
2
cse0 [
V42
,T12] ( 3, 1.50) long -> rcx "CSE #01: moderate"
; V4
2
tmp3
8
[V4
2
,T08] ( 4, 3 ) int -> [rbp-0x40] spill-single-def "V00.[012..016)"
; V4
3
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
Kopieren
Kopiert
Kopieren
Kopiert
ja
G_M47667_IG0
9
ja
SHORT
G_M47667_IG0
8
lea r13, bword ptr [r13+4*rdi]
lea r13, bword ptr [r13+4*rdi]
mov r12d, eax
mov r12d, eax
Kopieren
Kopiert
Kopieren
Kopiert
;; 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
Kopieren
Kopiert
Kopieren
Kopiert
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
Kopieren
Kopiert
Kopieren
Kopiert
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:
Kopieren
Kopiert
Kopieren
Kopiert
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
Kopieren
Kopiert
Kopieren
Kopiert
; 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)
; ============================================================
; ============================================================
Gespeicherte Diffs
Originaltext
Datei öffnen
; 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 ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 5 single block inlinees; 2 inlinees without PGO data ; 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]> ; V01 arg1 [V01,T01] ( 4, 4 ) int -> r15 single-def ; V02 loc0 [V02,T05] ( 4, 4 ) int -> [rbp-0x3C] spill-single-def ; 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> ;* 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]> ;* 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" ; 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> ;* 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]> ;* 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]> ; V15 tmp11 [V15,T11] ( 3, 1.50) long -> rdi "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[]> ;* 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" ;* 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]> ;* V22 tmp18 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object> ; V23 tmp19 [V23,T06] ( 2, 4 ) int -> r15 "Inlining Arg" ;* V24 tmp20 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V25 tmp21 [V25 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP ;* V26 tmp22 [V26 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP ;* V27 tmp23 [V27 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP ;* V28 tmp24 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V29 tmp25 [V29 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP ;* V30 tmp26 [V30 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-DEP ;* V31 tmp27 [V31 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-DEP ; V32 tmp28 [V32,T13] ( 2, 1 ) byref -> r13 "field V14._reference (fldOffset=0x0)" P-INDEP ; V33 tmp29 [V33,T14] ( 2, 1 ) int -> r12 "field V14._length (fldOffset=0x8)" P-INDEP ;* V34 tmp30 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP ;* V35 tmp31 [V35 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP ;* V36 tmp32 [V36 ] ( 0, 0 ) ref -> zero-ref single-def "field V21._object (fldOffset=0x0)" P-INDEP ;* V37 tmp33 [V37 ] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x8)" P-INDEP ;* V38 tmp34 [V38 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP ; V39 tmp35 [V39,T00] ( 8, 6 ) ref -> rbx single-def "V00.[000..008) V00.rdi" ; V40 tmp36 [V40,T07] ( 4, 3.50) int -> r14 "V00.[008..012) V00.rsi" ; V41 tmp37 [V41,T08] ( 4, 3 ) int -> [rbp-0x40] spill-single-def "V00.[012..016)" ; V42 cse0 [V42,T12] ( 3, 1.50) long -> rcx "CSE #01: moderate" ; ; Lcl frame size = 24 G_M47667_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 24 lea rbp, [rsp+0x40] mov gword ptr [rbp-0x38], rdi mov qword ptr [rbp-0x30], rsi mov rbx, rdi mov r14d, esi mov r15d, edx ;; size=36 bbWeight=1 PerfScore 9.50 G_M47667_IG02: xor r13, r13 xor r12d, r12d mov eax, dword ptr [rbp-0x2C] mov dword ptr [rbp-0x40], eax test rbx, rbx je SHORT G_M47667_IG06 ;; size=17 bbWeight=1 PerfScore 3.75 G_M47667_IG03: mov rcx, qword ptr [rbx] mov rdi, rcx test dword ptr [rdi], 0xD1FFAB1E jne SHORT G_M47667_IG04 mov rdi, rbx mov rcx, qword ptr [rcx+0x40] call [rcx+0x28]System.Buffers.MemoryManager`1[int]:GetSpan():System.Span`1[int]:this mov r13, rax mov r12d, edx jmp SHORT G_M47667_IG05 ;; size=32 bbWeight=0.50 PerfScore 7.00 G_M47667_IG04: lea r13, bword ptr [rbx+0x10] mov r12d, dword ptr [rbx+0x08] ;; size=8 bbWeight=0.50 PerfScore 1.25 G_M47667_IG05: mov edi, r14d and edi, 0xD1FFAB1E mov eax, dword ptr [rbp-0x40] mov esi, eax add rsi, rdi mov edx, r12d cmp rsi, rdx ja G_M47667_IG09 lea r13, bword ptr [r13+4*rdi] mov r12d, eax ;; size=37 bbWeight=0.50 PerfScore 2.88 G_M47667_IG06: mov rdi, r13 mov esi, r12d mov edx, r15d 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 mov dword ptr [rbp-0x3C], eax mov rdi, r13 mov esi, r12d mov edx, eax mov ecx, r15d 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 mov r15d, dword ptr [rbp-0x3C] mov edx, r15d mov edi, eax add rdx, rdi mov edi, dword ptr [rbp-0x40] cmp rdx, rdi ja SHORT G_M47667_IG08 add r15d, r14d mov edx, eax shl rdx, 32 mov edi, r15d or rdx, rdi mov rax, rbx ;; size=86 bbWeight=1 PerfScore 15.00 G_M47667_IG07: add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 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() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; 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) ; ============================================================
Bearbeitung
Datei öffnen
; 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 ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 8 single block inlinees; 3 inlinees without PGO data ; 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]> ; V01 arg1 [V01,T01] ( 4, 4 ) int -> r15 single-def ; V02 loc0 [V02,T05] ( 4, 4 ) int -> [rbp-0x3C] spill-single-def ; 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> ;* 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]> ;* 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" ; 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> ;* 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]> ;* 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]> ; 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" ;* 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[]> ; 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]> ;* 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 ) int -> zero-ref "Inlining Arg" ;* V23 tmp19 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object> ; V24 tmp20 [V24,T06] ( 2, 4 ) int -> r15 "Inlining Arg" ;* V25 tmp21 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._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 ) byref -> zero-ref "field V07._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 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V30 tmp26 [V30 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP ;* V31 tmp27 [V31 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-DEP ;* V32 tmp28 [V32 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-DEP ; V33 tmp29 [V33,T13] ( 2, 1 ) byref -> r13 "field V14._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 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP ;* V36 tmp32 [V36 ] ( 0, 0 ) int -> zero-ref "field V20._length (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._index (fldOffset=0x8)" P-INDEP ;* V39 tmp35 [V39 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP ; V40 tmp36 [V40,T00] ( 8, 6 ) ref -> rbx single-def "V00.[000..008) V00.rdi" ; V41 tmp37 [V41,T07] ( 4, 3.50) int -> r14 "V00.[008..012) V00.rsi" ; 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 G_M47667_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 24 lea rbp, [rsp+0x40] mov gword ptr [rbp-0x38], rdi mov qword ptr [rbp-0x30], rsi mov rbx, rdi mov r14d, esi mov r15d, edx ;; size=36 bbWeight=1 PerfScore 9.50 G_M47667_IG02: xor r13, r13 xor r12d, r12d mov eax, dword ptr [rbp-0x2C] mov dword ptr [rbp-0x40], eax test rbx, rbx je SHORT G_M47667_IG06 ;; size=17 bbWeight=1 PerfScore 3.75 G_M47667_IG03: mov rcx, qword ptr [rbx] mov rdi, rcx test dword ptr [rdi], 0xD1FFAB1E jne SHORT G_M47667_IG04 mov rdi, rbx mov rcx, qword ptr [rcx+0x40] call [rcx+0x28]System.Buffers.MemoryManager`1[int]:GetSpan():System.Span`1[int]:this mov r13, rax mov r12d, edx jmp SHORT G_M47667_IG05 ;; size=32 bbWeight=0.50 PerfScore 7.00 G_M47667_IG04: lea r13, bword ptr [rbx+0x10] mov r12d, dword ptr [rbx+0x08] ;; size=8 bbWeight=0.50 PerfScore 1.25 G_M47667_IG05: mov edi, r14d and edi, 0xD1FFAB1E mov eax, dword ptr [rbp-0x40] mov esi, eax add rsi, rdi mov edx, r12d cmp rsi, rdx ja SHORT G_M47667_IG08 lea r13, bword ptr [r13+4*rdi] mov r12d, eax ;; size=33 bbWeight=0.50 PerfScore 2.88 G_M47667_IG06: mov rdi, r13 mov esi, r12d mov edx, r15d 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 mov dword ptr [rbp-0x3C], eax mov rdi, r13 mov esi, r12d mov edx, eax mov ecx, r15d 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 mov r15d, dword ptr [rbp-0x3C] mov edx, r15d mov ecx, eax add rdx, rcx mov ecx, dword ptr [rbp-0x40] cmp rdx, rcx ja SHORT G_M47667_IG08 add r15d, r14d mov edx, eax shl rdx, 32 mov ecx, r15d or rdx, rcx mov rax, rbx ;; size=86 bbWeight=1 PerfScore 15.00 G_M47667_IG07: add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 G_M47667_IG08: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0.50 PerfScore 1.75 ; 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) ; ============================================================
Unterschied finden