Diff
checker
Testo
Testo
Immagini
Documenti
Excel
Cartelle
Legal
Enterprise
Applicazione per desktop
Prezzi
Accedi
Scarica Diffchecker Desktop
Confronta il testo
Trova la differenza tra due file di testo
Strumenti
Cronologia
Editor live
Comprimi invariate
Senza a capo
Layout
Diviso
Unificato
Livello di dettaglio
Intelligente
Parola
Carattere
Evidenziazione sintassi
Scegli sintassi
Ignora
Trasforma testo
Vai alla prima modifica
Modifica input
Diffchecker Desktop
Il modo più sicuro per usare Diffchecker. Ottieni l'app Diffchecker Desktop: i tuoi diff non lasciano mai il tuo computer!
Ottieni Desktop
Untitled Diff
Creato
3 anni fa
Il diff non scade mai
Eliminare
Esporta
Condividere
Spiegare
314 rimozioni
Linee
Totale
Rimosso
Caratteri
Totale
Rimosso
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
228 linee
Copia tutti
401 aggiunte
Linee
Totale
Aggiunto
Caratteri
Totale
Aggiunto
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
276 linee
Copia tutti
Copia
Copiato
Copia
Copiato
; Assembly listing for method
PromiseBenchmarks:PromiseField():this
; Assembly listing for method
Program+
PromiseBenchmarks:PromiseField():this
(Tier1)
; Emitting BLENDED_CODE for X64
CPU
with AVX - Windows
; Emitting BLENDED_CODE for X64
with AVX - Windows
; Tier
-1 compilation
; Tier
1 code
; optimized code
; optimized code
; rsp based frame
; rsp based frame
; partially interruptible
; partially interruptible
; No PGO data
; No PGO data
Copia
Copiato
Copia
Copiato
;
0
inlinees with PGO data;
25
single block inlinees;
3
inlinees without PGO data
;
3
inlinees with PGO data;
27
single block inlinees;
5
inlinees without PGO data
; Final local variable assignments
; Final local variable assignments
;
;
Copia
Copiato
Copia
Copiato
; V00 this [V00,T0
5
] (
3
,
3
) ref ->
rsi
this class-hnd single-def
; V00 this [V00,T0
3
] (
6
,
6
) ref ->
rbx
this class-hnd single-def
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op
Copia
Copiato
Copia
Copiato
; V02 OutArgs [V02 ] ( 1, 1 )
lclBlk
(32) [rsp+00H]
"OutgoingArgSpace"
; V02 OutArgs [V02 ] ( 1, 1 )
struct
(32) [rsp+00H]
do-not-enreg[XS] addr-exposed
"OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp"
Copia
Copiato
Copia
Copiato
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd
"Inline stloc first use temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd
single-def
"Inline stloc first use temp"
; V05 tmp3 [V05,T1
1
] ( 2, 4 ) int ->
rdi
"impAppendStmt"
; V05 tmp3 [V05,T1
3
] ( 2, 4 ) int ->
rbp
"impAppendStmt"
;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref
"NewObj constructor temp"
;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref
ld-addr-op
"NewObj constructor temp"
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill"
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill"
Copia
Copiato
Copia
Copiato
; V08 tmp6 [V08,T01] ( 10, 9 ) ref ->
rbx
class-hnd "Inline return value spill temp"
; V08 tmp6 [V08,T01] ( 10, 9 ) ref ->
rdi
class-hnd "Inline return value spill temp"
; V09 tmp7 [V09,T1
7
] ( 3, 2.50) ref ->
rbx
class-hnd
"Inline stloc first use temp"
; V09 tmp7 [V09,T1
9
] ( 3, 2.50) ref ->
rdi
class-hnd
single-def
"Inline stloc first use temp"
; V10 tmp8 [V10,T0
7
] ( 4, 4 ) ref ->
rbx
class-hnd exact single-def "NewObj constructor temp"
; V10 tmp8 [V10,T0
8
] ( 4, 4 ) ref ->
rdi
class-hnd exact single-def "NewObj constructor temp"
;
V11 tmp9 [V11
,T18
] (
2
,
2
) ref ->
rbx
class-hnd
single-def
"Inline return value spill temp"
;
*
V11 tmp9 [V11
] (
0
,
0
) ref ->
zero-ref
class-hnd
"Inline return value spill temp"
; V12 tmp10 [V12,T00] (
6, 12
) byref -> r
d
i single-def "Inlining Arg"
; V12 tmp10 [V12,T00] (
5, 10
) byref -> r
s
i single-def "Inlining Arg"
; V13 tmp11 [V13,T1
6
] ( 3, 3 ) ref ->
rbx
class-hnd
"Inline stloc first use temp"
; V13 tmp11 [V13,T1
7
] ( 3, 3 ) ref ->
rdi
class-hnd
single-def
"Inline stloc first use temp"
; V14 tmp12 [V14,T0
6
] ( 3, 5 ) byref -> rcx single-def "Inlining Arg"
; V14 tmp12 [V14,T0
7
] ( 3, 5 ) byref -> rcx single-def "Inlining Arg"
;
V15 tmp13 [V15
,T09
] (
2
,
4
) byref ->
rdi
single-d
ef
"Inlining Arg
"
;
*
V15 tmp13 [V15
] (
0
,
0
) byref ->
zero-ref "Inlining Arg"
; V1
6
tmp1
4
[V1
6,T08
] ( 4, 4 ) struct ( 8) [rsp+2
0
H] do-not-enreg[SF]
overlapping-fields
"NewObj constructor temp"
;* V16 tmp14
[V16 ] ( 0, 0 ) ref -> zero-r
ef
class-hnd "updating class info
"
;
V1
7
tmp1
5
[V1
7,T12
] (
2
,
4
) short ->
rdi
"Inlining Arg"
; V1
7
tmp1
5
[V1
7,T10
] ( 4, 4 ) struct ( 8) [rsp+2
8
H] do-not-enreg[SF]
ld-addr-op
"NewObj constructor temp"
; V1
8
tmp1
6
[V1
8
,T1
3
] ( 2, 4 ) int ->
rbp
"Inlining Arg"
;
*
V1
8
tmp1
6
[V1
8
] (
0
,
0
) short ->
zero-ref
"Inlining Arg"
;
V19
tmp1
7
[
V19
,T0
3
] ( 3, 6 ) byref -> rdx single-def "Inlining Arg"
; V1
9
tmp1
7
[V1
9
,T1
4
] ( 2, 4 ) int ->
r14
"Inlining Arg"
;* V2
0
tmp1
8
[V2
0
] ( 0, 0 ) struct (16) zero-ref
"NewObj constructor temp"
;
V20
tmp1
8
[
V20
,T0
4
] ( 3, 6 ) byref -> rdx single-def "Inlining Arg"
; V2
1 tmp19
[V2
1
,T1
0
] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg"
;* V2
1
tmp1
9
[V2
1
] ( 0, 0 ) struct (16) zero-ref
ld-addr-op
"NewObj constructor temp"
; V2
2
tmp2
0
[V2
2
,T1
4
] ( 2, 4 ) short -> rdx "Inlining Arg"
; V2
2 tmp20
[V2
2
,T1
1
] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg"
; V2
3
tmp2
1
[V2
3
,T1
5
] ( 4, 3 ) ref -> rcx class-hnd
"Inline stloc first use temp"
; V2
3
tmp2
1
[V2
3
,T1
5
] ( 2, 4 ) short -> rdx "Inlining Arg"
;
*
V2
4
tmp2
2
[V2
4
] (
0
,
0
)
ref ->
zero-ref
single-def
V01._
ref
(offs=0x00) P-INDEP "field V01._r
ef
(fldOffset=0x0)
"
; V2
4
tmp2
2
[V2
4
,T1
6
] ( 4, 3 ) ref -> rcx class-hnd
single-def
"Inline stloc first use temp"
; V25 tmp23 [V25,T26] ( 2, 1.50) short -> rdx single-def V01._id(offs=0x08) P-INDEP "field V01._id (fldOffset=0x8)"
;
V2
5
tmp2
3
[V2
5,T05
] (
3
,
6
)
by
ref ->
rdx
single-def
"Inlining Arg"
;* V
26 tmp24
[V
26
] ( 0, 0 )
ushort
-> zero-ref
single-def V01._depth(offs=0x0a) P-INDEP
"field V01._
depth
(fldOffset=0x
a)"
; V26 tmp24 [V26,T12] ( 2, 4 )
ref
-> rdi class-hnd single-d
ef
"dup spill
"
;
V27
tmp
25
[
V27,T19
] ( 2,
2
)
ref
-> rdx single-def
V03._ref(offs=0x00)
P-INDEP
"field V0
3._ref
(fldOffset=0x
0)"
; V27 tmp25 [V27,T06] ( 6, 5.50) ref -> rdi single-def
; V28 tmp26
[
V28,T21
] (
2
,
2
)
int
->
rbp
single-def
V03._
deferredId(offs
=0x0
8)
P-INDEP
"field V03._deferredId (fldOffset=0x8)"
; V28 tmp26 [V28,T25] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp"
; V29 tmp27
[
V29,T22
] (
2
,
2
) short ->
rdi single-def V03._promiseId(offs=0x0c) P-INDEP
"field V03._promiseId (fldOffset=0xc)"
; V29 tmp27 [V29,T02] ( 5, 9 ) ref -> rcx class-hnd "Inlining Arg"
; V3
0 tmp28
[V3
0
,T20] ( 2, 2 ) ref -> rdx single-def
V06._ref(offs=0x00) P-INDEP
"field V06._ref (fldOffset=0x0)"
;* V30 tmp28 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg"
;
V31 tmp29
[
V31
,T2
3
] ( 2, 2 ) int ->
rbp
single-def
V06._deferredId(offs=0x08) P-INDEP
"field V06._deferredId (fldOffset=0x8)"
;* V31 tmp29 [V31 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;
V32
tmp3
0
[
V32
,T2
4
] ( 2, 2 ) short ->
rdi
single-def
V06._promiseId(offs=0x0c) P-INDEP
"field V06._promiseId (fldOffset=0xc)"
;* V
32 tmp30
[V
32
] ( 0, 0 )
ref
-> zero-ref
class-hnd "updating class info"
;*
V33 tmp31
[
V33
] ( 0, 0 ) ref -> zero-ref
V20._ref(offs=0x00) P-INDEP
"field V2
0
._ref (fldOffset=0x0)"
;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref single-def
"field V01._
ref
(fldOffset=0x
0)" P-INDEP
; V
34 tmp32
[V
34
,T2
5
] ( 2, 2 ) short -> rdx
V20._id(offs=0x08) P-INDEP
"field V2
0
._id (fldOffset=0x8)"
;
V34
tmp
32
[
V34,T24
] ( 2,
1.50
)
short
-> rdx single-def
"field V01._id (fldOffset=0x8)"
P-INDEP
;*
V35 tmp33
[
V35
] ( 0, 0 ) ushort -> zero-ref
V20._depth(offs=0x0a) P-INDEP
"field V2
0
._depth (fldOffset=0xa)"
;* V35 tmp33 [V35 ] ( 0, 0 ) ushort -> zero-ref
"field V0
1._depth
(fldOffset=0x
a)" P-INDEP
;
V36
tmp
34
[
V36,T02
] (
4
,
8
)
by
ref -> r
b
x single-def "
BlockOp address local"
;* V36 tmp34
[
V36
] (
0
,
0
)
ref
->
zero-ref
"field
V03._
ref (fldOffset
=0x0
)"
P-INDEP
; V
3
7 cse
0
[V
3
7,T0
4
] (
5
,
5
) byref ->
rsi
"CSE -
aggressive
"
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref
"field V03._deferredId (fldOffset=0x8)"
P-INDEP
;* V38 tmp36
[
V38
] (
0
,
0
) short ->
zero-ref
"field V03._promiseId (fldOffset=0xc)"
P-INDEP
; V3
9 tmp37
[V3
9
,T20] ( 2, 2 ) ref -> rdx single-def
"field V06._ref (fldOffset=0x0)"
P-INDEP
;
V40 tmp38
[
V40
,T2
1
] ( 2, 2 ) int ->
r14
single-def
"field V06._deferredId (fldOffset=0x8)"
P-INDEP
;
V41
tmp3
9
[
V41
,T2
2
] ( 2, 2 ) short ->
rbp
single-def
"field V06._promiseId (fldOffset=0xc)"
P-INDEP
;*
V42 tmp40
[
V42
] ( 0, 0 ) ref -> zero-ref
single-def
"field V2
1
._ref (fldOffset=0x0)"
P-INDEP
; V
43 tmp41
[V
43
,T2
3
] ( 2, 2 ) short -> rdx
single-def
"field V2
1
._id (fldOffset=0x8)"
P-INDEP
;*
V44 tmp42
[
V44
] ( 0, 0 ) ushort -> zero-ref
single-def
"field V2
1
._depth (fldOffset=0xa)"
P-INDEP
;
V45
tmp
43
[
V45,T26
] (
2
,
0
)
ref -> r
d
x single-def "
argument with side effect"
; V46 cse0 [V46,T18] ( 3, 3 ) ref -> rsi "CSE - moderate"
; V
4
7 cse
1
[V
4
7,T0
9
] (
4
,
4
) byref ->
rbx
"CSE -
moderate
"
;
;
Copia
Copiato
Copia
Copiato
; Lcl frame size =
40
; Lcl frame size =
48
Copia
Copiato
Copia
Copiato
G_
M16091
_IG01:
G_
M29380
_IG01:
push r14
push rdi
push rdi
push rsi
push rsi
push rbp
push rbp
push rbx
push rbx
Copia
Copiato
Copia
Copiato
sub rsp,
40
sub rsp,
48
vzeroupper
mov
rbx
, rcx
mov
rsi
, rcx
;;
size=13
bbWeight=1
PerfScore 5.50
;;
bbWeight=1
PerfScore 5.50
G_
M29380
_IG02:
G_
M16091
_IG02:
mov rcx, 0xD1FFAB1E
; box for Proto.Promises.Internal+ObjectPool+Type`1[Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]]:s_pool
mov rcx, 0xD1FFAB1E
mov r
s
i, gword ptr [rcx]
mov r
d
i, gword ptr [rcx]
add r
s
i, 8
add r
d
i, 8
lea rcx, bword ptr [r
si+08H
]
cmp dword ptr [rdi], edi
lea rcx, bword ptr [r
di+8
]
lock
lock
or dword ptr [rsp], 0
or dword ptr [rsp], 0
mov eax, 1
mov eax, 1
xchg dword ptr [rcx], eax
xchg dword ptr [rcx], eax
cmp eax, 1
cmp eax, 1
Copia
Copiato
Copia
Copiato
jne SHORT G_
M16091
_IG04
jne SHORT G_
M29380
_IG04
;;
bbWeight=1
PerfScore
46
.50
;;
size=38
bbWeight=1
PerfScore
40
.50
G_
M16091
_IG03:
G_
M29380
_IG03:
call
SpinLocker:EnterCore():this
call
[Proto.Promises.Internal+
SpinLocker:EnterCore():this
]
;;
bbWeight=0.50 PerfScore
0
.50
;;
size=6
bbWeight=0.50 PerfScore
1
.50
G_
M16091
_IG04:
G_
M29380
_IG04:
mov
rbx
, gword ptr [r
d
i]
mov
rdi
, gword ptr [r
s
i]
mov rdx, gword ptr [
rbx+8
]
mov rdx, gword ptr [
rdi+08H
]
mov rcx, r
d
i
mov rcx, r
s
i
call CORINFO_HELP_CHECKED_ASSIGN_REF
call CORINFO_HELP_CHECKED_ASSIGN_REF
Copia
Copiato
Copia
Copiato
add rdi, 8
xor ecx, ecx
xor ecx, ecx
Copia
Copiato
Copia
Copiato
mov dword ptr [r
di
], ecx
mov dword ptr [r
si+08H
], ecx
mov rcx, 0xD1FFAB1E
mov rcx, 0xD1FFAB1E
; const ptr
cmp
rbx
, gword ptr [rcx]
cmp
rdi
, gword ptr [rcx]
je SHORT G_
M16091
_IG06
je SHORT G_
M29380
_IG06
;;
bbWeight=1
PerfScore 10.
00
;;
size=35
bbWeight=1
PerfScore 10.
75
G_
M16091
_IG05:
G_
M29380
_IG05:
jmp SHORT G_
M16091
_IG0
7
jmp SHORT G_
M29380
_IG0
8
;;
bbWeight=0.50 PerfScore 1.00
;;
size=2
bbWeight=0.50 PerfScore 1.00
G_
M16091
_IG06:
G_
M29380
_IG06:
mov rcx, 0xD1FFAB1E
mov rcx, 0xD1FFAB1E
; Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]
call CORINFO_HELP_NEWFAST
call CORINFO_HELP_NEWFAST
Copia
Copiato
Copia
Copiato
mov
rbx
, rax
mov
rdi
, rax
xor e
d
x, e
d
x
xor e
c
x, e
c
x
mov qword ptr [rsp+2
0
H], r
d
x
mov qword ptr [rsp+2
8
H], r
c
x
mov dword ptr [rsp+2
0
H], 1
mov dword ptr [rsp+2
8
H], 1
vxorps
xmm0, xmm0
;; size=33 bbWeight=0.50 PerfScore 1.88
v
mov
ss
dword ptr [rsp+2
4
H],
xmm0
G_M29380_IG07:
mov r
d
x, qword ptr [rsp+2
0
H]
mov
dword ptr [rsp+2
C
H],
ecx
mov qword ptr [
rbx+40
], r
d
x
mov r
c
x, qword ptr [rsp+2
8
H]
mov word ptr [
rbx+24
], 1
mov qword ptr [
rdi+28H
], r
c
x
;;
bbWeight=0.50 PerfScore
3.79
mov word ptr [
rdi+18H
], 1
G_
M16091
_IG0
7
:
;;
size=19
bbWeight=0.50 PerfScore
2.00
mov r
d
x, 0xD1FFAB1E
G_
M29380
_IG0
8
:
mov
rdx
, gword ptr [r
d
x]
mov r
c
x, 0xD1FFAB1E
; const ptr
lea rcx, bword ptr [
rbx+8]
mov
rsi
, gword ptr [r
c
x]
lea rcx, bword ptr [
rdi+08H]
mov rdx, rsi
call CORINFO_HELP_ASSIGN_REF
call CORINFO_HELP_ASSIGN_REF
Copia
Copiato
Copia
Copiato
mov byte ptr [
rbx+28
], 0
mov byte ptr [
rdi+1CH
], 0
mov byte ptr [
rbx+30
], 0
mov byte ptr [
rdi+1EH
], 0
mov byte ptr [
rbx+29
], 0
mov byte ptr [
rdi+1DH
], 0
xor e
d
x, e
d
x
xor e
c
x, e
c
x
mov dword ptr [
rbx+44
], e
d
x
mov dword ptr [
rdi+2CH
], e
c
x
movsx
rdi
, word ptr [
rbx+24
]
movsx
rbp
, word ptr [
rdi+18H
]
mov
ebp
, dword ptr
[rbx+40]
mov
r14d
, dword ptr
[rdi+28H]
mov rdx, rdi
lea rcx, bword ptr [rbx+08H]
call CORINFO_HELP_ASSIGN_REF
mov dword ptr [rbx+10H], r14d
mov word ptr [rbx+14H], bp
add rbx, 8
mov rdx, rbx
mov rdx, rbx
Copia
Copiato
Copia
Copiato
add rsi, 8
mov rbx, rsi
mov rcx, rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+8], ebp
mov word ptr [rbx+12], di
mov rdx, rsi
mov rcx, gword ptr [rdx]
mov rcx, gword ptr [rdx]
Copia
Copiato
Copia
Copiato
movsx rdx, word ptr [rdx+
12
]
movsx rdx, word ptr [rdx+
0CH
]
test rcx, rcx
test rcx, rcx
Copia
Copiato
Copia
Copiato
je SHORT G_
M16091
_IG
09
je SHORT G_
M29380
_IG
10
;;
bbWeight=1
PerfScore
21.50
;;
size=91
bbWeight=1
PerfScore
25.75
G_
M16091
_IG0
8
:
G_
M29380
_IG0
9
:
movsx rdx, dx
movsx rdx, dx
mov rax, qword ptr [rcx]
mov rax, qword ptr [rcx]
Copia
Copiato
Copia
Copiato
mov rax, qword ptr [rax+
80
]
mov rax, qword ptr [rax+
50H
]
call
qword ptr
[rax+
40]
PromiseRefBase:Forget(short):this
call
[rax+
28H]Proto.Promises.Internal+
PromiseRefBase:Forget(short):this
;;
bbWeight=0.50 PerfScore 3.62
;;
size=14
bbWeight=0.50 PerfScore 3.62
G_M16091_IG09:
G_M29380_IG10:
mov rcx, rsi
mov rdx, rbx
call Deferred:Resolve()
:this
mov rdi, gword ptr [rdx]
xor eax, eax
mov edx, dword ptr [rdx+08H]
mov qword ptr [rsi], rax
mov rcx, rdi
mov qword ptr [
rsi+8
], r
a
x
mov rax, qword ptr [rdi]
;;
bbWeight=1
PerfScore
3.50
mov rax, qword ptr [rax+58H]
G_
M16091
_IG1
0
:
call [rax+30H]Proto.Promises.Internal+PromiseRefBase+DeferredPromiseBase`1[Proto.Promises.Internal+VoidResult]:TryIncrementDeferredIdAndUnregisterCancelation(int):bool
:this
add rsp,
40
test eax, eax
je SHORT G_M29380_IG14
mov rcx, gword ptr [rdi+08H]
cmp rcx, rsi
je SHORT G_M29380_IG12
;; size=35 bbWeight=1 PerfScore 16.00
G_M29380_IG11:
lea rcx, bword ptr [rdi+08H]
mov rdx, 0xD1FFAB1E ; const ptr
mov rdx, gword ptr [rdx]
call System.Threading.Interlocked:Exchange(byref,System.Object):System.Object
mov rcx, rax
;; size=25 bbWeight=0.50 PerfScore 2.00
G_M29380_IG12:
mov rdx, rdi
xor r8, r8
mov r9d, 1
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax+40H]
call [rax+30H]Proto.Promises.Internal+HandleablePromiseBase:Handle(Proto.Promises.Internal+PromiseRefBase,System.Object,ubyte):this
xor ecx, ecx
mov qword ptr [rbx], rcx
mov qword ptr [
rbx+08H
], r
c
x
;;
size=31
bbWeight=1
PerfScore
10.00
G_
M29380
_IG1
3
:
add rsp,
48
pop rbx
pop rbx
pop rbp
pop rbp
pop rsi
pop rsi
pop rdi
pop rdi
Copia
Copiato
Copia
Copiato
pop r14
ret
ret
Copia
Copiato
Copia
Copiato
;;
bbWeight=1
PerfScore 3.
25
;;
size=11
bbWeight=1
PerfScore 3.
75
G_M29380_IG14:
mov rcx, 0xD1FFAB1E ; Proto.Promises.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov ecx, 0x247A
mov rdx, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdx, rax
mov rcx, rbx
xor r8, r8
call [Proto.Promises.InvalidOperationException:.ctor(System.String,System.String):this]
mov rcx, rbx
call CORINFO_HELP_THROW
int3
;; size=62 bbWeight=0 PerfScore 0.00
Copia
Copiato
Copia
Copiato
; Total bytes of code
285
, prolog size
11
, PerfScore
127.87
, instruction count
79
, allocated bytes for code
287
(MethodHash=
84cbc124
) for method
PromiseBenchmarks:PromiseField():this
; Total bytes of code
415
, prolog size
10
, PerfScore
165.75
, instruction count
111
, allocated bytes for code
415
(MethodHash=
b71e8d3b
) for method
Program+
PromiseBenchmarks:PromiseField():this
(Tier1)
; ============================================================
; ============================================================
Copia
Copiato
Copia
Copiato
; Assembly listing for method
DeferredPromise`1
:MaybeDispose():this
; Assembly listing for method
Proto.Promises.Internal+PromiseRefBase+
DeferredPromise`1
[Proto.Promises.Internal+VoidResult]
:MaybeDispose():this
(Tier1)
; Emitting BLENDED_CODE for X64
CPU
with AVX - Windows
; Emitting BLENDED_CODE for X64
with AVX - Windows
; Tier
-1 compilation
; Tier
1 code
; optimized code
; optimized code
; rsp based frame
; rsp based frame
; partially interruptible
; partially interruptible
; No PGO data
; No PGO data
Copia
Copiato
Copia
Copiato
;
0
inlinees with PGO data;
6
single block inlinees; 2 inlinees without PGO data
;
1
inlinees with PGO data;
5
single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
; Final local variable assignments
;
;
Copia
Copiato
Copia
Copiato
; V00 this [V00,T00] ( 7, 5.50) ref ->
rsi
this class-hnd single-def
; V00 this [V00,T00] ( 7, 5.50) ref ->
rbx
this class-hnd single-def
; V01 OutArgs [V01 ] ( 1, 1 )
lclBlk
(32) [rsp+00H]
"OutgoingArgSpace"
; V01 OutArgs [V01 ] ( 1, 1 )
struct
(32) [rsp+00H]
do-not-enreg[XS] addr-exposed
"OutgoingArgSpace"
; V02 tmp1 [V02,T01] (
6
,
6
) byref -> r
d
i single-def "Inlining Arg"
; V02 tmp1 [V02,T01] (
5
,
5
) byref -> r
s
i single-def "Inlining Arg"
; V03 tmp2 [V03,T02] ( 3, 3 ) byref -> rcx single-def "Inlining Arg"
; V03 tmp2 [V03,T02] ( 3, 3 ) byref -> rcx single-def "Inlining Arg"
Copia
Copiato
Copia
Copiato
;
V04 tmp3 [V04
,T03
] (
2
,
2
) byref ->
rdi
single-def
"Inlining Arg"
;
*
V04 tmp3 [V04
] (
0
,
0
) byref ->
zero-ref
"Inlining Arg"
;
;
; Lcl frame size = 40
; Lcl frame size = 40
Copia
Copiato
Copia
Copiato
G_
M10933
_IG01:
G_
M14430
_IG01:
push rdi
push rsi
push rsi
Copia
Copiato
Copia
Copiato
push rbx
sub rsp, 40
sub rsp, 40
Copia
Copiato
Copia
Copiato
mov
rsi
, rcx
mov
rbx
, rcx
;;
bbWeight=1
PerfScore 2.50
;;
size=9
bbWeight=1
PerfScore 2.50
G_
M10933
_IG02:
G_
M14430
_IG02:
mov rcx,
rsi
mov rcx,
rbx
call
PromiseRefBase:Dispose():this
call
[Proto.Promises.Internal+
PromiseRefBase:Dispose():this
]
mov byte ptr [
rsi+32
], 0
mov byte ptr [
rbx+20H
], 0
cmp byte ptr [
reloc
classVar[0xd1ffab1e]
], 0
cmp byte ptr [
(
reloc
)
], 0
; data for Proto.Promises.Promise+Config:s_objectPoolingEnabled
je SHORT G_
M10933
_IG06
je SHORT G_
M14430
_IG06
;;
bbWeight=1
PerfScore
4
.25
;;
size=22
bbWeight=1
PerfScore
8
.25
G_
M10933
_IG03:
G_
M14430
_IG03:
mov rcx, 0xD1FFAB1E
mov rcx, 0xD1FFAB1E
; box for Proto.Promises.Internal+ObjectPool+Type`1[Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]]:s_pool
mov r
d
i, gword ptr [rcx]
mov r
s
i, gword ptr [rcx]
add r
d
i, 8
add r
s
i, 8
cmp dword ptr [rdi], edi
lea rcx, bword ptr [r
si+08H
]
lea rcx, bword ptr [r
di+8
]
lock
lock
or dword ptr [rsp], 0
or dword ptr [rsp], 0
mov eax, 1
mov eax, 1
xchg dword ptr [rcx], eax
xchg dword ptr [rcx], eax
cmp eax, 1
cmp eax, 1
Copia
Copiato
Copia
Copiato
jne SHORT G_
M10933
_IG04
jne SHORT G_
M14430
_IG04
call
SpinLocker:EnterCore():this
call
[Proto.Promises.Internal+
SpinLocker:EnterCore():this
]
;;
bbWeight=0.50 PerfScore
23
.75
;;
size=44
bbWeight=0.50 PerfScore
21
.75
G_
M10933
_IG04:
G_
M14430
_IG04:
mov rdx, gword ptr [r
d
i]
mov rdx, gword ptr [r
s
i]
lea rcx, bword ptr [
rsi+8
]
lea rcx, bword ptr [
rbx+08H
]
call CORINFO_HELP_ASSIGN_REF
call CORINFO_HELP_ASSIGN_REF
Copia
Copiato
Copia
Copiato
mov rcx, r
d
i
mov rcx, r
s
i
mov rdx,
rsi
mov rdx,
rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
call CORINFO_HELP_CHECKED_ASSIGN_REF
Copia
Copiato
Copia
Copiato
add rdi, 8
xor ecx, ecx
xor ecx, ecx
Copia
Copiato
Copia
Copiato
mov dword ptr [r
di
], ecx
mov dword ptr [r
si+08H
], ecx
;;
bbWeight=0.50 PerfScore 3.
25
;;
size=28
bbWeight=0.50 PerfScore 3.
12
G_
M10933
_IG05:
G_
M14430
_IG05:
add rsp, 40
add rsp, 40
Copia
Copiato
Copia
Copiato
pop rbx
pop rsi
pop rsi
Copia
Copiato
Copia
Copiato
pop rdi
ret
ret
Copia
Copiato
Copia
Copiato
;;
bbWeight=0.50 PerfScore 1.12
;;
size=7
bbWeight=0.50 PerfScore 1.12
G_
M10933
_IG06:
G_
M14430
_IG06:
mov rcx,
rsi
mov rcx,
rbx
;;
bbWeight=0.50 PerfScore 0.12
;;
size=3
bbWeight=0.50 PerfScore 0.12
G_
M10933
_IG07:
G_
M14430
_IG07:
add rsp, 40
add rsp, 40
Copia
Copiato
Copia
Copiato
pop rbx
pop rsi
pop rsi
Copia
Copiato
Copia
Copiato
pop rdi
tail.
jmp
[System.
GC:SuppressFinalize(
System.
Object)
]
jmp
GC:SuppressFinalize(
Object)
;;
size=12
bbWeight=0.50 PerfScore 1.62
;;
bbWeight=0.50 PerfScore 1.62
Copia
Copiato
Copia
Copiato
; Total bytes of code 12
7
, prolog size 6, PerfScore
49.33
, instruction count
39
, allocated bytes for code 12
7
(MethodHash=
09b7d54a
) for method
DeferredPromise`1
:MaybeDispose():this
; Total bytes of code 12
5
, prolog size 6, PerfScore
51.00
, instruction count
37
, allocated bytes for code 12
5
(MethodHash=
9701c7a1
) for method
Proto.Promises.Internal+PromiseRefBase+
DeferredPromise`1
[Proto.Promises.Internal+VoidResult]
:MaybeDispose():this
(Tier1)
; ============================================================
; ============================================================
Diff salvati
Testo originale
Apri file
; Assembly listing for method PromiseBenchmarks:PromiseField():this ; Emitting BLENDED_CODE for X64 CPU with AVX - Windows ; Tier-1 compilation ; optimized code ; rsp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 25 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T05] ( 3, 3 ) ref -> rsi this class-hnd single-def ;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ; V02 OutArgs [V02 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" ; V05 tmp3 [V05,T11] ( 2, 4 ) int -> rdi "impAppendStmt" ;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref "NewObj constructor temp" ;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" ; V08 tmp6 [V08,T01] ( 10, 9 ) ref -> rbx class-hnd "Inline return value spill temp" ; V09 tmp7 [V09,T17] ( 3, 2.50) ref -> rbx class-hnd "Inline stloc first use temp" ; V10 tmp8 [V10,T07] ( 4, 4 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ; V11 tmp9 [V11,T18] ( 2, 2 ) ref -> rbx class-hnd single-def "Inline return value spill temp" ; V12 tmp10 [V12,T00] ( 6, 12 ) byref -> rdi single-def "Inlining Arg" ; V13 tmp11 [V13,T16] ( 3, 3 ) ref -> rbx class-hnd "Inline stloc first use temp" ; V14 tmp12 [V14,T06] ( 3, 5 ) byref -> rcx single-def "Inlining Arg" ; V15 tmp13 [V15,T09] ( 2, 4 ) byref -> rdi single-def "Inlining Arg" ; V16 tmp14 [V16,T08] ( 4, 4 ) struct ( 8) [rsp+20H] do-not-enreg[SF] overlapping-fields "NewObj constructor temp" ; V17 tmp15 [V17,T12] ( 2, 4 ) short -> rdi "Inlining Arg" ; V18 tmp16 [V18,T13] ( 2, 4 ) int -> rbp "Inlining Arg" ; V19 tmp17 [V19,T03] ( 3, 6 ) byref -> rdx single-def "Inlining Arg" ;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref "NewObj constructor temp" ; V21 tmp19 [V21,T10] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg" ; V22 tmp20 [V22,T14] ( 2, 4 ) short -> rdx "Inlining Arg" ; V23 tmp21 [V23,T15] ( 4, 3 ) ref -> rcx class-hnd "Inline stloc first use temp" ;* V24 tmp22 [V24 ] ( 0, 0 ) ref -> zero-ref single-def V01._ref(offs=0x00) P-INDEP "field V01._ref (fldOffset=0x0)" ; V25 tmp23 [V25,T26] ( 2, 1.50) short -> rdx single-def V01._id(offs=0x08) P-INDEP "field V01._id (fldOffset=0x8)" ;* V26 tmp24 [V26 ] ( 0, 0 ) ushort -> zero-ref single-def V01._depth(offs=0x0a) P-INDEP "field V01._depth (fldOffset=0xa)" ; V27 tmp25 [V27,T19] ( 2, 2 ) ref -> rdx single-def V03._ref(offs=0x00) P-INDEP "field V03._ref (fldOffset=0x0)" ; V28 tmp26 [V28,T21] ( 2, 2 ) int -> rbp single-def V03._deferredId(offs=0x08) P-INDEP "field V03._deferredId (fldOffset=0x8)" ; V29 tmp27 [V29,T22] ( 2, 2 ) short -> rdi single-def V03._promiseId(offs=0x0c) P-INDEP "field V03._promiseId (fldOffset=0xc)" ; V30 tmp28 [V30,T20] ( 2, 2 ) ref -> rdx single-def V06._ref(offs=0x00) P-INDEP "field V06._ref (fldOffset=0x0)" ; V31 tmp29 [V31,T23] ( 2, 2 ) int -> rbp single-def V06._deferredId(offs=0x08) P-INDEP "field V06._deferredId (fldOffset=0x8)" ; V32 tmp30 [V32,T24] ( 2, 2 ) short -> rdi single-def V06._promiseId(offs=0x0c) P-INDEP "field V06._promiseId (fldOffset=0xc)" ;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref V20._ref(offs=0x00) P-INDEP "field V20._ref (fldOffset=0x0)" ; V34 tmp32 [V34,T25] ( 2, 2 ) short -> rdx V20._id(offs=0x08) P-INDEP "field V20._id (fldOffset=0x8)" ;* V35 tmp33 [V35 ] ( 0, 0 ) ushort -> zero-ref V20._depth(offs=0x0a) P-INDEP "field V20._depth (fldOffset=0xa)" ; V36 tmp34 [V36,T02] ( 4, 8 ) byref -> rbx single-def "BlockOp address local" ; V37 cse0 [V37,T04] ( 5, 5 ) byref -> rsi "CSE - aggressive" ; ; Lcl frame size = 40 G_M16091_IG01: push rdi push rsi push rbp push rbx sub rsp, 40 vzeroupper mov rsi, rcx ;; bbWeight=1 PerfScore 5.50 G_M16091_IG02: mov rcx, 0xD1FFAB1E mov rdi, gword ptr [rcx] add rdi, 8 cmp dword ptr [rdi], edi lea rcx, bword ptr [rdi+8] lock or dword ptr [rsp], 0 mov eax, 1 xchg dword ptr [rcx], eax cmp eax, 1 jne SHORT G_M16091_IG04 ;; bbWeight=1 PerfScore 46.50 G_M16091_IG03: call SpinLocker:EnterCore():this ;; bbWeight=0.50 PerfScore 0.50 G_M16091_IG04: mov rbx, gword ptr [rdi] mov rdx, gword ptr [rbx+8] mov rcx, rdi call CORINFO_HELP_CHECKED_ASSIGN_REF add rdi, 8 xor ecx, ecx mov dword ptr [rdi], ecx mov rcx, 0xD1FFAB1E cmp rbx, gword ptr [rcx] je SHORT G_M16091_IG06 ;; bbWeight=1 PerfScore 10.00 G_M16091_IG05: jmp SHORT G_M16091_IG07 ;; bbWeight=0.50 PerfScore 1.00 G_M16091_IG06: mov rcx, 0xD1FFAB1E call CORINFO_HELP_NEWFAST mov rbx, rax xor edx, edx mov qword ptr [rsp+20H], rdx mov dword ptr [rsp+20H], 1 vxorps xmm0, xmm0 vmovss dword ptr [rsp+24H], xmm0 mov rdx, qword ptr [rsp+20H] mov qword ptr [rbx+40], rdx mov word ptr [rbx+24], 1 ;; bbWeight=0.50 PerfScore 3.79 G_M16091_IG07: mov rdx, 0xD1FFAB1E mov rdx, gword ptr [rdx] lea rcx, bword ptr [rbx+8] call CORINFO_HELP_ASSIGN_REF mov byte ptr [rbx+28], 0 mov byte ptr [rbx+30], 0 mov byte ptr [rbx+29], 0 xor edx, edx mov dword ptr [rbx+44], edx movsx rdi, word ptr [rbx+24] mov ebp, dword ptr [rbx+40] mov rdx, rbx add rsi, 8 mov rbx, rsi mov rcx, rbx call CORINFO_HELP_CHECKED_ASSIGN_REF mov dword ptr [rbx+8], ebp mov word ptr [rbx+12], di mov rdx, rsi mov rcx, gword ptr [rdx] movsx rdx, word ptr [rdx+12] test rcx, rcx je SHORT G_M16091_IG09 ;; bbWeight=1 PerfScore 21.50 G_M16091_IG08: movsx rdx, dx mov rax, qword ptr [rcx] mov rax, qword ptr [rax+80] call qword ptr [rax+40]PromiseRefBase:Forget(short):this ;; bbWeight=0.50 PerfScore 3.62 G_M16091_IG09: mov rcx, rsi call Deferred:Resolve():this xor eax, eax mov qword ptr [rsi], rax mov qword ptr [rsi+8], rax ;; bbWeight=1 PerfScore 3.50 G_M16091_IG10: add rsp, 40 pop rbx pop rbp pop rsi pop rdi ret ;; bbWeight=1 PerfScore 3.25 ; Total bytes of code 285, prolog size 11, PerfScore 127.87, instruction count 79, allocated bytes for code 287 (MethodHash=84cbc124) for method PromiseBenchmarks:PromiseField():this ; ============================================================ ; Assembly listing for method DeferredPromise`1:MaybeDispose():this ; Emitting BLENDED_CODE for X64 CPU with AVX - Windows ; Tier-1 compilation ; optimized code ; rsp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 7, 5.50) ref -> rsi this class-hnd single-def ; V01 OutArgs [V01 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace" ; V02 tmp1 [V02,T01] ( 6, 6 ) byref -> rdi single-def "Inlining Arg" ; V03 tmp2 [V03,T02] ( 3, 3 ) byref -> rcx single-def "Inlining Arg" ; V04 tmp3 [V04,T03] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" ; ; Lcl frame size = 40 G_M10933_IG01: push rdi push rsi sub rsp, 40 mov rsi, rcx ;; bbWeight=1 PerfScore 2.50 G_M10933_IG02: mov rcx, rsi call PromiseRefBase:Dispose():this mov byte ptr [rsi+32], 0 cmp byte ptr [reloc classVar[0xd1ffab1e]], 0 je SHORT G_M10933_IG06 ;; bbWeight=1 PerfScore 4.25 G_M10933_IG03: mov rcx, 0xD1FFAB1E mov rdi, gword ptr [rcx] add rdi, 8 cmp dword ptr [rdi], edi lea rcx, bword ptr [rdi+8] lock or dword ptr [rsp], 0 mov eax, 1 xchg dword ptr [rcx], eax cmp eax, 1 jne SHORT G_M10933_IG04 call SpinLocker:EnterCore():this ;; bbWeight=0.50 PerfScore 23.75 G_M10933_IG04: mov rdx, gword ptr [rdi] lea rcx, bword ptr [rsi+8] call CORINFO_HELP_ASSIGN_REF mov rcx, rdi mov rdx, rsi call CORINFO_HELP_CHECKED_ASSIGN_REF add rdi, 8 xor ecx, ecx mov dword ptr [rdi], ecx ;; bbWeight=0.50 PerfScore 3.25 G_M10933_IG05: add rsp, 40 pop rsi pop rdi ret ;; bbWeight=0.50 PerfScore 1.12 G_M10933_IG06: mov rcx, rsi ;; bbWeight=0.50 PerfScore 0.12 G_M10933_IG07: add rsp, 40 pop rsi pop rdi jmp GC:SuppressFinalize(Object) ;; bbWeight=0.50 PerfScore 1.62 ; Total bytes of code 127, prolog size 6, PerfScore 49.33, instruction count 39, allocated bytes for code 127 (MethodHash=09b7d54a) for method DeferredPromise`1:MaybeDispose():this ; ============================================================
Testo modificato
Apri file
; Assembly listing for method Program+PromiseBenchmarks:PromiseField():this (Tier1) ; Emitting BLENDED_CODE for X64 with AVX - Windows ; Tier1 code ; optimized code ; rsp based frame ; partially interruptible ; No PGO data ; 3 inlinees with PGO data; 27 single block inlinees; 5 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T03] ( 6, 6 ) ref -> rbx this class-hnd single-def ;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" ; V05 tmp3 [V05,T13] ( 2, 4 ) int -> rbp "impAppendStmt" ;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" ; V08 tmp6 [V08,T01] ( 10, 9 ) ref -> rdi class-hnd "Inline return value spill temp" ; V09 tmp7 [V09,T19] ( 3, 2.50) ref -> rdi class-hnd single-def "Inline stloc first use temp" ; V10 tmp8 [V10,T08] ( 4, 4 ) ref -> rdi class-hnd exact single-def "NewObj constructor temp" ;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" ; V12 tmp10 [V12,T00] ( 5, 10 ) byref -> rsi single-def "Inlining Arg" ; V13 tmp11 [V13,T17] ( 3, 3 ) ref -> rdi class-hnd single-def "Inline stloc first use temp" ; V14 tmp12 [V14,T07] ( 3, 5 ) byref -> rcx single-def "Inlining Arg" ;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" ; V17 tmp15 [V17,T10] ( 4, 4 ) struct ( 8) [rsp+28H] do-not-enreg[SF] ld-addr-op "NewObj constructor temp" ;* V18 tmp16 [V18 ] ( 0, 0 ) short -> zero-ref "Inlining Arg" ; V19 tmp17 [V19,T14] ( 2, 4 ) int -> r14 "Inlining Arg" ; V20 tmp18 [V20,T04] ( 3, 6 ) byref -> rdx single-def "Inlining Arg" ;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V22 tmp20 [V22,T11] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg" ; V23 tmp21 [V23,T15] ( 2, 4 ) short -> rdx "Inlining Arg" ; V24 tmp22 [V24,T16] ( 4, 3 ) ref -> rcx class-hnd single-def "Inline stloc first use temp" ; V25 tmp23 [V25,T05] ( 3, 6 ) byref -> rdx single-def "Inlining Arg" ; V26 tmp24 [V26,T12] ( 2, 4 ) ref -> rdi class-hnd single-def "dup spill" ; V27 tmp25 [V27,T06] ( 6, 5.50) ref -> rdi single-def ; V28 tmp26 [V28,T25] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ; V29 tmp27 [V29,T02] ( 5, 9 ) ref -> rcx class-hnd "Inlining Arg" ;* V30 tmp28 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" ;* V31 tmp29 [V31 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V32 tmp30 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" ;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "field V01._ref (fldOffset=0x0)" P-INDEP ; V34 tmp32 [V34,T24] ( 2, 1.50) short -> rdx single-def "field V01._id (fldOffset=0x8)" P-INDEP ;* V35 tmp33 [V35 ] ( 0, 0 ) ushort -> zero-ref "field V01._depth (fldOffset=0xa)" P-INDEP ;* V36 tmp34 [V36 ] ( 0, 0 ) ref -> zero-ref "field V03._ref (fldOffset=0x0)" P-INDEP ;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V03._deferredId (fldOffset=0x8)" P-INDEP ;* V38 tmp36 [V38 ] ( 0, 0 ) short -> zero-ref "field V03._promiseId (fldOffset=0xc)" P-INDEP ; V39 tmp37 [V39,T20] ( 2, 2 ) ref -> rdx single-def "field V06._ref (fldOffset=0x0)" P-INDEP ; V40 tmp38 [V40,T21] ( 2, 2 ) int -> r14 single-def "field V06._deferredId (fldOffset=0x8)" P-INDEP ; V41 tmp39 [V41,T22] ( 2, 2 ) short -> rbp single-def "field V06._promiseId (fldOffset=0xc)" P-INDEP ;* V42 tmp40 [V42 ] ( 0, 0 ) ref -> zero-ref single-def "field V21._ref (fldOffset=0x0)" P-INDEP ; V43 tmp41 [V43,T23] ( 2, 2 ) short -> rdx single-def "field V21._id (fldOffset=0x8)" P-INDEP ;* V44 tmp42 [V44 ] ( 0, 0 ) ushort -> zero-ref single-def "field V21._depth (fldOffset=0xa)" P-INDEP ; V45 tmp43 [V45,T26] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; V46 cse0 [V46,T18] ( 3, 3 ) ref -> rsi "CSE - moderate" ; V47 cse1 [V47,T09] ( 4, 4 ) byref -> rbx "CSE - moderate" ; ; Lcl frame size = 48 G_M29380_IG01: push r14 push rdi push rsi push rbp push rbx sub rsp, 48 mov rbx, rcx ;; size=13 bbWeight=1 PerfScore 5.50 G_M29380_IG02: mov rcx, 0xD1FFAB1E ; box for Proto.Promises.Internal+ObjectPool+Type`1[Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]]:s_pool mov rsi, gword ptr [rcx] add rsi, 8 lea rcx, bword ptr [rsi+08H] lock or dword ptr [rsp], 0 mov eax, 1 xchg dword ptr [rcx], eax cmp eax, 1 jne SHORT G_M29380_IG04 ;; size=38 bbWeight=1 PerfScore 40.50 G_M29380_IG03: call [Proto.Promises.Internal+SpinLocker:EnterCore():this] ;; size=6 bbWeight=0.50 PerfScore 1.50 G_M29380_IG04: mov rdi, gword ptr [rsi] mov rdx, gword ptr [rdi+08H] mov rcx, rsi call CORINFO_HELP_CHECKED_ASSIGN_REF xor ecx, ecx mov dword ptr [rsi+08H], ecx mov rcx, 0xD1FFAB1E ; const ptr cmp rdi, gword ptr [rcx] je SHORT G_M29380_IG06 ;; size=35 bbWeight=1 PerfScore 10.75 G_M29380_IG05: jmp SHORT G_M29380_IG08 ;; size=2 bbWeight=0.50 PerfScore 1.00 G_M29380_IG06: mov rcx, 0xD1FFAB1E ; Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult] call CORINFO_HELP_NEWFAST mov rdi, rax xor ecx, ecx mov qword ptr [rsp+28H], rcx mov dword ptr [rsp+28H], 1 ;; size=33 bbWeight=0.50 PerfScore 1.88 G_M29380_IG07: mov dword ptr [rsp+2CH], ecx mov rcx, qword ptr [rsp+28H] mov qword ptr [rdi+28H], rcx mov word ptr [rdi+18H], 1 ;; size=19 bbWeight=0.50 PerfScore 2.00 G_M29380_IG08: mov rcx, 0xD1FFAB1E ; const ptr mov rsi, gword ptr [rcx] lea rcx, bword ptr [rdi+08H] mov rdx, rsi call CORINFO_HELP_ASSIGN_REF mov byte ptr [rdi+1CH], 0 mov byte ptr [rdi+1EH], 0 mov byte ptr [rdi+1DH], 0 xor ecx, ecx mov dword ptr [rdi+2CH], ecx movsx rbp, word ptr [rdi+18H] mov r14d, dword ptr [rdi+28H] mov rdx, rdi lea rcx, bword ptr [rbx+08H] call CORINFO_HELP_ASSIGN_REF mov dword ptr [rbx+10H], r14d mov word ptr [rbx+14H], bp add rbx, 8 mov rdx, rbx mov rcx, gword ptr [rdx] movsx rdx, word ptr [rdx+0CH] test rcx, rcx je SHORT G_M29380_IG10 ;; size=91 bbWeight=1 PerfScore 25.75 G_M29380_IG09: movsx rdx, dx mov rax, qword ptr [rcx] mov rax, qword ptr [rax+50H] call [rax+28H]Proto.Promises.Internal+PromiseRefBase:Forget(short):this ;; size=14 bbWeight=0.50 PerfScore 3.62 G_M29380_IG10: mov rdx, rbx mov rdi, gword ptr [rdx] mov edx, dword ptr [rdx+08H] mov rcx, rdi mov rax, qword ptr [rdi] mov rax, qword ptr [rax+58H] call [rax+30H]Proto.Promises.Internal+PromiseRefBase+DeferredPromiseBase`1[Proto.Promises.Internal+VoidResult]:TryIncrementDeferredIdAndUnregisterCancelation(int):bool:this test eax, eax je SHORT G_M29380_IG14 mov rcx, gword ptr [rdi+08H] cmp rcx, rsi je SHORT G_M29380_IG12 ;; size=35 bbWeight=1 PerfScore 16.00 G_M29380_IG11: lea rcx, bword ptr [rdi+08H] mov rdx, 0xD1FFAB1E ; const ptr mov rdx, gword ptr [rdx] call System.Threading.Interlocked:Exchange(byref,System.Object):System.Object mov rcx, rax ;; size=25 bbWeight=0.50 PerfScore 2.00 G_M29380_IG12: mov rdx, rdi xor r8, r8 mov r9d, 1 mov rax, qword ptr [rcx] mov rax, qword ptr [rax+40H] call [rax+30H]Proto.Promises.Internal+HandleablePromiseBase:Handle(Proto.Promises.Internal+PromiseRefBase,System.Object,ubyte):this xor ecx, ecx mov qword ptr [rbx], rcx mov qword ptr [rbx+08H], rcx ;; size=31 bbWeight=1 PerfScore 10.00 G_M29380_IG13: add rsp, 48 pop rbx pop rbp pop rsi pop rdi pop r14 ret ;; size=11 bbWeight=1 PerfScore 3.75 G_M29380_IG14: mov rcx, 0xD1FFAB1E ; Proto.Promises.InvalidOperationException call CORINFO_HELP_NEWSFAST mov rbx, rax mov ecx, 0x247A mov rdx, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rcx, rbx xor r8, r8 call [Proto.Promises.InvalidOperationException:.ctor(System.String,System.String):this] mov rcx, rbx call CORINFO_HELP_THROW int3 ;; size=62 bbWeight=0 PerfScore 0.00 ; Total bytes of code 415, prolog size 10, PerfScore 165.75, instruction count 111, allocated bytes for code 415 (MethodHash=b71e8d3b) for method Program+PromiseBenchmarks:PromiseField():this (Tier1) ; ============================================================ ; Assembly listing for method Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]:MaybeDispose():this (Tier1) ; Emitting BLENDED_CODE for X64 with AVX - Windows ; Tier1 code ; optimized code ; rsp based frame ; partially interruptible ; No PGO data ; 1 inlinees with PGO data; 5 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 7, 5.50) ref -> rbx this class-hnd single-def ; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V02 tmp1 [V02,T01] ( 5, 5 ) byref -> rsi single-def "Inlining Arg" ; V03 tmp2 [V03,T02] ( 3, 3 ) byref -> rcx single-def "Inlining Arg" ;* V04 tmp3 [V04 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ; ; Lcl frame size = 40 G_M14430_IG01: push rsi push rbx sub rsp, 40 mov rbx, rcx ;; size=9 bbWeight=1 PerfScore 2.50 G_M14430_IG02: mov rcx, rbx call [Proto.Promises.Internal+PromiseRefBase:Dispose():this] mov byte ptr [rbx+20H], 0 cmp byte ptr [(reloc)], 0 ; data for Proto.Promises.Promise+Config:s_objectPoolingEnabled je SHORT G_M14430_IG06 ;; size=22 bbWeight=1 PerfScore 8.25 G_M14430_IG03: mov rcx, 0xD1FFAB1E ; box for Proto.Promises.Internal+ObjectPool+Type`1[Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]]:s_pool mov rsi, gword ptr [rcx] add rsi, 8 lea rcx, bword ptr [rsi+08H] lock or dword ptr [rsp], 0 mov eax, 1 xchg dword ptr [rcx], eax cmp eax, 1 jne SHORT G_M14430_IG04 call [Proto.Promises.Internal+SpinLocker:EnterCore():this] ;; size=44 bbWeight=0.50 PerfScore 21.75 G_M14430_IG04: mov rdx, gword ptr [rsi] lea rcx, bword ptr [rbx+08H] call CORINFO_HELP_ASSIGN_REF mov rcx, rsi mov rdx, rbx call CORINFO_HELP_CHECKED_ASSIGN_REF xor ecx, ecx mov dword ptr [rsi+08H], ecx ;; size=28 bbWeight=0.50 PerfScore 3.12 G_M14430_IG05: add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=0.50 PerfScore 1.12 G_M14430_IG06: mov rcx, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 G_M14430_IG07: add rsp, 40 pop rbx pop rsi tail.jmp [System.GC:SuppressFinalize(System.Object)] ;; size=12 bbWeight=0.50 PerfScore 1.62 ; Total bytes of code 125, prolog size 6, PerfScore 51.00, instruction count 37, allocated bytes for code 125 (MethodHash=9701c7a1) for method Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]:MaybeDispose():this (Tier1) ; ============================================================
Trovare la differenza