diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-07-01 05:07:36 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-01 05:07:36 -0400 |
commit | c3955ddeac236f4a6b967d5b8ddc8dc21238d152 (patch) | |
tree | a389e0dfd1a4ee9b9b156d560060ac2f12cc1a6f | |
parent | 0176a76fbfc861c70f7e93289c1c114de16e7282 (diff) | |
parent | a64289400ccbd58d12341da26dd1f3bebb17f845 (diff) |
Auto merge of #1342 - psumbera:master, r=emilio
Fix bitfields on big-endian machines.
Fixes #1340
29 files changed, 754 insertions, 144 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); } } } diff --git a/tests/expectations/tests/bitfield-32bit-overflow.rs b/tests/expectations/tests/bitfield-32bit-overflow.rs index 7270649e..224062fa 100644 --- a/tests/expectations/tests/bitfield-32bit-overflow.rs +++ b/tests/expectations/tests/bitfield-32bit-overflow.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/bitfield-large.rs b/tests/expectations/tests/bitfield-large.rs index 7b93f119..4f8bc177 100644 --- a/tests/expectations/tests/bitfield-large.rs +++ b/tests/expectations/tests/bitfield-large.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/bitfield-method-same-name.rs b/tests/expectations/tests/bitfield-method-same-name.rs index b8700605..81678b68 100644 --- a/tests/expectations/tests/bitfield-method-same-name.rs +++ b/tests/expectations/tests/bitfield-method-same-name.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/bitfield_align.rs b/tests/expectations/tests/bitfield_align.rs index 9821aa6f..0b28a3fa 100644 --- a/tests/expectations/tests/bitfield_align.rs +++ b/tests/expectations/tests/bitfield_align.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/bitfield_align_2.rs b/tests/expectations/tests/bitfield_align_2.rs index 5d63699d..7def5ebf 100644 --- a/tests/expectations/tests/bitfield_align_2.rs +++ b/tests/expectations/tests/bitfield_align_2.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/bitfield_method_mangling.rs b/tests/expectations/tests/bitfield_method_mangling.rs index e557f92b..f0fafe8f 100644 --- a/tests/expectations/tests/bitfield_method_mangling.rs +++ b/tests/expectations/tests/bitfield_method_mangling.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/derive-bitfield-method-same-name.rs b/tests/expectations/tests/derive-bitfield-method-same-name.rs index f9d29afd..43168660 100644 --- a/tests/expectations/tests/derive-bitfield-method-same-name.rs +++ b/tests/expectations/tests/derive-bitfield-method-same-name.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/derive-debug-bitfield.rs b/tests/expectations/tests/derive-debug-bitfield.rs index 3743b8d9..a231c643 100644 --- a/tests/expectations/tests/derive-debug-bitfield.rs +++ b/tests/expectations/tests/derive-debug-bitfield.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/derive-partialeq-bitfield.rs b/tests/expectations/tests/derive-partialeq-bitfield.rs index a3715b0c..e707ca77 100644 --- a/tests/expectations/tests/derive-partialeq-bitfield.rs +++ b/tests/expectations/tests/derive-partialeq-bitfield.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/divide-by-zero-in-struct-layout.rs b/tests/expectations/tests/divide-by-zero-in-struct-layout.rs index 97093321..f0a6e7b0 100644 --- a/tests/expectations/tests/divide-by-zero-in-struct-layout.rs +++ b/tests/expectations/tests/divide-by-zero-in-struct-layout.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/issue-1034.rs b/tests/expectations/tests/issue-1034.rs index 687c4305..ea8626a5 100644 --- a/tests/expectations/tests/issue-1034.rs +++ b/tests/expectations/tests/issue-1034.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/issue-1076-unnamed-bitfield-alignment.rs b/tests/expectations/tests/issue-1076-unnamed-bitfield-alignment.rs index a8a52099..b2837592 100644 --- a/tests/expectations/tests/issue-1076-unnamed-bitfield-alignment.rs +++ b/tests/expectations/tests/issue-1076-unnamed-bitfield-alignment.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/issue-739-pointer-wide-bitfield.rs b/tests/expectations/tests/issue-739-pointer-wide-bitfield.rs index 81c32bbf..4a488c21 100644 --- a/tests/expectations/tests/issue-739-pointer-wide-bitfield.rs +++ b/tests/expectations/tests/issue-739-pointer-wide-bitfield.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/issue-816.rs b/tests/expectations/tests/issue-816.rs index 555769a2..f2dd5be7 100644 --- a/tests/expectations/tests/issue-816.rs +++ b/tests/expectations/tests/issue-816.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/jsval_layout_opaque.rs b/tests/expectations/tests/jsval_layout_opaque.rs index 7e047f6a..27de4301 100644 --- a/tests/expectations/tests/jsval_layout_opaque.rs +++ b/tests/expectations/tests/jsval_layout_opaque.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/jsval_layout_opaque_1_0.rs b/tests/expectations/tests/jsval_layout_opaque_1_0.rs index 29ce27ad..145a58e7 100644 --- a/tests/expectations/tests/jsval_layout_opaque_1_0.rs +++ b/tests/expectations/tests/jsval_layout_opaque_1_0.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/layout_align.rs b/tests/expectations/tests/layout_align.rs index a0f7f8ad..a101820d 100644 --- a/tests/expectations/tests/layout_align.rs +++ b/tests/expectations/tests/layout_align.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/layout_eth_conf.rs b/tests/expectations/tests/layout_eth_conf.rs index 71d03ef6..9fb9e9c7 100644 --- a/tests/expectations/tests/layout_eth_conf.rs +++ b/tests/expectations/tests/layout_eth_conf.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/layout_eth_conf_1_0.rs b/tests/expectations/tests/layout_eth_conf_1_0.rs index e9a09f54..98dd4bf9 100644 --- a/tests/expectations/tests/layout_eth_conf_1_0.rs +++ b/tests/expectations/tests/layout_eth_conf_1_0.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/layout_mbuf.rs b/tests/expectations/tests/layout_mbuf.rs index c42cd0ba..7911b78d 100644 --- a/tests/expectations/tests/layout_mbuf.rs +++ b/tests/expectations/tests/layout_mbuf.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/layout_mbuf_1_0.rs b/tests/expectations/tests/layout_mbuf_1_0.rs index 2fd51418..485d82f8 100644 --- a/tests/expectations/tests/layout_mbuf_1_0.rs +++ b/tests/expectations/tests/layout_mbuf_1_0.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/only_bitfields.rs b/tests/expectations/tests/only_bitfields.rs index 09bd8737..7a512ed5 100644 --- a/tests/expectations/tests/only_bitfields.rs +++ b/tests/expectations/tests/only_bitfields.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/struct_with_bitfields.rs b/tests/expectations/tests/struct_with_bitfields.rs index a45472d5..7f3887b4 100644 --- a/tests/expectations/tests/struct_with_bitfields.rs +++ b/tests/expectations/tests/struct_with_bitfields.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } diff --git a/tests/expectations/tests/union_bitfield.rs b/tests/expectations/tests/union_bitfield.rs index 1f75ee4d..e8d11b59 100644 --- a/tests/expectations/tests/union_bitfield.rs +++ b/tests/expectations/tests/union_bitfield.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/union_bitfield_1_0.rs b/tests/expectations/tests/union_bitfield_1_0.rs index a85fad4c..2d3b1257 100644 --- a/tests/expectations/tests/union_bitfield_1_0.rs +++ b/tests/expectations/tests/union_bitfield_1_0.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/union_with_anon_struct_bitfield.rs b/tests/expectations/tests/union_with_anon_struct_bitfield.rs index 9e671741..c82d3334 100644 --- a/tests/expectations/tests/union_with_anon_struct_bitfield.rs +++ b/tests/expectations/tests/union_with_anon_struct_bitfield.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/union_with_anon_struct_bitfield_1_0.rs b/tests/expectations/tests/union_with_anon_struct_bitfield_1_0.rs index f2d63c3e..737e98d8 100644 --- a/tests/expectations/tests/union_with_anon_struct_bitfield_1_0.rs +++ b/tests/expectations/tests/union_with_anon_struct_bitfield_1_0.rs @@ -1,9 +1,7 @@ /* automatically generated by rust-bindgen */ - #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] - #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct __BindgenBitfieldUnit<Storage, Align> @@ -30,7 +28,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 @@ -43,7 +46,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 { @@ -63,7 +71,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; } } @@ -79,7 +93,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); } } } diff --git a/tests/expectations/tests/weird_bitfields.rs b/tests/expectations/tests/weird_bitfields.rs index 8ab2987c..e872600d 100644 --- a/tests/expectations/tests/weird_bitfields.rs +++ b/tests/expectations/tests/weird_bitfields.rs @@ -28,7 +28,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 @@ -41,7 +46,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 { @@ -61,7 +71,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; } } @@ -77,7 +93,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); } } } |