Skip to content

Commit e107ca0

Browse files
Optimize break patterns
1 parent 3b4d6e0 commit e107ca0

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

library/core/src/slice/sort.rs

+14-10
Original file line numberDiff line numberDiff line change
@@ -673,19 +673,23 @@ where
673673
fn break_patterns<T>(v: &mut [T]) {
674674
let len = v.len();
675675
if len >= 8 {
676-
// Pseudorandom number generator from the "Xorshift RNGs" paper by George Marsaglia.
677-
let mut random = len as u32;
678-
let mut gen_u32 = || {
679-
random ^= random << 13;
680-
random ^= random >> 17;
681-
random ^= random << 5;
682-
random
683-
};
676+
let mut seed = len;
684677
let mut gen_usize = || {
678+
// Pseudorandom number generator from the "Xorshift RNGs" paper by George Marsaglia.
685679
if usize::BITS <= 32 {
686-
gen_u32() as usize
680+
let mut r = seed as u32;
681+
r ^= r << 13;
682+
r ^= r >> 17;
683+
r ^= r << 5;
684+
seed = r as usize;
685+
seed
687686
} else {
688-
(((gen_u32() as u64) << 32) | (gen_u32() as u64)) as usize
687+
let mut r = seed as u64;
688+
r ^= r << 13;
689+
r ^= r >> 7;
690+
r ^= r << 17;
691+
seed = r as usize;
692+
seed
689693
}
690694
};
691695

0 commit comments

Comments
 (0)