You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Auto merge of #136974 - m-ou-se:fmt-options-64-bit, r=<try>
Reduce FormattingOptions to 64 bits
This reduces FormattingOptions from 6-7 machine words (384 bits on 64-bit platforms, 224 bits on 32-bit platforms) to just 64 bits (a single register on 64-bit platforms).
This PR includes #136932, which reduces the width and precision options to 16 bits, to make it all fit.
Before:
```rust
pub struct FormattingOptions {
flags: u32, // only 6 bits used
fill: char,
align: Option<Alignment>,
width: Option<usize>,
precision: Option<usize>,
}
```
After:
```rust
pub struct FormattingOptions {
/// Bits:
/// - 0: `+` flag [rt::Flag::SignPlus]
/// - 1: `-` flag [rt::Flag::SignMinus]
/// - 2: `#` flag [rt::Flag::Alternate]
/// - 3: `0` flag [rt::Flag::SignAwareZeroPad]
/// - 4: `x?` flag [rt::Flag::DebugLowerHex]
/// - 5: `X?` flag [rt::Flag::DebugUpperHex]
/// - 6-7: Alignment (0: Left, 1: Right, 2: Center, 3: Unknown)
/// - 8: Width flag (if set, the width field below is used)
/// - 9: Precision flag (if set, the precision field below is used)
/// - 10: unused
/// - 11-31: fill character (21 bits, a full `char`)
flags: u32,
/// Width if width flag above is set. Otherwise, always 0.
width: u16,
/// Precision if precision flag above is set. Otherwise, always 0.
precision: u16,
}
```
0 commit comments