Rollup merge of #130832 - RalfJung:sort-cfg-mess, r=workingjubilee · qinheping/verify-rust-std@c50befe (original) (raw)
1
1
`` //! This module contains the entry points for slice::sort
.
``
2
2
``
3
``
`-
#[cfg(not(feature = "optimize_for_size"))]
`
``
3
`+
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
`
4
4
`use crate::cmp;
`
5
5
`use crate::intrinsics;
`
6
6
`use crate::mem::{self, MaybeUninit, SizedTypeProperties};
`
7
``
`-
#[cfg(not(feature = "optimize_for_size"))]
`
``
7
`+
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
`
8
8
`use crate::slice::sort::shared::smallsort::{
`
9
9
`SMALL_SORT_GENERAL_SCRATCH_LEN, StableSmallSortTypeImpl, insertion_sort_shift_left,
`
10
10
`};
`
11
11
``
12
12
`pub(crate) mod merge;
`
13
13
``
14
``
`-
#[cfg(not(feature = "optimize_for_size"))]
`
``
14
`+
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
`
15
15
`pub(crate) mod drift;
`
16
``
`-
#[cfg(not(feature = "optimize_for_size"))]
`
``
16
`+
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
`
17
17
`pub(crate) mod quicksort;
`
18
18
``
19
``
`-
#[cfg(feature = "optimize_for_size")]
`
``
19
`+
#[cfg(any(feature = "optimize_for_size", target_pointer_width = "16"))]
`
20
20
`pub(crate) mod tiny;
`
21
21
``
22
22
`/// Stable sort called driftsort by Orson Peters and Lukas Bergdoll.
`
`@@ -45,7 +45,7 @@ pub fn sort<T, F: FnMut(&T, &T) -> bool, BufT: BufGuard>(v: &mut [T], is_less
`
45
45
``
46
46
` cfg_if! {
`
47
47
`if #[cfg(target_pointer_width = "16")] {
`
48
``
`-
let heap_buf = BufT::with_capacity(alloc_len);
`
``
48
`+
let mut heap_buf = BufT::with_capacity(alloc_len);
`
49
49
`let scratch = heap_buf.as_uninit_slice_mut();
`
50
50
`} else {
`
51
51
`// For small inputs 4KiB of stack storage suffices, which allows us to avoid
`
`@@ -85,7 +85,7 @@ pub fn sort<T, F: FnMut(&T, &T) -> bool, BufT: BufGuard>(v: &mut [T], is_less
`
85
85
`///
`
86
86
`/// Deliberately don't inline the main sorting routine entrypoint to ensure the
`
87
87
`/// inlined insertion sort i-cache footprint remains minimal.
`
88
``
`-
#[cfg(not(feature = "optimize_for_size"))]
`
``
88
`+
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
`
89
89
`#[inline(never)]
`
90
90
`fn driftsort_main<T, F: FnMut(&T, &T) -> bool, BufT: BufGuard>(v: &mut [T], is_less: &mut F) {
`
91
91
`// By allocating n elements of memory we can ensure the entire input can
`