') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); [NativeAOT] Save full ARM64 SIMD arg registers in UniversalTransition by VSadov · Pull Request #74888 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Save full ARM64 SIMD arg registers in UniversalTransition - #74888

Merged
VSadov merged 2 commits into
dotnet:mainfrom
VSadov:stubRegs
Sep 1, 2022
Merged

[NativeAOT] Save full ARM64 SIMD arg registers in UniversalTransition#74888
VSadov merged 2 commits into
dotnet:mainfrom
VSadov:stubRegs

Conversation

@VSadov

@VSadovVSadov commented Aug 31, 2022

Copy link
Copy Markdown
Member

On arm64 entire SIMD registers (q0-q7) could be used for argument passing.

I am not sure if JIT uses HVA argument passing for NativeAOT, maybe it is disabled, but it looks like our save/restore of arguments in UniversalTransition frames could be incomplete.

@VSadov

Copy link
Copy Markdown
MemberAuthor

Re: PreStub in CoreClr.

It looks like PreStub on ARM64 stores full q registers

ThePreStub uses PROLOG_WITH_TRANSITION_BLOCK macro

NESTED_ENTRY ThePreStub
PROLOG_WITH_TRANSITION_BLOCK
... 

PROLOG_WITH_TRANSITION_BLOCK uses SAVE_FLOAT_ARGUMENT_REGISTERS

 IF "$SaveFPArgs" != ""
__PWTB_SaveFPArgs SETL $SaveFPArgs
ELSE
__PWTB_SaveFPArgs SETL {true}
ENDIF
. . . ; Spill argument registers.
SAVE_ARGUMENT_REGISTERS sp, __PWTB_ArgumentRegisters
IF __PWTB_SaveFPArgs
SAVE_FLOAT_ARGUMENT_REGISTERS sp, __PWTB_FloatArgumentRegisters
ENDIF

and SAVE_FLOAT_ARGUMENT_REGISTERS saves q registers

; Reserve128bytesofmemorybeforecallingSAVE_FLOAT_ARGUMENT_REGISTERS

@VSadov

Copy link
Copy Markdown
MemberAuthor

Interestingly nativeaot has SAVE_FLOAT_ARGUMENT_REGISTERS defined on unix, but it could be dead code, I could not track it to its use.

// Reserve 64 bytes of memory before calling SAVE_FLOAT_ARGUMENT_REGISTERS

@VSadov

VSadov commented Aug 31, 2022

Copy link
Copy Markdown
MemberAuthor

There is also use of d0, d1 in RhCallDescrWorker

It looks like this corresponds to CoreClr CallDescrWorkerInternal, which has an additional conditional handling of HVA returns

;;VectorHFAReturn return case

, and the float argument part deals with q registers (only d portions in nativeaot counterpart)

I do not know if nativeaot and CoreClr should match here

@jkotas

Copy link
Copy Markdown
Member

I do not know if nativeaot and CoreClr should match here

RhCallDescrWorker is probably a dead code.

@jkotasjkotas 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.

I think this is candidate for release/7.0 backport. The arm64 calling convention is passing HFA in these registers.

@VSadov

Copy link
Copy Markdown
MemberAuthor

I will check once more on the nativeaot+unix version of SAVE_FLOAT_ARGUMENT_REGISTERS - to be sure it is unused.

@VSadov

Copy link
Copy Markdown
MemberAuthor

I will check once more on the nativeaot+unix version of SAVE_FLOAT_ARGUMENT_REGISTERS - to be sure it is unused.

it is unused. I will just remove it to be less confusing, since it seems to be subtly incorrect.

@VSadovVSadov closed this Sep 1, 2022
@VSadovVSadov reopened this Sep 1, 2022
@VSadov

Copy link
Copy Markdown
MemberAuthor

Tests are not starting. :-/

@VSadov

Copy link
Copy Markdown
MemberAuthor

Although the new commit just deletes code, I’d like to see it builds on everything.

@jkotas

Copy link
Copy Markdown
Member

Tests are not starting. :-/

Yes, it is a planned eng system downtime. Check your email.

@VSadov

VSadov commented Sep 1, 2022

Copy link
Copy Markdown
MemberAuthor

Yes, it is a planned eng system downtime. Check your email.

I am one of those who miss the email from the airline about 1 hour earlier departure for the last flight to the mainland. (they did not wait :)

@VSadovVSadov closed this Sep 1, 2022
@VSadovVSadov reopened this Sep 1, 2022
@VSadov

Copy link
Copy Markdown
MemberAuthor

Thanks!!

@VSadov
VSadov merged commit 5e7cfbf into dotnet:mainSep 1, 2022
@VSadov
VSadov deleted the stubRegs branch September 1, 2022 20:04
@VSadov

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/2974601463

@ghostghost locked as resolved and limited conversation to collaborators Oct 2, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@VSadov@jkotas