Untitled Diff
155 lines
; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):bool
; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):bool
; Emitting BLENDED_CODE for X64 CPU with AVX - Windows
; Emitting BLENDED_CODE for X64 CPU with AVX - Windows
; optimized code
; optimized code
; rsp based frame
; rsp based frame
; partially interruptible
; partially interruptible
; No PGO data
; No PGO data
; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; 0 inlinees with PGO data; 7 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
; Final local variable assignments
;
;
; V00 arg0 [V00,T00] ( 5, 10 ) byref -> rcx ld-addr-op single-def
; V00 arg0 [V00,T00] ( 5, 10 ) byref -> rcx ld-addr-op single-def
; V01 arg1 [V01,T01] ( 10, 6 ) byref -> rsi single-def
; V01 arg1 [V01,T01] ( 10, 6 ) byref -> rdi single-def
; V02 loc0 [V02,T02] ( 8, 4.50) ref -> rcx class-hnd single-def
; V02 loc0 [V02,T02] ( 8, 4.50) ref -> rcx class-hnd single-def
; V03 loc1 [V03,T09] ( 3, 2 ) int -> rdi ld-addr-op
; V03 loc1 [V03,T09] ( 3, 2 ) int -> rsi ld-addr-op
; V04 loc2 [V04,T08] ( 4, 2.50) int -> rbx ld-addr-op
; V04 loc2 [V04,T08] ( 4, 2.50) int -> rbx ld-addr-op
; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rsp+20H] do-not-enreg[XS] must-init addr-exposed ld-addr-op
; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rsp+28H] do-not-enreg[XS] must-init addr-exposed ld-addr-op
; V06 OutArgs [V06 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace"
; V06 OutArgs [V06 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace"
; V07 tmp1 [V07,T03] ( 5, 4 ) ref -> rcx class-hnd single-def "impAppendStmt"
; V07 tmp1 [V07,T03] ( 5, 4 ) ref -> rcx class-hnd single-def "impAppendStmt"
;* V08 tmp2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
;* V08 tmp2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
; V10 tmp4 [V10,T10] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
; V10 tmp4 [V10,T10] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
; V11 tmp5 [V11,T04] ( 5, 4 ) int -> rdi "Inlining Arg"
; V11 tmp5 [V11,T04] ( 5, 4 ) int -> rsi "Inlining Arg"
; V12 tmp6 [V12,T06] ( 4, 3 ) int -> rbx "Inlining Arg"
; V12 tmp6 [V12,T06] ( 4, 3 ) int -> rbx "Inlining Arg"
; V13 tmp7 [V13,T05] ( 5, 4 ) int -> rdi "Inlining Arg"
; V13 tmp7 [V13,T05] ( 5, 4 ) int -> rbp "Inlining Arg"
; V14 tmp8 [V14,T07] ( 4, 3 ) int -> rbx "Inlining Arg"
; V14 tmp8 [V14,T07] ( 4, 3 ) int -> rbx "Inlining Arg"
;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref V27._object(offs=0x00) P-INDEP "field V00._object (fldOffset=0x0)"
;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref V27._object(offs=0x00) P-INDEP "field V00._object (fldOffset=0x0)"
;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref V27._index(offs=0x08) P-INDEP "field V00._index (fldOffset=0x8)"
;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref V27._index(offs=0x08) P-INDEP "field V00._index (fldOffset=0x8)"
;* V17 tmp11 [V17 ] ( 0, 0 ) int -> zero-ref V27._length(offs=0x0c) P-INDEP "field V00._length (fldOffset=0xc)"
;* V17 tmp11 [V17 ] ( 0, 0 ) int -> zero-ref V27._length(offs=0x0c) P-INDEP "field V00._length (fldOffset=0xc)"
; V18 tmp12 [V18 ] ( 2, 1 ) ref -> [rsp+20H] do-not-enreg[X] addr-exposed V05._array(offs=0x00) P-DEP "field V05._array (fldOffset=0x0)"
; V18 tmp12 [V18 ] ( 2, 1 ) ref -> [rsp+28H] do-not-enreg[X] addr-exposed V05._array(offs=0x00) P-DEP "field V05._array (fldOffset=0x0)"
; V19 tmp13 [V19 ] ( 2, 1 ) int -> [rsp+28H] do-not-enreg[X] addr-exposed V05._offset(offs=0x08) P-DEP "field V05._offset (fldOffset=0x8)"
; V19 tmp13 [V19 ] ( 2, 1 ) int -> [rsp+30H] do-not-enreg[X] addr-exposed V05._offset(offs=0x08) P-DEP "field V05._offset (fldOffset=0x8)"
; V20 tmp14 [V20 ] ( 1, 0.50) int -> [rsp+2CH] do-not-enreg[X] addr-exposed V05._count(offs=0x0c) P-DEP "field V05._count (fldOffset=0xc)"
; V20 tmp14 [V20 ] ( 1, 0.50) int -> [rsp+34H] do-not-enreg[X] addr-exposed V05._count(offs=0x0c) P-DEP "field V05._count (fldOffset=0xc)"
; V21 tmp15 [V21,T13] ( 2, 1 ) ref -> rdx single-def V08._array(offs=0x00) P-INDEP "field V08._array (fldOffset=0x0)"
; V21 tmp15 [V21,T13] ( 2, 1 ) ref -> rdx single-def V08._array(offs=0x00) P-INDEP "field V08._array (fldOffset=0x0)"
; V22 tmp16 [V22,T15] ( 2, 1 ) int -> rdi V08._offset(offs=0x08) P-INDEP "field V08._offset (fldOffset=0x8)"
; V22 tmp16 [V22,T15] ( 2, 1 ) int -> rbp V08._offset(offs=0x08) P-INDEP "field V08._offset (fldOffset=0x8)"
; V23 tmp17 [V23,T16] ( 2, 1 ) int -> rbx V08._count(offs=0x0c) P-INDEP "field V08._count (fldOffset=0xc)"
; V23 tmp17 [V23,T16] ( 2, 1 ) int -> rbx V08._count(offs=0x0c) P-INDEP "field V08._count (fldOffset=0xc)"
; V24 tmp18 [V24,T14] ( 2, 1 ) ref -> rdx single-def V09._array(offs=0x00) P-INDEP "field V09._array (fldOffset=0x0)"
; V24 tmp18 [V24,T14] ( 2, 1 ) ref -> rdx single-def V09._array(offs=0x00) P-INDEP "field V09._array (fldOffset=0x0)"
; V25 tmp19 [V25,T17] ( 2, 1 ) int -> rdi V09._offset(offs=0x08) P-INDEP "field V09._offset (fldOffset=0x8)"
; V25 tmp19 [V25,T17] ( 2, 1 ) int -> rsi V09._offset(offs=0x08) P-INDEP "field V09._offset (fldOffset=0x8)"
; V26 tmp20 [V26,T18] ( 2, 1 ) int -> rbx V09._count(offs=0x0c) P-INDEP "field V09._count (fldOffset=0xc)"
; V26 tmp20 [V26,T18] ( 2, 1 ) int -> rbx V09._count(offs=0x0c) P-INDEP "field V09._count (fldOffset=0xc)"
;* V27 tmp21 [V27 ] ( 0, 0 ) struct (16) zero-ref "Promoted implicit byref"
;* V27 tmp21 [V27 ] ( 0, 0 ) struct (16) zero-ref "Promoted implicit byref"
; V28 cse0 [V28,T11] ( 3, 1.50) int -> rdx "CSE - moderate"
; V28 cse0 [V28,T11] ( 3, 1.50) int -> rdx "CSE - moderate"
; V29 cse1 [V29,T12] ( 3, 1.50) int -> rdx "CSE - moderate"
; V29 cse1 [V29,T12] ( 3, 1.50) int -> rdx "CSE - moderate"
;
;
; Lcl frame size = 48
; Lcl frame size = 56
G_M22933_IG01:
G_M22933_IG01:
push rdi
push rdi
push rsi
push rsi
push rbp
push rbx
push rbx
sub rsp, 48
sub rsp, 56
xor eax, eax
xor eax, eax
mov qword ptr [rsp+20H], rax
mov qword ptr [rsp+28H], rax
mov rsi, rdx
mov rdi, rdx
;; size=17 bbWeight=1 PerfScore 4.75
;; size=18 bbWeight=1 PerfScore 5.75
G_M22933_IG02:
G_M22933_IG02:
mov edi, dword ptr [rcx+08H]
mov esi, dword ptr [rcx+08H]
mov ebx, dword ptr [rcx+0CH]
mov ebx, dword ptr [rcx+0CH]
mov rcx, gword ptr [rcx]
mov rcx, gword ptr [rcx]
test rcx, rcx
test rcx, rcx
je G_M22933_IG07
je G_M22933_IG07
;; size=18 bbWeight=1 PerfScore 7.25
;; size=18 bbWeight=1 PerfScore 7.25
G_M22933_IG03:
G_M22933_IG03:
mov rdx, qword ptr [rcx]
mov rdx, qword ptr [rcx]
test dword ptr [rdx], 0xD1FFAB1E
test dword ptr [rdx], 0xD1FFAB1E
je SHORT G_M22933_IG05
je SHORT G_M22933_IG05
and edi, 0xD1FFAB1E
and esi, 0xD1FFAB1E
mov edx, dword ptr [rcx+08H]
mov edx, dword ptr [rcx+08H]
cmp edx, edi
cmp edx, esi
jb G_M22933_IG11
jb G_M22933_IG11
sub edx, edi
sub edx, esi
cmp edx, ebx
cmp edx, ebx
jb G_M22933_IG11
jb G_M22933_IG11
mov rdx, rcx
mov rdx, rcx
mov rcx, rsi
mov rcx, rdi
call CORINFO_HELP_CHECKED_ASSIGN_REF
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rsi+08H], edi
mov dword ptr [rdi+08H], esi
mov dword ptr [rsi+0CH], ebx
mov dword ptr [rdi+0CH], ebx
mov eax, 1
mov eax, 1
;; size=60 bbWeight=0.50 PerfScore 7.38
;; size=60 bbWeight=0.50 PerfScore 7.38
G_M22933_IG04:
G_M22933_IG04:
add rsp, 48
add rsp, 56
pop rbx
pop rbx
pop rbp
pop rsi
pop rsi
pop rdi
pop rdi
ret
ret
;; size=8 bbWeight=0.50 PerfScore 1.38
;; size=9 bbWeight=0.50 PerfScore 1.62
G_M22933_IG05:
G_M22933_IG05:
lea rdx, [rsp+20H]
lea rdx, [rsp+28H]
mov rax, qword ptr [rcx]
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax+48H]
mov rax, qword ptr [rax+48H]
call [rax]System.Buffers.MemoryManager`1[double]:TryGetArray(byref):bool:this
call [rax]System.Buffers.MemoryManager`1[double]:TryGetArray(byref):bool:this
test eax, eax
test eax, eax
je SHORT G_M22933_IG07
je SHORT G_M22933_IG07
mov rcx, gword ptr [rsp+20H]
mov rcx, gword ptr [rsp+28H]
add edi, dword ptr [rsp+28H]
mov ebp, esi
add ebp, dword ptr [rsp+30H]
test rcx, rcx
test rcx, rcx
je SHORT G_M22933_IG12
je SHORT G_M22933_IG12
mov edx, dword ptr [rcx+08H]
mov edx, dword ptr [rcx+08H]
cmp edx, edi
cmp edx, ebp
jb SHORT G_M22933_IG12
jb SHORT G_M22933_IG12
sub edx, edi
sub edx, ebp
cmp edx, ebx
cmp edx, ebx
jb SHORT G_M22933_IG12
jb SHORT G_M22933_IG12
mov rdx, rcx
mov rdx, rcx
mov rcx, rsi
mov rcx, rdi
call CORINFO_HELP_CHECKED_ASSIGN_REF
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rsi+08H], edi
mov dword ptr [rdi+08H], ebp
mov dword ptr [rsi+0CH], ebx
mov dword ptr [rdi+0CH], ebx
mov eax, 1
mov eax, 1
;; size=67 bbWeight=0.50 PerfScore 10.75
;; size=69 bbWeight=0.50 PerfScore 10.88
G_M22933_IG06:
G_M22933_IG06:
add rsp, 48
add rsp, 56
pop rbx
pop rbx
pop rbp
pop rsi
pop rsi
pop rdi
pop rdi
ret
ret
;; size=8 bbWeight=0.50 PerfScore 1.38
;; size=9 bbWeight=0.50 PerfScore 1.62
G_M22933_IG07:
G_M22933_IG07:
test ebx, ebx
test ebx, ebx
jne SHORT G_M22933_IG09
jne SHORT G_M22933_IG09
mov rcx, rsi
mov rax, 0xD1FFAB1E ; box for System.ArraySegment`1[double]:<Empty>k__BackingField
call [System.ArraySegment`1[double]:get_Empty():System.ArraySegment`1[double]]
mov rsi, gword ptr [rax]
add rsi, 8
call CORINFO_HELP_ASSIGN_BYREF
movsq
mov eax, 1
mov eax, 1
;; size=18 bbWeight=0.50 PerfScore 2.38
;; size=33 bbWeight=0.50 PerfScore 3.00
G_M22933_IG08:
G_M22933_IG08:
add rsp, 48
add rsp, 56
pop rbx
pop rbx
pop rbp
pop rsi
pop rsi
pop rdi
pop rdi
ret
ret
;; size=8 bbWeight=0.50 PerfScore 1.38
;; size=9 bbWeight=0.50 PerfScore 1.62
G_M22933_IG09:
G_M22933_IG09:
xor eax, eax
xor eax, eax
mov qword ptr [rsi], rax
mov qword ptr [rdi], rax
mov qword ptr [rsi+08H], rax
mov qword ptr [rdi+08H], rax
;; size=9 bbWeight=0.50 PerfScore 1.12
;; size=9 bbWeight=0.50 PerfScore 1.12
G_M22933_IG10:
G_M22933_IG10:
add rsp, 48
add rsp, 56
pop rbx
pop rbx
pop rbp
pop rsi
pop rsi
pop rdi
pop rdi
ret
ret
;; size=8 bbWeight=0.50 PerfScore 1.38
;; size=9 bbWeight=0.50 PerfScore 1.62
G_M22933_IG11:
G_M22933_IG11:
mov edx, edi
mov edx, esi
mov r8d, ebx
mov r8d, ebx
call [System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)]
call [System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)]
int3
int3
;; size=12 bbWeight=0 PerfScore 0.00
;; size=12 bbWeight=0 PerfScore 0.00
G_M22933_IG12:
G_M22933_IG12:
mov edx, edi
mov edx, ebp
mov r8d, ebx
mov r8d, ebx
call [System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)]
call [System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)]
int3
int3
;; size=12 bbWeight=0 PerfScore 0.00
;; size=12 bbWeight=0 PerfScore 0.00
; Total bytes of code 245, prolog size 14, PerfScore 63.63, instruction count 86, allocated bytes for code 245 (MethodHash=21d5a66a) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):bool
; Total bytes of code 267, prolog size 15, PerfScore 68.58, instruction count 95, allocated bytes for code 267 (MethodHash=21d5a66a) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):bool
; ============================================================
; ============================================================