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) {