Skip to content

Commit dfbf464

Browse files
committed
rustc_target: move abi::Niche from rustc::ty::layout.
1 parent 8c050fc commit dfbf464

File tree

2 files changed

+51
-51
lines changed

2 files changed

+51
-51
lines changed

Diff for: src/librustc/ty/layout.rs

-51
Original file line numberDiff line numberDiff line change
@@ -2222,57 +2222,6 @@ where
22222222
}
22232223
}
22242224

2225-
struct Niche {
2226-
offset: Size,
2227-
scalar: Scalar,
2228-
}
2229-
2230-
impl Niche {
2231-
fn available<C: HasDataLayout>(&self, cx: &C) -> u128 {
2232-
let Scalar { value, valid_range: ref v } = self.scalar;
2233-
let bits = value.size(cx).bits();
2234-
assert!(bits <= 128);
2235-
let max_value = !0u128 >> (128 - bits);
2236-
2237-
// Find out how many values are outside the valid range.
2238-
let niche = v.end().wrapping_add(1)..*v.start();
2239-
niche.end.wrapping_sub(niche.start) & max_value
2240-
}
2241-
2242-
fn reserve<C: HasDataLayout>(&self, cx: &C, count: u128) -> Option<(u128, Scalar)> {
2243-
assert!(count > 0);
2244-
2245-
let Scalar { value, valid_range: ref v } = self.scalar;
2246-
let bits = value.size(cx).bits();
2247-
assert!(bits <= 128);
2248-
let max_value = !0u128 >> (128 - bits);
2249-
2250-
if count > max_value {
2251-
return None;
2252-
}
2253-
2254-
// Compute the range of invalid values being reserved.
2255-
let start = v.end().wrapping_add(1) & max_value;
2256-
let end = v.end().wrapping_add(count) & max_value;
2257-
2258-
// If the `end` of our range is inside the valid range,
2259-
// then we ran out of invalid values.
2260-
// FIXME(eddyb) abstract this with a wraparound range type.
2261-
let valid_range_contains = |x| {
2262-
if v.start() <= v.end() {
2263-
*v.start() <= x && x <= *v.end()
2264-
} else {
2265-
*v.start() <= x || x <= *v.end()
2266-
}
2267-
};
2268-
if valid_range_contains(end) {
2269-
return None;
2270-
}
2271-
2272-
Some((start, Scalar { value, valid_range: *v.start()..=end }))
2273-
}
2274-
}
2275-
22762225
impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
22772226
/// Find the offset of a niche leaf field, starting from
22782227
/// the given type and recursing through aggregates.

Diff for: src/librustc_target/abi/mod.rs

+51
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,57 @@ pub enum DiscriminantKind {
878878
},
879879
}
880880

881+
pub struct Niche {
882+
pub offset: Size,
883+
pub scalar: Scalar,
884+
}
885+
886+
impl Niche {
887+
pub fn available<C: HasDataLayout>(&self, cx: &C) -> u128 {
888+
let Scalar { value, valid_range: ref v } = self.scalar;
889+
let bits = value.size(cx).bits();
890+
assert!(bits <= 128);
891+
let max_value = !0u128 >> (128 - bits);
892+
893+
// Find out how many values are outside the valid range.
894+
let niche = v.end().wrapping_add(1)..*v.start();
895+
niche.end.wrapping_sub(niche.start) & max_value
896+
}
897+
898+
pub fn reserve<C: HasDataLayout>(&self, cx: &C, count: u128) -> Option<(u128, Scalar)> {
899+
assert!(count > 0);
900+
901+
let Scalar { value, valid_range: ref v } = self.scalar;
902+
let bits = value.size(cx).bits();
903+
assert!(bits <= 128);
904+
let max_value = !0u128 >> (128 - bits);
905+
906+
if count > max_value {
907+
return None;
908+
}
909+
910+
// Compute the range of invalid values being reserved.
911+
let start = v.end().wrapping_add(1) & max_value;
912+
let end = v.end().wrapping_add(count) & max_value;
913+
914+
// If the `end` of our range is inside the valid range,
915+
// then we ran out of invalid values.
916+
// FIXME(eddyb) abstract this with a wraparound range type.
917+
let valid_range_contains = |x| {
918+
if v.start() <= v.end() {
919+
*v.start() <= x && x <= *v.end()
920+
} else {
921+
*v.start() <= x || x <= *v.end()
922+
}
923+
};
924+
if valid_range_contains(end) {
925+
return None;
926+
}
927+
928+
Some((start, Scalar { value, valid_range: *v.start()..=end }))
929+
}
930+
}
931+
881932
#[derive(PartialEq, Eq, Hash, Debug)]
882933
pub struct LayoutDetails {
883934
pub variants: Variants,

0 commit comments

Comments
 (0)