On Fri Jul 3, 2026 at 2:09 PM BST, Alexandre Courbot wrote:
> On Fri Jul 3, 2026 at 9:35 PM JST, Gary Guo wrote:
>> On Fri Jul 3, 2026 at 3:57 AM BST, Alexandre Courbot wrote:
>>> On Fri Jun 26, 2026 at 11:45 PM JST, Gary Guo wrote:
>>> <...>
>>>> @@ -309,7 +312,11 @@ pub trait Io {
>>>> // Always inline to optimize out error path of `build_assert`.
>>>> #[inline(always)]
>>>> fn io_addr_assert<U>(&self, offset: usize) -> usize {
>>>> - build_assert!(offset_valid::<U>(offset, Self::Target::MIN_SIZE));
>>>> + // We cannot check alignment with `offset_valid` using
>>>> `self.addr()`. So set 0 for it and
>>>> + // ensure alignment by checking that the alignment of `U` is
>>>> smaller or equal to the
>>>> + // alignment of `Self::Target`.
>>>> + const_assert!(Alignment::of::<U>().as_usize() <=
>>>> Self::Target::MIN_ALIGN.as_usize());
>>>
>>> With `Region::MIN_ALIGN` being `4`, my understanding is that this will
>>> make `read64` and other infallible 64-bit accessors unusable on untyped
>>> I/O regions?
>>
>> That's correct.
>
> Isn't that a limitation we may want to eventually address? The fallible
> accessors are still usable, but it seems arbitrary that the non-fallible
> ones stop at 32 bits...
It'd probably be solved by having typed regions. 32-bit is the most common
alignment for I/O memory, so that's chosen.
None of the existing Rust drivers require 64-bit accessors yet.
Best,
Gary