summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/codegen/bitfield_unit.rs30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/codegen/bitfield_unit.rs b/src/codegen/bitfield_unit.rs
index 3c7c9b7b..5256be07 100755
--- a/src/codegen/bitfield_unit.rs
+++ b/src/codegen/bitfield_unit.rs
@@ -27,7 +27,12 @@ where
let byte_index = index / 8;
let byte = self.storage.as_ref()[byte_index];
- let bit_index = index % 8;
+ let mut bit_index = index % 8;
+ #[cfg(target_endian = "big")]
+ {
+ // Adjust the index for endianness.
+ bit_index = 7 - bit_index;
+ }
let mask = 1 << bit_index;
byte & mask == mask
@@ -40,7 +45,12 @@ where
let byte_index = index / 8;
let byte = &mut self.storage.as_mut()[byte_index];
- let bit_index = index % 8;
+ let mut bit_index = index % 8;
+ #[cfg(target_endian = "big")]
+ {
+ // Adjust the index for endianness.
+ bit_index = 7 - bit_index;
+ }
let mask = 1 << bit_index;
if val {
@@ -60,7 +70,13 @@ where
for i in 0..(bit_width as usize) {
if self.get_bit(i + bit_offset) {
- val |= 1 << i;
+ let mut index = i;
+ #[cfg(target_endian = "big")]
+ {
+ // Adjust the index for endianness.
+ index = bit_width as usize - 1 - index;
+ }
+ val |= 1 << index;
}
}
@@ -76,7 +92,13 @@ where
for i in 0..(bit_width as usize) {
let mask = 1 << i;
let val_bit_is_set = val & mask == mask;
- self.set_bit(i + bit_offset, val_bit_is_set);
+ let mut index = i;
+ #[cfg(target_endian = "big")]
+ {
+ // Adjust the index for endianness.
+ index = bit_width as usize - 1 - index;
+ }
+ self.set_bit(index + bit_offset, val_bit_is_set);
}
}
}