Mercurial > repos > blastem
diff backend_x86.c @ 2113:0013362c320c
Fix handling of ram code flag offset calculation for ranges that are not an even multiple of the code flag page size
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 13 Feb 2022 22:52:52 -0800 |
parents | afc54649ebed |
children | 8554751f17b5 |
line wrap: on
line diff
--- a/backend_x86.c Sun Feb 13 22:52:19 2022 -0800 +++ b/backend_x86.c Sun Feb 13 22:52:52 2022 -0800 @@ -338,17 +338,13 @@ ub_jcc = NULL; } if (memmap[chunk].flags & MMAP_CODE) { - uint32_t added_offset; - if (memmap[chunk].mask == opts->address_mask) { - added_offset = (memmap[chunk].end - memmap[chunk].start) / (1 << opts->ram_flags_shift) / 8; - } else { - added_offset = (memmap[chunk].mask + 1) / (1 << opts->ram_flags_shift) / 8; + uint32_t size = chunk_size(opts, memmap + chunk); + uint32_t size_round_mask = (1 << (opts->ram_flags_shift + 3)) - 1; + if (size & size_round_mask) { + size &= ~size_round_mask; + size += size_round_mask + 1; } - if (added_offset) { - ram_flags_off += added_offset; - } else { - ram_flags_off += 1; - } + ram_flags_off += size >> (opts->ram_flags_shift + 3); } if (need_wide_jcc) { need_wide_jcc = 0;