diff --git a/src/nouveau/rust/bitview/lib.rs b/src/nouveau/rust/bitview/lib.rs index f4e88783175..18e9b5575dc 100644 --- a/src/nouveau/rust/bitview/lib.rs +++ b/src/nouveau/rust/bitview/lib.rs @@ -272,6 +272,30 @@ impl SetField for T { } } +pub trait SetField2 { + fn set_field2( + &mut self, + range1: Range, + range2: Range, + val: F, + ); +} + +impl SetField2 for T { + fn set_field2( + &mut self, + range1: Range, + range2: Range, + val: F, + ) { + let bits1 = range1.len(); + let bits2 = range2.len(); + let val = val.to_field_bits(bits1 + bits2); + self.set_field_u64(range1, val & u64_mask_for_bits(bits1)); + self.set_field_u64(range2, val >> bits1); + } +} + macro_rules! impl_to_field_bits_for_uN { ($typ: ident) => { impl ToFieldBits for $typ {