Mercurial > repos > blastem
comparison backend_x86.c @ 2070:afc54649ebed segacd
Fix error in code write detection introduced from "wide" jcc change
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 30 Jan 2022 19:56:09 -0800 |
parents | 8ee7ecbf3f21 |
children | 0013362c320c |
comparison
equal
deleted
inserted
replaced
2069:8e51c0c3f2e3 | 2070:afc54649ebed |
---|---|
308 if (!is_write) { | 308 if (!is_write) { |
309 mov_ir(code, size == SZ_B ? 0xFF : 0xFFFF, opts->scratch1, size); | 309 mov_ir(code, size == SZ_B ? 0xFF : 0xFFFF, opts->scratch1, size); |
310 } | 310 } |
311 retn(code); | 311 retn(code); |
312 } | 312 } |
313 if (memmap[chunk].flags & MMAP_CODE) { | |
314 uint32_t added_offset; | |
315 if (memmap[chunk].mask == opts->address_mask) { | |
316 added_offset = (memmap[chunk].end - memmap[chunk].start) / (1 << opts->ram_flags_shift) / 8; | |
317 } else { | |
318 added_offset = (memmap[chunk].mask + 1) / (1 << opts->ram_flags_shift) / 8; | |
319 } | |
320 if (added_offset) { | |
321 ram_flags_off += added_offset; | |
322 } else { | |
323 ram_flags_off += 1; | |
324 } | |
325 } | |
326 if (lb_jcc) { | 313 if (lb_jcc) { |
327 if (need_wide_jcc) { | 314 if (need_wide_jcc) { |
328 *((int32_t*)lb_jcc) = code->cur - (lb_jcc+4); | 315 *((int32_t*)lb_jcc) = code->cur - (lb_jcc+4); |
329 } else if (code->cur - (lb_jcc+1) > 0x7f) { | 316 } else if (code->cur - (lb_jcc+1) > 0x7f) { |
330 need_wide_jcc = 1; | 317 need_wide_jcc = 1; |
348 *ub_jcc = code->cur - (ub_jcc+1); | 335 *ub_jcc = code->cur - (ub_jcc+1); |
349 } | 336 } |
350 | 337 |
351 ub_jcc = NULL; | 338 ub_jcc = NULL; |
352 } | 339 } |
340 if (memmap[chunk].flags & MMAP_CODE) { | |
341 uint32_t added_offset; | |
342 if (memmap[chunk].mask == opts->address_mask) { | |
343 added_offset = (memmap[chunk].end - memmap[chunk].start) / (1 << opts->ram_flags_shift) / 8; | |
344 } else { | |
345 added_offset = (memmap[chunk].mask + 1) / (1 << opts->ram_flags_shift) / 8; | |
346 } | |
347 if (added_offset) { | |
348 ram_flags_off += added_offset; | |
349 } else { | |
350 ram_flags_off += 1; | |
351 } | |
352 } | |
353 if (need_wide_jcc) { | 353 if (need_wide_jcc) { |
354 need_wide_jcc = 0; | 354 need_wide_jcc = 0; |
355 } | 355 } |
356 } | 356 } |
357 if (!is_write) { | 357 if (!is_write) { |