[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg
, '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

[wasm] Use packedsimd in hexconverter - #115062

Merged
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd
May 6, 2025
Merged

[wasm] Use packedsimd in hexconverter#115062
lewing merged 46 commits into
dotnet:mainfrom
lewing:hexconvert-packedsimd

Conversation

@lewing

@lewinglewing commented Apr 25, 2025

Copy link
Copy Markdown
Member

Implement a PackedSimd vectorized version of Hexconverter.TryDecodeFromUtf16

Then fix several things that were broken in the AOT intrinsics to make that optimization work.

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 25, 2025
@lewing
lewing requested review from kg and radekdoulikApril 25, 2025 20:37

@kgkg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks right, with the caveat that I didn't test the new implementation myself

@lewing
lewing marked this pull request as ready for review April 26, 2025 01:41
@lewing

lewing commented Apr 26, 2025

Copy link
Copy Markdown
MemberAuthor

/ba-g coreclr failures are not related

@lewing

Copy link
Copy Markdown
MemberAuthor

Looks right, with the caveat that I didn't test the new implementation myself

the select mask was swapped but the tests caught it.

@lewinglewing removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2025
@lewing

Copy link
Copy Markdown
MemberAuthor

Looks like there are some regressions with invalid values, taking a look.

@lewing

Copy link
Copy Markdown
MemberAuthor

It looks like the tests are only failing in windows without aggressive trimming, in CI, but not locally. ugh

@lewing

Copy link
Copy Markdown
MemberAuthor

@radekdoulik it looks like the failing paths are on the AOT builds

@radekdoulik

Copy link
Copy Markdown
Member

@radekdoulik it looks like the failing paths are on the AOT builds

I have no luck replicating it locally. Tried both Release and Debug configurations.

I was running EMSDK_PATH=/Users/rodo/git/runtime/src/mono/browser/emsdk ./dotnet.sh build -c Debug /t:test /p:_WasmAllowAOTDebug=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:TargetOS=browser src/libraries/System.Runtime/tests/System.Runtime.Tests and similar for Release.

@lewing

lewing commented Apr 29, 2025

Copy link
Copy Markdown
MemberAuthor

Passed locally with AOT on windows using the same version of chrome. I wonder if this is another msvc error in the cross compiler (see: #114786)

 info: Finished: System.Runtime.Tests.dll
info: Stored D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBundle\xhar
ness-output\testResults.xml results 17698363 bytes
info: Finished uploading 17698363 bytes of RESULTXML
info: Xml file was written to the provided writer.
info:
info: === TEST EXECUTION SUMMARY ===
info: Tests run: 64996 Passed: 64882 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 114
info:
info: test-main.js exiting WasmTestRunner.dll System.Runtime.Tests.dll with result 0 and linear memory 300154880 byte
s
info: MONO_WASM: forceDisposeProxies done: 14 imports, 0 exports, 0 GCHandles, 0 JSHandles.
info: WASM EXIT 0
info: Waiting to flush log messages with a timeout of 120 secs ..
info: Closing 1 browser tabs before setting the main tab to config page and quitting.
XHarness exit code: 0
----- end Tue 04/29/2025 17:03:46.84 ----- exit code 0 ----------------------------------------------------------
XHarness artifacts: D:\dotnet\runtime\artifacts\bin\System.Runtime.Tests\Release\net10.0-browser\browser-wasm\AppBund
le\xharness-output
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:14:30.11

@lewing

Copy link
Copy Markdown
MemberAuthor

cc @akoeplinger

Comment threadsrc/libraries/Common/src/System/HexConverter.cs Outdated
Comment threadsrc/mono/mono/mini/intrinsics.c Outdated
Comment threadsrc/mono/mono/mini/interp/transform-simd.c
@lewing

Copy link
Copy Markdown
MemberAuthor

I've extracted out some of the marginally related changes. What is left in the pr now is:

  • a fix for PackedSimd.BitwiseSelect argument ordering
  • removing OP_WASM_ONESCOMPLEMENT and using the common path for OP_ONES_COMPLEMENT now that llvm is fixed
  • additional tests
  • The original optimization (aka the first two commits)

I'm happy to split out the fixes completely from the optimization but I think it is reviewable as is.

@lewinglewing removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label May 6, 2025
@lewing
lewing requested a review from kgMay 6, 2025 16:10
@lewing

Copy link
Copy Markdown
MemberAuthor

/ba-g failures are not related

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lewing@radekdoulik@kg