Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Vector64: Avoid GSCookies in Vector64 software fallback - #98293

Merged
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64
Mar 19, 2024
Merged

Vector64: Avoid GSCookies in Vector64 software fallback#98293
tannergooding merged 3 commits into
dotnet:mainfrom
hez2010:vec64

Conversation

@hez2010

@hez2010hez2010 commented Feb 12, 2024

Copy link
Copy Markdown
Contributor

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen.
It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check and skip the unnecessary zeroing.

As a sequence it also makes the software fallback of Vector128, Vector256 and Vector512 faster as they all rely on Vector64 when creating the vector.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M000_IG01: ;; offset=0x0000subrsp,104xoreax,eaxmov qword ptr [rsp+0x28],rax vxorps xmm4,xmm4,xmm4 vmovdqu ymmword ptr [rsp+0x30],ymm4mov qword ptr [rsp+0x50],raxmovrax,0xF2C39AD32FFFmov qword ptr [rsp+0x60],raxG_M000_IG02: ;; offset=0x0029mov dword ptr [rsp+0x30],1mov dword ptr [rsp+0x34],2movrcx, qword ptr [rsp+0x30]mov dword ptr [rsp+0x28],2mov dword ptr [rsp+0x2C],3movrax, qword ptr [rsp+0x28]mov qword ptr [rsp+0x48],rcxmov qword ptr [rsp+0x40],raxmovecx, dword ptr [rsp+0x48]addecx, dword ptr [rsp+0x40]mov dword ptr [rsp+0x50],ecxmovecx, dword ptr [rsp+0x4C]addecx, dword ptr [rsp+0x44]mov dword ptr [rsp+0x54],ecxmovrcx, qword ptr [rsp+0x50]mov qword ptr [rsp+0x38],rcxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x3C]call[System.Console:WriteLine(int)]movrcx,0xF2C39AD32FFFcmp qword ptr [rsp+0x60],rcxje SHORT G_M000_IG03call CORINFO_HELP_FAIL_FASTG_M000_IG03: ;; offset=0x00A3nopG_M000_IG04: ;; offset=0x00A4addrsp,104ret; Total bytes of code 169

After:

G_M000_IG01: ;; offset=0x0000subrsp,88 vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+0x40],xmm4xoreax,eaxmov qword ptr [rsp+0x50],raxG_M000_IG02: ;; offset=0x0015mov dword ptr [rsp+0x50],1mov dword ptr [rsp+0x54],2movrcx, qword ptr [rsp+0x50]mov dword ptr [rsp+0x48],2mov dword ptr [rsp+0x4C],3movrax, qword ptr [rsp+0x48]mov qword ptr [rsp+0x38],rcxmov qword ptr [rsp+0x30],raxmovecx, dword ptr [rsp+0x38]addecx, dword ptr [rsp+0x30]mov dword ptr [rsp+0x40],ecxmovecx, dword ptr [rsp+0x3C]addecx, dword ptr [rsp+0x34]mov dword ptr [rsp+0x44],ecxmovrcx, qword ptr [rsp+0x40]mov qword ptr [rsp+0x28],rcxmovecx, dword ptr [rsp+0x28]addecx, dword ptr [rsp+0x2C]call[System.Console:WriteLine(int)]nopG_M000_IG03: ;; offset=0x007Aaddrsp,88ret; Total bytes of code 127

@ghostghost added community-contribution Indicates that the PR has been added by a community member area-System.Runtime.Intrinsics labels Feb 12, 2024
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We are using stackalloc for Vector64 software fallbacks which results in GSCookies check in the codegen. It's slow as the code is not being hardware accelerated but let's at least initialize Vector64 directly to avoid the unnecessary check.

On x86_64:

varx=Vector64.Create(1,2);vary=Vector64.Create(2,3);Console.WriteLine(Vector64.Sum(x+y));

Before:

G_M27646_IG01: ;; offset=0x0000
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x28], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov qword ptr [rbp-0x10], rax
mov qword ptr [rbp-0x08], 0x430657
G_M27646_IG02: ;; offset=0x0026
mov dword ptr [rbp-0x10], 1
mov dword ptr [rbp-0x0C], 2
mov rdi, qword ptr [rbp-0x10]
mov dword ptr [rbp-0x18], 2
mov dword ptr [rbp-0x14], 3
mov rax, qword ptr [rbp-0x18]
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x38], rax
mov edi, dword ptr [rbp-0x30]
add edi, dword ptr [rbp-0x38]
mov dword ptr [rbp-0x28], edi
mov edi, dword ptr [rbp-0x2C]
add edi, dword ptr [rbp-0x34]
mov dword ptr [rbp-0x24], edi
mov rdi, qword ptr [rbp-0x28]
mov qword ptr [rbp-0x40], rdi
mov edi, dword ptr [rbp-0x40]
add edi, dword ptr [rbp-0x3C]
call [System.Console:WriteLine(int)]
cmp qword ptr [rbp-0x08], 0x430657
je SHORT G_M27646_IG03
call CORINFO_HELP_FAIL_FAST
G_M27646_IG03: ;; offset=0x0087
nop G_M27646_IG04: ;; offset=0x0088
add rsp, 64
pop rbp
ret ; Total bytes of code 142

After:

G_M000_IG01: ;; offset=0x0000
sub rsp, 88
vxorps xmm4, xmm4, xmm4
vmovdqa xmmword ptr [rsp+0x40], xmm4
xor eax, eax
mov qword ptr [rsp+0x50], rax
G_M000_IG02: ;; offset=0x0015
mov dword ptr [rsp+0x50], 1
mov dword ptr [rsp+0x54], 2
mov rcx, qword ptr [rsp+0x50]
mov dword ptr [rsp+0x48], 2
mov dword ptr [rsp+0x4C], 3
mov rax, qword ptr [rsp+0x48]
mov qword ptr [rsp+0x38], rcx
mov qword ptr [rsp+0x30], rax
mov ecx, dword ptr [rsp+0x38]
add ecx, dword ptr [rsp+0x30]
mov dword ptr [rsp+0x40], ecx
mov ecx, dword ptr [rsp+0x3C]
add ecx, dword ptr [rsp+0x34]
mov dword ptr [rsp+0x44], ecx
mov rcx, qword ptr [rsp+0x40]
mov qword ptr [rsp+0x28], rcx
mov ecx, dword ptr [rsp+0x28]
add ecx, dword ptr [rsp+0x2C]
call [System.Console:WriteLine(int)]
nop
G_M000_IG03: ;; offset=0x007A
add rsp, 88
ret
; Total bytes of code 127
Author:hez2010
Assignees:-
Labels:

area-System.Runtime.Intrinsics, community-contribution

Milestone:-

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just noting that this doesn't really benefit anything as the fallbacks aren't used for most platforms nor should the types be used if IsHardwareAccelerated is false.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.Intrinsicscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@hez2010@tannergooding