forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] [EgorBo] Remove a few unsafe bits in BCL #960
Comments
Top method regressions42 (123.53 % of base) - System.IO.Hashing.XxHash128:GetCurrentHashCore(System.Span`1[ubyte]):this ; Assembly listing for method System.IO.Hashing.XxHash128:GetCurrentHashCore(System.Span`1[ubyte]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rsp based frame
+; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 7 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.IO.Hashing.XxHash128>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.Span`1[ubyte]>
;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.IO.Hashing.XxHash128+Hash128>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.IO.Hashing.XxHash128+Hash128>
-; V05 tmp2 [V05,T03] ( 2, 2 ) long -> rax "Inline stloc first use temp"
-; V06 tmp3 [V06,T04] ( 2, 2 ) long -> rcx "Inline stloc first use temp"
-;* V07 tmp4 [V07 ] ( 0, 0 ) byref -> zero-ref single-def "dup spill"
-;* V08 tmp5 [V08 ] ( 0, 0 ) long -> zero-ref ld-addr-op "NewObj constructor temp"
-;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-; V10 tmp7 [V10,T01] ( 3, 3 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-; V11 tmp8 [V11,T02] ( 1, 1 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP
-; V12 tmp9 [V12,T05] ( 2, 2 ) long -> rax "field V02.Low64 (fldOffset=0x0)" P-INDEP
-; V13 tmp10 [V13,T06] ( 2, 2 ) long -> rdx "field V02.High64 (fldOffset=0x8)" P-INDEP
-;* V14 tmp11 [V14 ] ( 0, 0 ) long -> zero-ref "field V04.Low64 (fldOffset=0x0)" P-DEP
-;* V15 tmp12 [V15 ] ( 0, 0 ) long -> zero-ref "field V04.High64 (fldOffset=0x8)" P-DEP
-;* V16 tmp13 [V16 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
-;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
+;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ubyte]>
+;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V09 tmp6 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V10 tmp7 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V11 tmp8 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V12 tmp9 [V12 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V13 tmp10 [V13,T04] ( 2, 2 ) long -> rax ld-addr-op "Inline stloc first use temp"
+;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V15 tmp12 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V16 tmp13 [V16 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V17 tmp14 [V17,T05] ( 2, 2 ) long -> rax ld-addr-op "Inline stloc first use temp"
+;* V18 tmp15 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V19 tmp16 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+; V20 tmp17 [V20,T01] ( 3, 3 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+; V21 tmp18 [V21,T02] ( 3, 3 ) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
+; V22 tmp19 [V22,T06] ( 2, 2 ) long -> rax "field V02.Low64 (fldOffset=0x0)" P-INDEP
+; V23 tmp20 [V23,T07] ( 2, 2 ) long -> rdx "field V02.High64 (fldOffset=0x8)" P-INDEP
+;* V24 tmp21 [V24 ] ( 0, 0 ) long -> zero-ref "field V04.Low64 (fldOffset=0x0)" P-DEP
+;* V25 tmp22 [V25 ] ( 0, 0 ) long -> zero-ref "field V04.High64 (fldOffset=0x8)" P-DEP
+;* V26 tmp23 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+;* V28 tmp25 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V29 tmp26 [V29 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
+;* V30 tmp27 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V31 tmp28 [V31 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+;* V32 tmp29 [V32 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V33 tmp30 [V33 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+; V34 tmp31 [V34,T03] ( 2, 2 ) byref -> rcx single-def "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V35 tmp32 [V35 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
+;* V36 tmp33 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V37 tmp34 [V37 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
+;* V38 tmp35 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP
+;* V39 tmp36 [V39 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
+;* V40 tmp37 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V41 tmp38 [V41 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+;* V42 tmp39 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V43 tmp40 [V43 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 0
G_M434_IG01:
+ push rbp
+ push r15
push rbx
+ lea rbp, [rsp+0x10]
mov rbx, rsi
- ;; size=4 bbWeight=1 PerfScore 1.25
+ mov r15d, edx
+ ;; size=15 bbWeight=1 PerfScore 4.00
G_M434_IG02:
mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash128:GetCurrentHashAsHash128():System.IO.Hashing.XxHash128+Hash128:this
call [rax]System.IO.Hashing.XxHash128:GetCurrentHashAsHash128():System.IO.Hashing.XxHash128+Hash128:this
+ cmp r15d, 8
+ jl SHORT G_M434_IG04
+ cmp r15d, 16
+ jl SHORT G_M434_IG04
+ lea rcx, bword ptr [rbx+0x08]
bswap rax
- mov rcx, rdx
- bswap rcx
- mov qword ptr [rbx], rcx
- mov qword ptr [rbx+0x08], rax
- ;; size=28 bbWeight=1 PerfScore 7.50
+ mov qword ptr [rcx], rax
+ mov rax, rdx
+ bswap rax
+ mov qword ptr [rbx], rax
+ ;; size=43 bbWeight=1 PerfScore 10.50
G_M434_IG03:
pop rbx
+ pop r15
+ pop rbp
ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ ;; size=5 bbWeight=1 PerfScore 2.50
+G_M434_IG04:
+ 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 34, prolog size 1, PerfScore 10.25, instruction count 11, allocated bytes for code 34 (MethodHash=8e3bfe4d) for method System.IO.Hashing.XxHash128:GetCurrentHashCore(System.Span`1[ubyte]):this (FullOpts)
+; Total bytes of code 76, prolog size 9, PerfScore 18.75, instruction count 25, allocated bytes for code 76 (MethodHash=8e3bfe4d) for method System.IO.Hashing.XxHash128:GetCurrentHashCore(System.Span`1[ubyte]):this (FullOpts)
; ============================================================ 29 (138.10 % of base) - System.IO.Hashing.XxHash128:WriteBigEndian128(byref,System.Span`1[ubyte]) ; Assembly listing for method System.IO.Hashing.XxHash128:WriteBigEndian128(byref,System.Span`1[ubyte]) (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rsp based frame
+; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 6 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 4, 4 ) byref -> rdi single-def
-;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.Span`1[ubyte]>
-; V02 loc0 [V02,T02] ( 4, 4 ) long -> rax
-; V03 loc1 [V03,T03] ( 4, 4 ) long -> rcx
-;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V05 tmp1 [V05 ] ( 0, 0 ) byref -> zero-ref single-def "dup spill"
-;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref ld-addr-op "NewObj constructor temp"
-;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-; V08 tmp4 [V08,T01] ( 3, 3 ) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-; V09 tmp5 [V09,T04] ( 1, 1 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;* V10 tmp6 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ubyte]>
+;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ubyte]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V06 tmp4 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V07 tmp5 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V10 tmp8 [V10,T04] ( 2, 2 ) long -> rcx ld-addr-op "Inline stloc first use temp"
+;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V13 tmp11 [V13 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V14 tmp12 [V14,T05] ( 2, 2 ) long -> rax ld-addr-op "Inline stloc first use temp"
+;* V15 tmp13 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+; V17 tmp15 [V17,T01] ( 3, 3 ) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+; V18 tmp16 [V18,T02] ( 3, 3 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V19 tmp17 [V19 ] ( 0, 0 ) byref -> zero-ref single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp18 [V20 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+;* V21 tmp19 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
+;* V22 tmp20 [V22 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp21 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp22 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+; V25 tmp23 [V25,T03] ( 2, 2 ) byref -> rax single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp24 [V26 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+;* V27 tmp25 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp26 [V28 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+;* V29 tmp27 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp28 [V30 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+;* V31 tmp29 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp30 [V32 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp31 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 0
G_M11325_IG01:
- ;; size=0 bbWeight=1 PerfScore 0.00
+ push rbp
+ mov rbp, rsp
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M11325_IG02:
- mov rax, qword ptr [rdi]
- mov rcx, qword ptr [rdi+0x08]
- bswap rax
- bswap rcx
- mov qword ptr [rsi], rcx
- mov qword ptr [rsi+0x08], rax
- ;; size=20 bbWeight=1 PerfScore 8.00
+ cmp edx, 8
+ jl SHORT G_M11325_IG04
+ cmp edx, 16
+ jl SHORT G_M11325_IG04
+ lea rax, bword ptr [rsi+0x08]
+ movbe rcx, qword ptr [rdi]
+ mov qword ptr [rax], rcx
+ movbe rax, qword ptr [rdi+0x08]
+ mov qword ptr [rsi], rax
+ ;; size=31 bbWeight=1 PerfScore 13.00
G_M11325_IG03:
+ pop rbp
ret
- ;; size=1 bbWeight=1 PerfScore 1.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
+G_M11325_IG04:
+ 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 21, prolog size 0, PerfScore 9.00, instruction count 7, allocated bytes for code 21 (MethodHash=ae9bd3c2) for method System.IO.Hashing.XxHash128:WriteBigEndian128(byref,System.Span`1[ubyte]) (FullOpts)
+; Total bytes of code 50, prolog size 4, PerfScore 17.50, instruction count 16, allocated bytes for code 50 (MethodHash=ae9bd3c2) for method System.IO.Hashing.XxHash128:WriteBigEndian128(byref,System.Span`1[ubyte]) (FullOpts)
; ============================================================ 27 (10.93 % of base) - System.IO.Hashing.XxHash128:Hash(ubyte[]):ubyte[] ; Assembly listing for method System.IO.Hashing.XxHash128:Hash(ubyte[]):ubyte[] (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; 6 single block inlinees; 7 inlinees without PGO data
+; 0 inlinees with PGO data; 10 single block inlinees; 9 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 5, 5 ) ref -> rdi class-hnd single-def <ubyte[]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V02 tmp1 [V02 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <ubyte[]>
;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewArr temp" <ubyte[]>
; V05 tmp4 [V05,T05] ( 3, 3 ) ref -> r14 class-hnd exact single-def "Inline stloc first use temp" <ubyte[]>
;* V06 tmp5 [V06 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V07 tmp6 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V08 tmp7 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V09 tmp8 [V09 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inline ldloca(s) first use temp"
;* V10 tmp9 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V11 tmp10 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V12 tmp11 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.IO.Hashing.XxHash128+Hash128>
;* V13 tmp12 [V13 ] ( 0, 0 ) struct (16) zero-ref multireg-ret "Inline return value spill temp" <System.IO.Hashing.XxHash128+Hash128>
;* V14 tmp13 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V16 tmp15 [V16 ] ( 2, 2 ) byref -> [rbp-0x28] must-init pinned "Inline stloc first use temp"
;* V17 tmp16 [V17 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
;* V18 tmp17 [V18 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.IO.Hashing.XxHash128+Hash128>
;* V19 tmp18 [V19 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.IO.Hashing.XxHash128+Hash128>
;* V20 tmp19 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-; V21 tmp20 [V21,T08] ( 2, 2 ) long -> rax "Inline stloc first use temp"
-; V22 tmp21 [V22,T09] ( 2, 2 ) long -> rdi "Inline stloc first use temp"
-;* V23 tmp22 [V23 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.Span`1[ubyte]>
-;* V24 tmp23 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "dup spill"
-;* V25 tmp24 [V25 ] ( 0, 0 ) long -> zero-ref ld-addr-op "NewObj constructor temp"
-;* V26 tmp25 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-; V27 tmp26 [V27,T06] ( 3, 3 ) byref -> rbx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-; V28 tmp27 [V28,T02] ( 8, 5 ) int -> r15 "field V02._length (fldOffset=0x8)" P-INDEP
-;* V29 tmp28 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V30 tmp29 [V30 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
-;* V31 tmp30 [V31 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V32 tmp31 [V32 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
-; V33 tmp32 [V33,T07] ( 3, 3 ) byref -> r13 "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V34 tmp33 [V34,T10] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V35 tmp34 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V36 tmp35 [V36 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
-;* V37 tmp36 [V37 ] ( 0, 0 ) long -> zero-ref "field V12.Low64 (fldOffset=0x0)" P-INDEP
-;* V38 tmp37 [V38 ] ( 0, 0 ) long -> zero-ref "field V12.High64 (fldOffset=0x8)" P-INDEP
-; V39 tmp38 [V39,T03] ( 5, 3 ) long -> rax "field V13.Low64 (fldOffset=0x0)" P-INDEP
-; V40 tmp39 [V40,T04] ( 5, 3 ) long -> rdx "field V13.High64 (fldOffset=0x8)" P-INDEP
-;* V41 tmp40 [V41 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp41 [V42 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
-;* V43 tmp42 [V43 ] ( 0, 0 ) long -> zero-ref "field V18.Low64 (fldOffset=0x0)" P-DEP
-;* V44 tmp43 [V44 ] ( 0, 0 ) long -> zero-ref "field V18.High64 (fldOffset=0x8)" P-DEP
-;* V45 tmp44 [V45 ] ( 0, 0 ) long -> zero-ref "field V19.Low64 (fldOffset=0x0)" P-DEP
-;* V46 tmp45 [V46 ] ( 0, 0 ) long -> zero-ref "field V19.High64 (fldOffset=0x8)" P-DEP
-;* V47 tmp46 [V47 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V48 tmp47 [V48 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
-;* V49 tmp48 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V23._reference (fldOffset=0x0)" P-INDEP
-;* V50 tmp49 [V50 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP
-;* V51 tmp50 [V51 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP
-;* V52 tmp51 [V52 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
-; V53 tmp52 [V53,T01] ( 5, 6 ) long -> rdi "Cast away GC"
+;* V21 tmp20 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V22 tmp21 [V22 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ubyte]>
+;* V23 tmp22 [V23 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V24 tmp23 [V24 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V25 tmp24 [V25 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V26 tmp25 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V27 tmp26 [V27 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V28 tmp27 [V28 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V29 tmp28 [V29,T10] ( 2, 2 ) long -> rax ld-addr-op "Inline stloc first use temp"
+;* V30 tmp29 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V31 tmp30 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V32 tmp31 [V32 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V33 tmp32 [V33 ] ( 2, 2 ) long -> [rbp-0x30] do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
+; V34 tmp33 [V34,T06] ( 3, 3 ) byref -> rbx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+; V35 tmp34 [V35,T02] ( 8, 5 ) int -> r15 "field V02._length (fldOffset=0x8)" P-INDEP
+;* V36 tmp35 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V37 tmp36 [V37 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
+;* V38 tmp37 [V38 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V39 tmp38 [V39 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+; V40 tmp39 [V40,T08] ( 2, 2 ) byref -> r13 "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V41 tmp40 [V41,T11] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+;* V42 tmp41 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V43 tmp42 [V43 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+;* V44 tmp43 [V44 ] ( 0, 0 ) long -> zero-ref "field V12.Low64 (fldOffset=0x0)" P-INDEP
+;* V45 tmp44 [V45 ] ( 0, 0 ) long -> zero-ref "field V12.High64 (fldOffset=0x8)" P-INDEP
+; V46 tmp45 [V46,T03] ( 5, 3 ) long -> rax "field V13.Low64 (fldOffset=0x0)" P-INDEP
+; V47 tmp46 [V47,T04] ( 5, 3 ) long -> rdx "field V13.High64 (fldOffset=0x8)" P-INDEP
+;* V48 tmp47 [V48 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V49 tmp48 [V49 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
+;* V50 tmp49 [V50 ] ( 0, 0 ) long -> zero-ref "field V18.Low64 (fldOffset=0x0)" P-DEP
+;* V51 tmp50 [V51 ] ( 0, 0 ) long -> zero-ref "field V18.High64 (fldOffset=0x8)" P-DEP
+;* V52 tmp51 [V52 ] ( 0, 0 ) long -> zero-ref "field V19.Low64 (fldOffset=0x0)" P-DEP
+;* V53 tmp52 [V53 ] ( 0, 0 ) long -> zero-ref "field V19.High64 (fldOffset=0x8)" P-DEP
+;* V54 tmp53 [V54 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
+;* V55 tmp54 [V55 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
+;* V56 tmp55 [V56 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
+;* V57 tmp56 [V57 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
+;* V58 tmp57 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
+;* V59 tmp58 [V59 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
+;* V60 tmp59 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V23._reference (fldOffset=0x0)" P-INDEP
+;* V61 tmp60 [V61 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP
+; V62 tmp61 [V62,T07] ( 3, 3 ) byref -> rdi single-def "field V24._reference (fldOffset=0x0)" P-INDEP
+;* V63 tmp62 [V63,T12] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
+; V64 tmp63 [V64,T09] ( 2, 2 ) byref -> rsi single-def "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V65 tmp64 [V65 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
+;* V66 tmp65 [V66 ] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
+;* V67 tmp66 [V67 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP
+;* V68 tmp67 [V68 ] ( 0, 0 ) byref -> zero-ref single-def "field V31._reference (fldOffset=0x0)" P-INDEP
+;* V69 tmp68 [V69 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP
+; V70 tmp69 [V70,T01] ( 5, 6 ) long -> rdi "Cast away GC"
;
; Lcl frame size = 16
G_M4735_IG01:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 16
lea rbp, [rsp+0x30]
xor eax, eax
mov qword ptr [rbp-0x28], rax
;; size=23 bbWeight=1 PerfScore 7.00
G_M4735_IG02:
test rdi, rdi
je G_M4735_IG09
lea rbx, bword ptr [rdi+0x10]
mov r15d, dword ptr [rdi+0x08]
mov rdi, 0xD1FFAB1E ; ubyte[]
mov esi, 16
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
lea r13, bword ptr [r14+0x10]
mov bword ptr [rbp-0x28], rbx
mov rdi, rbx
cmp r15d, 16
jle SHORT G_M4735_IG06
;; size=57 bbWeight=1 PerfScore 8.50
G_M4735_IG03:
cmp r15d, 128
jle SHORT G_M4735_IG05
cmp r15d, 240
jle SHORT G_M4735_IG04
mov esi, r15d
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash128:HashLengthOver240(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
call [rax]System.IO.Hashing.XxHash128:HashLengthOver240(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
jmp SHORT G_M4735_IG07
;; size=37 bbWeight=0.50 PerfScore 4.12
G_M4735_IG04:
mov esi, r15d
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash128:HashLength129To240(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
call [rax]System.IO.Hashing.XxHash128:HashLength129To240(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
jmp SHORT G_M4735_IG07
;; size=19 bbWeight=0.50 PerfScore 2.88
G_M4735_IG05:
mov esi, r15d
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash128:HashLength17To128(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
call [rax]System.IO.Hashing.XxHash128:HashLength17To128(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
jmp SHORT G_M4735_IG07
;; size=19 bbWeight=0.50 PerfScore 2.88
G_M4735_IG06:
mov esi, r15d
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash128:HashLength0To16(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
call [rax]System.IO.Hashing.XxHash128:HashLength0To16(ulong,uint,ulong):System.IO.Hashing.XxHash128+Hash128
;; size=17 bbWeight=0.50 PerfScore 1.88
G_M4735_IG07:
xor rdi, rdi
mov bword ptr [rbp-0x28], rdi
+ mov rdi, r13
+ lea rsi, bword ptr [rdi+0x08]
bswap rax
- mov rdi, rdx
- bswap rdi
- mov qword ptr [r13], rdi
- mov qword ptr [r13+0x08], rax
+ mov qword ptr [rsi], rax
+ mov rsi, rdx
+ bswap rsi
+ mov qword ptr [rbp-0x30], rsi
+ mov esi, 8
+ lea rdx, [rbp-0x30]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:Write[ulong](System.Span`1[ubyte],byref)
+ call [rax]System.Runtime.InteropServices.MemoryMarshal:Write[ulong](System.Span`1[ubyte],byref)
mov rax, r14
- ;; size=26 bbWeight=1 PerfScore 5.75
+ ;; size=53 bbWeight=1 PerfScore 10.50
G_M4735_IG08:
add rsp, 16
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=13 bbWeight=1 PerfScore 3.75
G_M4735_IG09:
mov edi, 193
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String)
call [rax]System.ArgumentNullException:Throw(System.String)
int3
;; size=36 bbWeight=0.50 PerfScore 2.62
-; Total bytes of code 247, prolog size 23, PerfScore 39.38, instruction count 67, allocated bytes for code 247 (MethodHash=091aed80) for method System.IO.Hashing.XxHash128:Hash(ubyte[]):ubyte[] (FullOpts)
+; Total bytes of code 274, prolog size 23, PerfScore 44.12, instruction count 73, allocated bytes for code 274 (MethodHash=091aed80) for method System.IO.Hashing.XxHash128:Hash(ubyte[]):ubyte[] (FullOpts)
; ============================================================ 9 (9.78 % of base) - System.IO.Hashing.Crc32:UpdateScalarArm32(uint,System.ReadOnlySpan`1[ubyte]):uint ; Assembly listing for method System.IO.Hashing.Crc32:UpdateScalarArm32(uint,System.ReadOnlySpan`1[ubyte]):uint (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; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 4 ) int -> rdi single-def
+; V00 arg0 [V00,T02] ( 5, 4 ) int -> rdi single-def
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ubyte]>
-; V02 loc0 [V02,T06] ( 2, 1 ) byref -> rbx single-def
-; V03 loc1 [V03,T03] ( 5, 2.50) int -> rax single-def
-;* V04 loc2 [V04,T10] ( 0, 0 ) int -> zero-ref single-def
-;* V05 loc3 [V05,T09] ( 0, 0 ) int -> zero-ref single-def
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V07 tmp1 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V08 tmp2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-; V09 tmp3 [V09,T04] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V10 tmp4 [V10,T05] ( 2, 2 ) int -> rdx "Inlining Arg"
-; V11 tmp5 [V11,T02] ( 5, 3 ) byref -> rsi "field V01._reference (fldOffset=0x0)" P-INDEP
-; V12 tmp6 [V12,T00] ( 7, 5 ) int -> rdx "field V01._length (fldOffset=0x8)" P-INDEP
-;* V13 tmp7 [V13 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
-; V15 tmp9 [V15,T07] ( 2, 1 ) byref -> rsi single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-; V16 tmp10 [V16,T08] ( 2, 1 ) int -> rdx single-def "field V08._length (fldOffset=0x8)" P-INDEP
+; V02 loc0 [V02,T03] ( 5, 2.50) int -> rax single-def
+;* V03 loc1 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[uint]>
+;* V04 loc2 [V04,T08] ( 0, 0 ) int -> zero-ref
+;* V05 loc3 [V05 ] ( 0, 0 ) int -> zero-ref
+;* V06 loc4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[ubyte]>
+;* V07 loc5 [V07 ] ( 0, 0 ) ubyte -> zero-ref
+;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V09 tmp1 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V10 tmp2 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V11 tmp3 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V13 tmp5 [V13 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V14 tmp6 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+; V16 tmp8 [V16,T11] ( 2, 1 ) int -> rcx single-def "Inline stloc first use temp"
+;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[uint]>
+;* V18 tmp10 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V19 tmp11 [V19 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V20 tmp12 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+; V21 tmp13 [V21,T04] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V22 tmp14 [V22,T05] ( 2, 2 ) int -> rdx "Inlining Arg"
+; V23 tmp15 [V23,T01] ( 5, 3.50) byref -> rsi "field V01._reference (fldOffset=0x0)" P-INDEP
+; V24 tmp16 [V24,T00] ( 7, 5 ) int -> rdx "field V01._length (fldOffset=0x8)" P-INDEP
+; V25 tmp17 [V25,T09] ( 2, 1 ) byref -> rbx single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp18 [V26,T12] ( 2, 1 ) int -> rcx single-def "field V03._length (fldOffset=0x8)" P-INDEP
+; V27 tmp19 [V27,T07] ( 2, 1.50) byref -> rsi single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+; V28 tmp20 [V28,T06] ( 2, 2 ) int -> rax single-def "field V06._length (fldOffset=0x8)" P-INDEP
+;* V29 tmp21 [V29 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp22 [V30 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
+;* V31 tmp23 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp24 [V32 ] ( 0, 0 ) int -> zero-ref single-def "field V10._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp25 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp26 [V34 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp27 [V35,T15] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
+; V36 tmp28 [V36,T13] ( 2, 1 ) int -> rcx single-def "field V17._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp29 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V38 tmp30 [V38 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+; V39 tmp31 [V39,T10] ( 2, 1 ) byref -> rsi single-def "field V20._reference (fldOffset=0x0)" P-INDEP
+; V40 tmp32 [V40,T14] ( 2, 1 ) int -> rdx single-def "field V20._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M20306_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M20306_IG02:
cmp edx, 4
jl SHORT G_M20306_IG04
;; size=5 bbWeight=1 PerfScore 1.25
G_M20306_IG03:
- mov rbx, rsi
mov eax, edx
and eax, -4
- jg SHORT G_M20306_IG08
cmp eax, edx
- ja SHORT G_M20306_IG07
+ ja SHORT G_M20306_IG08
+ mov ecx, eax
+ shr ecx, 2
+ mov rbx, rsi
+ test ecx, ecx
+ jg SHORT G_M20306_IG07
mov ecx, eax
add rsi, rcx
sub edx, eax
- ;; size=21 bbWeight=0.50 PerfScore 1.88
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
G_M20306_IG04:
- test edx, edx
+ mov eax, edx
+ test eax, eax
jg SHORT G_M20306_IG06
mov eax, edi
- ;; size=6 bbWeight=1 PerfScore 1.50
+ ;; size=8 bbWeight=1 PerfScore 1.75
G_M20306_IG05:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M20306_IG06:
movzx rsi, byte ptr [rsi]
mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Arm.Crc32:ComputeCrc32(uint,ubyte):uint
call [rax]System.Runtime.Intrinsics.Arm.Crc32:ComputeCrc32(uint,ubyte):uint
int3
;; size=17 bbWeight=0.50 PerfScore 2.75
G_M20306_IG07:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
- call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
- int3
- ;; size=13 bbWeight=0.50 PerfScore 1.75
-G_M20306_IG08:
mov esi, dword ptr [rbx]
mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Arm.Crc32:ComputeCrc32(uint,uint):uint
call [rax]System.Runtime.Intrinsics.Arm.Crc32:ComputeCrc32(uint,uint):uint
int3
;; size=15 bbWeight=0.50 PerfScore 2.75
+G_M20306_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 92, prolog size 8, PerfScore 17.62, instruction count 33, allocated bytes for code 92 (MethodHash=8ac9b0ad) for method System.IO.Hashing.Crc32:UpdateScalarArm32(uint,System.ReadOnlySpan`1[ubyte]):uint (FullOpts)
+; Total bytes of code 101, prolog size 8, PerfScore 18.38, instruction count 37, allocated bytes for code 101 (MethodHash=8ac9b0ad) for method System.IO.Hashing.Crc32:UpdateScalarArm32(uint,System.ReadOnlySpan`1[ubyte]):uint (FullOpts)
; ============================================================ 9 (9.68 % of base) - System.IO.Hashing.Crc32:UpdateScalarArm64(uint,System.ReadOnlySpan`1[ubyte]):uint ; Assembly listing for method System.IO.Hashing.Crc32:UpdateScalarArm64(uint,System.ReadOnlySpan`1[ubyte]):uint (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; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 4 ) int -> rdi single-def
+; V00 arg0 [V00,T02] ( 5, 4 ) int -> rdi single-def
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ubyte]>
-; V02 loc0 [V02,T06] ( 2, 1 ) byref -> rbx single-def
-; V03 loc1 [V03,T03] ( 5, 2.50) int -> rax single-def
-;* V04 loc2 [V04,T10] ( 0, 0 ) int -> zero-ref single-def
-;* V05 loc3 [V05,T09] ( 0, 0 ) int -> zero-ref single-def
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V07 tmp1 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V08 tmp2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-; V09 tmp3 [V09,T04] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V10 tmp4 [V10,T05] ( 2, 2 ) int -> rdx "Inlining Arg"
-; V11 tmp5 [V11,T02] ( 5, 3 ) byref -> rsi "field V01._reference (fldOffset=0x0)" P-INDEP
-; V12 tmp6 [V12,T00] ( 7, 5 ) int -> rdx "field V01._length (fldOffset=0x8)" P-INDEP
-;* V13 tmp7 [V13 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
-; V15 tmp9 [V15,T07] ( 2, 1 ) byref -> rsi single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-; V16 tmp10 [V16,T08] ( 2, 1 ) int -> rdx single-def "field V08._length (fldOffset=0x8)" P-INDEP
+; V02 loc0 [V02,T03] ( 5, 2.50) int -> rax single-def
+;* V03 loc1 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[ulong]>
+;* V04 loc2 [V04,T08] ( 0, 0 ) int -> zero-ref
+;* V05 loc3 [V05 ] ( 0, 0 ) long -> zero-ref
+;* V06 loc4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[ubyte]>
+;* V07 loc5 [V07 ] ( 0, 0 ) ubyte -> zero-ref
+;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V09 tmp1 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V10 tmp2 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V11 tmp3 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V13 tmp5 [V13 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V14 tmp6 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+; V16 tmp8 [V16,T11] ( 2, 1 ) int -> rcx single-def "Inline stloc first use temp"
+;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ulong]>
+;* V18 tmp10 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V19 tmp11 [V19 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V20 tmp12 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+; V21 tmp13 [V21,T04] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V22 tmp14 [V22,T05] ( 2, 2 ) int -> rdx "Inlining Arg"
+; V23 tmp15 [V23,T01] ( 5, 3.50) byref -> rsi "field V01._reference (fldOffset=0x0)" P-INDEP
+; V24 tmp16 [V24,T00] ( 7, 5 ) int -> rdx "field V01._length (fldOffset=0x8)" P-INDEP
+; V25 tmp17 [V25,T09] ( 2, 1 ) byref -> rbx single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp18 [V26,T12] ( 2, 1 ) int -> rcx single-def "field V03._length (fldOffset=0x8)" P-INDEP
+; V27 tmp19 [V27,T07] ( 2, 1.50) byref -> rsi single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+; V28 tmp20 [V28,T06] ( 2, 2 ) int -> rax single-def "field V06._length (fldOffset=0x8)" P-INDEP
+;* V29 tmp21 [V29 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp22 [V30 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
+;* V31 tmp23 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp24 [V32 ] ( 0, 0 ) int -> zero-ref single-def "field V10._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp25 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp26 [V34 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp27 [V35,T15] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
+; V36 tmp28 [V36,T13] ( 2, 1 ) int -> rcx single-def "field V17._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp29 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V38 tmp30 [V38 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+; V39 tmp31 [V39,T10] ( 2, 1 ) byref -> rsi single-def "field V20._reference (fldOffset=0x0)" P-INDEP
+; V40 tmp32 [V40,T14] ( 2, 1 ) int -> rdx single-def "field V20._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M19441_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M19441_IG02:
cmp edx, 8
jl SHORT G_M19441_IG04
;; size=5 bbWeight=1 PerfScore 1.25
G_M19441_IG03:
- mov rbx, rsi
mov eax, edx
and eax, -8
- jg SHORT G_M19441_IG08
cmp eax, edx
- ja SHORT G_M19441_IG07
+ ja SHORT G_M19441_IG08
+ mov ecx, eax
+ shr ecx, 3
+ mov rbx, rsi
+ test ecx, ecx
+ jg SHORT G_M19441_IG07
mov ecx, eax
add rsi, rcx
sub edx, eax
- ;; size=21 bbWeight=0.50 PerfScore 1.88
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
G_M19441_IG04:
- test edx, edx
+ mov eax, edx
+ test eax, eax
jg SHORT G_M19441_IG06
mov eax, edi
- ;; size=6 bbWeight=1 PerfScore 1.50
+ ;; size=8 bbWeight=1 PerfScore 1.75
G_M19441_IG05:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M19441_IG06:
movzx rsi, byte ptr [rsi]
mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Arm.Crc32:ComputeCrc32(uint,ubyte):uint
call [rax]System.Runtime.Intrinsics.Arm.Crc32:ComputeCrc32(uint,ubyte):uint
int3
;; size=17 bbWeight=0.50 PerfScore 2.75
G_M19441_IG07:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
- call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
- int3
- ;; size=13 bbWeight=0.50 PerfScore 1.75
-G_M19441_IG08:
mov rsi, qword ptr [rbx]
mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Arm.Crc32+Arm64:ComputeCrc32(uint,ulong):uint
call [rax]System.Runtime.Intrinsics.Arm.Crc32+Arm64:ComputeCrc32(uint,ulong):uint
int3
;; size=16 bbWeight=0.50 PerfScore 2.75
+G_M19441_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 93, prolog size 8, PerfScore 17.62, instruction count 33, allocated bytes for code 93 (MethodHash=f047b40e) for method System.IO.Hashing.Crc32:UpdateScalarArm64(uint,System.ReadOnlySpan`1[ubyte]):uint (FullOpts)
+; Total bytes of code 102, prolog size 8, PerfScore 18.38, instruction count 37, allocated bytes for code 102 (MethodHash=f047b40e) for method System.IO.Hashing.Crc32:UpdateScalarArm64(uint,System.ReadOnlySpan`1[ubyte]):uint (FullOpts)
; ============================================================ Larger list of diffs: https://gist.github.com/MihuBot/b422d820862f96fe1ba7543eb837836f |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 14 minutes 37 seconds (remote runner delay: 1 minute 19 seconds).
dotnet/runtime#111643
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: