Skip to content

Conversation

@okaneco
Copy link
Contributor

@okaneco okaneco commented Nov 19, 2025

Feature gate: #![feature(uint_gather_scatter_bits)]
Tracking issue: #149069
Accepted ACP: rust-lang/libs-team#695 (comment)

Implement gather_bits, scatter_bits functions on unsigned integers
Add tests to coretests

This implementation is a small improvement over the plain naive form (see the solution sketch).
We only check the set bits in the mask instead of iterating over every bit.

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Nov 19, 2025
@rustbot
Copy link
Collaborator

rustbot commented Nov 19, 2025

r? @Mark-Simulacrum

rustbot has assigned @Mark-Simulacrum.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Copy link
Contributor

@quaternic quaternic left a comment

Choose a reason for hiding this comment

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

I added some suggestions, but otherwise looks good to me.

View changes since this review

#[unstable(feature = "uint_gather_scatter_bits", issue = "149069")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline(always)]
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
#[inline(always)]
#[inline]

This seems more appropriate for something with a nontrivial amount of code within. Comparable to wrapping_pow.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Agree with this, and changed the function signatures to be mut param instead of redeclaring in the function body.

@okaneco okaneco force-pushed the gather_scatter_bits branch from 73f838f to 275f191 Compare November 24, 2025 14:42
Implement `gather_bits`, `scatter_bits` functions on unsigned integers
Add tests to coretests
@okaneco okaneco force-pushed the gather_scatter_bits branch from 275f191 to 7f89192 Compare November 24, 2025 15:09
@Mark-Simulacrum
Copy link
Member

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Nov 26, 2025

📌 Commit 7f89192 has been approved by Mark-Simulacrum

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 26, 2025
Zalathar added a commit to Zalathar/rust that referenced this pull request Nov 26, 2025
…k-Simulacrum

num: Implement `uint_gather_scatter_bits` feature for unsigned integers

Feature gate: `#![feature(uint_gather_scatter_bits)]`
Tracking issue: rust-lang#149069
Accepted ACP: rust-lang/libs-team#695 (comment)

Implement `gather_bits`, `scatter_bits` functions on unsigned integers
Add tests to coretests

This implementation is a small improvement over the plain naive form (see the [solution sketch](rust-lang/libs-team#695)).
We only check the set bits in the mask instead of iterating over every bit.
Zalathar added a commit to Zalathar/rust that referenced this pull request Nov 26, 2025
…k-Simulacrum

num: Implement `uint_gather_scatter_bits` feature for unsigned integers

Feature gate: `#![feature(uint_gather_scatter_bits)]`
Tracking issue: rust-lang#149069
Accepted ACP: rust-lang/libs-team#695 (comment)

Implement `gather_bits`, `scatter_bits` functions on unsigned integers
Add tests to coretests

This implementation is a small improvement over the plain naive form (see the [solution sketch](rust-lang/libs-team#695)).
We only check the set bits in the mask instead of iterating over every bit.
Zalathar added a commit to Zalathar/rust that referenced this pull request Nov 26, 2025
…k-Simulacrum

num: Implement `uint_gather_scatter_bits` feature for unsigned integers

Feature gate: `#![feature(uint_gather_scatter_bits)]`
Tracking issue: rust-lang#149069
Accepted ACP: rust-lang/libs-team#695 (comment)

Implement `gather_bits`, `scatter_bits` functions on unsigned integers
Add tests to coretests

This implementation is a small improvement over the plain naive form (see the [solution sketch](rust-lang/libs-team#695)).
We only check the set bits in the mask instead of iterating over every bit.
bors added a commit that referenced this pull request Nov 26, 2025
Rollup of 19 pull requests

Successful merges:

 - #148048 (Stabilize `maybe_uninit_write_slice`)
 - #148641 (Add a diagnostic attribute for special casing const bound errors for non-const impls)
 - #148765 (std: split up the `thread` module)
 - #149074 (Add Command::get_env_clear)
 - #149097 (num: Implement `uint_gather_scatter_bits` feature for unsigned integers)
 - #149131 (optimize `slice::Iter::next_chunk`)
 - #149190 (Forbid `CHECK: br` and `CHECK-NOT: br` in codegen tests (suggest `br {{.*}}` instead))
 - #149239 (clarify float min/max behavios for NaNs and signed zeros)
 - #149243 (Fix typo and clarify bootstrap change tracker entry)
 - #149270 (implement `Iterator::{exactly_one, collect_array}`)
 - #149295 (Suggest _bytes versions of endian-converting methods)
 - #149301 (Motor OS: make decode_error_kind more comprehensive)
 - #149306 (bootstrap: Miri now handles jemalloc like everything else)
 - #149325 (rustdoc: add regression test for #140968)
 - #149332 (fix rustdoc search says “Consider searching for "null" instead.” #149324)
 - #149349 (Fix typo in comment.)
 - #149353 (Tidying up UI tests [3/N])
 - #149355 (Document that `build.description` affects symbol mangling and crate IDs)
 - #149360 (Enable CI download for windows-gnullvm)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit that referenced this pull request Nov 27, 2025
Rollup of 12 pull requests

Successful merges:

 - #147115 (More robust stack protector testing)
 - #148048 (Stabilize `maybe_uninit_write_slice`)
 - #148641 (Add a diagnostic attribute for special casing const bound errors for non-const impls)
 - #149074 (Add Command::get_env_clear)
 - #149097 (num: Implement `uint_gather_scatter_bits` feature for unsigned integers)
 - #149131 (optimize `slice::Iter::next_chunk`)
 - #149190 (Forbid `CHECK: br` and `CHECK-NOT: br` in codegen tests (suggest `br {{.*}}` instead))
 - #149239 (clarify float min/max behavios for NaNs and signed zeros)
 - #149243 (Fix typo and clarify bootstrap change tracker entry)
 - #149301 (Motor OS: make decode_error_kind more comprehensive)
 - #149306 (bootstrap: Miri now handles jemalloc like everything else)
 - #149325 (rustdoc: add regression test for #140968)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit e3ecd45 into rust-lang:main Nov 27, 2025
11 checks passed
@rustbot rustbot added this to the 1.93.0 milestone Nov 27, 2025
rust-timer added a commit that referenced this pull request Nov 27, 2025
Rollup merge of #149097 - okaneco:gather_scatter_bits, r=Mark-Simulacrum

num: Implement `uint_gather_scatter_bits` feature for unsigned integers

Feature gate: `#![feature(uint_gather_scatter_bits)]`
Tracking issue: #149069
Accepted ACP: rust-lang/libs-team#695 (comment)

Implement `gather_bits`, `scatter_bits` functions on unsigned integers
Add tests to coretests

This implementation is a small improvement over the plain naive form (see the [solution sketch](rust-lang/libs-team#695)).
We only check the set bits in the mask instead of iterating over every bit.
@okaneco okaneco deleted the gather_scatter_bits branch November 27, 2025 14:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants