Skip to content

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

@radekdoulik@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[wasm] Add narrow methods to PackedSimd by radekdoulik · Pull Request #83084 · dotnet/runtime · GitHub
Skip to content

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

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

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

@radekdoulik@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', '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('^' + ".*" + ' [wasm] Add narrow methods to PackedSimd by radekdoulik · Pull Request #83084 · dotnet/runtime · GitHub
Skip to content

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

@radekdoulik@vargaz
, '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" + ' [wasm] Add narrow methods to PackedSimd by radekdoulik · Pull Request #83084 · dotnet/runtime · GitHub
Skip to content

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

@radekdoulik@vargaz
, '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('^' + ".*" + ' [wasm] Add narrow methods to PackedSimd by radekdoulik · Pull Request #83084 · dotnet/runtime · GitHub
Skip to content

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

@radekdoulik@vargaz
, '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); } })(); })(); [wasm] Add narrow methods to PackedSimd by radekdoulik · Pull Request #83084 · dotnet/runtime · GitHub
Skip to content

[wasm] Add narrow methods to PackedSimd - #83084

Merged
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow
Mar 7, 2023
Merged

[wasm] Add narrow methods to PackedSimd#83084
radekdoulik merged 2 commits into
dotnet:mainfrom
radekdoulik:pr-wasm-packed-simd-narrow

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Add them as internal as the approved API contains wrong methods for
these. dotnet#53730 (comment)
This will allow faster implementation of IndexOfAnyValues for wasm.
dotnet#82789 (comment)
@ghost

ghost commented Mar 7, 2023

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

Add them as internal as the approved API contains wrong methods for these. #53730 (comment)

This will allow faster implementation of IndexOfAnyValues for wasm. #82789 (comment)

Author:radekdoulik
Assignees:radekdoulik
Labels:

area-System.Runtime.Intrinsics

Milestone:-

@radekdoulik

radekdoulik commented Mar 7, 2023

Copy link
Copy Markdown
MemberAuthor

As the documentation is a bit unclear (the text and binary format parts could be explained differently about the inputs), I checked the results with this test, running with node. It looks like the inputs are indeed treated as signed integers here.

 static void TestNarrow()
{
System.Console.WriteLine($"IsSupported: {PackedSimd.IsSupported}");
(var v1, var v2, var vns, var vnu) = System.TestPackedSimd.TestNarrow();
System.Console.WriteLine($"v1: {v1} v2: {v2}");
System.Console.WriteLine($"vns: {vns} vnu: {vnu}");
System.Console.WriteLine("signed");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vns[i]:X4}] {vns[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vns[i+4]:X4}] {vns[i+4],6}");
}
System.Console.WriteLine("unsigned");
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v1[i],12} [{v1[i]:X8}] --> [{vnu[i]:X4}] {vnu[i],6}");
}
for (int i=0; i<4; i++) {
System.Console.WriteLine($" {v2[i],12} [{v2[i]:X8}] --> [{vnu[i+4]:X4}] {vnu[i+4],6}");
}
}
 [CLSCompliant(false)]
public partial class TestPackedSimd
{
private static int Next()
{
return System.Random.Shared.Next(0x3ffff) - 0x1ffff;
}
public static (Vector128<int>, Vector128<int>, Vector128<short>, Vector128<ushort>) TestNarrow()
{
var v1 = Vector128.Create(Next(), Next(), Next(), Next());
var v2 = Vector128.Create(Next(), Next(), Next(), Next());
var vns = PackedSimd.ConvertNarrowingSignedSaturate(v1, v2);
var vnu = PackedSimd.ConvertNarrowingUnsignedSaturate(v1, v2);
return (v1, v2, vns, vnu);
}
}
 IsSupported: True
v1: <11742, -35700, -58383, 101864> v2: <83369, -3341, 95004, -111954>
vns: <11742, -32768, -32768, 32767, 32767, -3341, 32767, -32768> vnu: <11742, 0, 0, 65535, 65535, 0, 65535, 0>
signed
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [8000] -32768
-58383 [FFFF1BF1] --> [8000] -32768
101864 [00018DE8] --> [7FFF] 32767
83369 [000145A9] --> [7FFF] 32767
-3341 [FFFFF2F3] --> [F2F3] -3341
95004 [0001731C] --> [7FFF] 32767
-111954 [FFFE4AAE] --> [8000] -32768
unsigned
11742 [00002DDE] --> [2DDE] 11742
-35700 [FFFF748C] --> [0000] 0
-58383 [FFFF1BF1] --> [0000] 0
101864 [00018DE8] --> [FFFF] 65535
83369 [000145A9] --> [FFFF] 65535
-3341 [FFFFF2F3] --> [0000] 0
95004 [0001731C] --> [FFFF] 65535
-111954 [FFFE4AAE] --> [0000] 0

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The relevant code from the test above:

 local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.s [SIMD]
v128.store offset:96 align:4 [SIMD]
local.get $3
local.get $13
local.get $15
i16x8.narrow.i32x4.u [SIMD]
v128.store offset:112 align:4 [SIMD]

@radekdoulik

Copy link
Copy Markdown
MemberAuthor

The failing builds are unrelated

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

@radekdoulik@vargaz