The current heuristic that all ACPI tables will fit into one size-aligned 1 GiB region does not work on a recent Tigerlake notebook. A dynamic I/O memory mapping approach could be implemented with a scoped pattern like follows.
Memory::access(Memory::Range { first_byte, last_byte }, [&] (void *ptr) { ... });