ad9959: refactor pad()
@@ -596,6 +596,22 @@ impl ProfileSerializer {
self.index += value.len() + 1;
}
+ fn pad(&mut self) {
+ // Pad the buffer to 32-bit (4 byte) alignment by adding dummy writes to CSR and LSRR.
+ match self.index & 3 {
+ 3 => {
+ // For a level of 3, we have to pad with 5 bytes to align things.
+ self.add_write(Register::CSR, &[(self.mode as u8) << 1]);
+ self.add_write(Register::LSRR, &[0, 0]);
+ }
+ 2 => self.add_write(Register::CSR, &[(self.mode as u8) << 1]),
+ 1 => self.add_write(Register::LSRR, &[0, 0]),
+ 0 => {}
+
+ _ => unreachable!(),
+ }
+ }
+
/// Get the serialized profile as a slice of 32-bit words.
///
/// # Note
@@ -604,21 +620,8 @@ impl ProfileSerializer {
///
/// # Returns
/// A slice of `u32` words representing the serialized profile.
- pub fn finalize<'a>(&'a mut self) -> &[u32] {
- // Pad the buffer to 32-bit alignment by adding dummy writes to CSR and LSRR.
- let padding = 4 - (self.index % 4);
- match padding {
- 1 => {
- // For a pad size of 1, we have to pad with 5 bytes to align things.
- self.add_write(Register::CSR, &[(self.mode as u8) << 1]);
- self.add_write(Register::LSRR, &[0, 0]);
- }
- 2 => self.add_write(Register::CSR, &[(self.mode as u8) << 1]),
- 3 => self.add_write(Register::LSRR, &[0, 0]),
- 4 => {}
-
- _ => unreachable!(),
- }
+ pub fn finalize<'a>(&'a mut self) -> &'a [u32] {
+ self.pad();
unsafe {
core::slice::from_raw_parts::<'a, u32>(
&self.data as *const _ as *const u32,
