rust-lang / rust-lang/rust

Tracking Issue for `uint_gather_scatter_bits`

Open
#149,069 7 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-tracking-issue T-libs
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

Feature gate: #![feature(uint_gather_scatter_bits)]

This is a tracking issue for two functions that operate on masked bits: extract_bits consolidates masked bits into the least significant bits of an integer, and deposit_bits distributes bits from the least significant bits of an integer to the bits specified by a mask.

The functions are implemented on unsigned integers and correspond to the hardware instructions known on some platforms as "bit extract" and "bit deposit" (PEXT/PDEP).

Public API
impl uint {
    pub const fn extract_bits(self, mask: Self) -> Self;
    pub const fn deposit_bits(self, mask: Self) -> Self;
}
Steps / History
Unresolved Questions
  1. No stabilization before the existence of explicit LLVM support: As of November 2025, there is currently no LLVM intrinsic to guarantee that the code generated is optimal for the target or generates the target architecture instruction if present and the target feature is specified. This is a roadblock for stabilization. Update(2026-June): LLVM intrinsics are implemented, waiting for next LLVM bump before we can use them.
  2. Naming: The libs team prefers gather/scatter_bits while that is at odds with how SIMD instructions use the terms gather/scatter. https://github.com/rust-lang/libs-team/issues/695#issuecomment-3549356128:
    ...by analogy to SIMD, SIMD gather/scatter allows you to arbitrarily reorder elements (it is a fully-general load/store to independently-determined addresses for each element), whereas SIMD compress/expand does not allow reordering the loaded/stored elements, just inserting/removing elements.
    The functions have been renamed according to the libs decision in https://github.com/rust-lang/rust/issues/149069#issuecomment-3633691777

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the public API and feature-gate sections, then read the linked std-dev-guide stabilization guidance and the unresolved LLVM-support question. Check the listed implementation PRs and whether the required LLVM bump has landed; done means the final comment period and stabilization PR can proceed.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.