comparison backend_x86.c @ 892:381a3b2f6065

Fix a bug in generating memory access functions when more than one MMAP_CODE region exists
author Michael Pavone <pavone@retrodev.com>
date Sun, 22 Nov 2015 14:42:36 -0800
parents 656b1fded67f
children a7774fc2de4b
comparison
equal deleted inserted replaced
891:90d54ccf9557 892:381a3b2f6065
192 } 192 }
193 if (is_write && (memmap[chunk].flags & MMAP_CODE)) { 193 if (is_write && (memmap[chunk].flags & MMAP_CODE)) {
194 mov_rr(code, opts->scratch2, opts->scratch1, opts->address_size); 194 mov_rr(code, opts->scratch2, opts->scratch1, opts->address_size);
195 shr_ir(code, opts->ram_flags_shift, opts->scratch1, opts->address_size); 195 shr_ir(code, opts->ram_flags_shift, opts->scratch1, opts->address_size);
196 bt_rrdisp(code, opts->scratch1, opts->context_reg, ram_flags_off, opts->address_size); 196 bt_rrdisp(code, opts->scratch1, opts->context_reg, ram_flags_off, opts->address_size);
197 //FIXME: These adjustments to ram_flags_off need to take into account bits vs bytes and ram_flags_shift
198 if (memmap[chunk].mask == opts->address_mask) { 197 if (memmap[chunk].mask == opts->address_mask) {
199 ram_flags_off += memmap[chunk].end - memmap[chunk].start; 198 ram_flags_off += (memmap[chunk].end - memmap[chunk].start) / (1 << opts->ram_flags_shift) / 8; ;
200 } else { 199 } else {
201 ram_flags_off += memmap[chunk].mask + 1; 200 ram_flags_off += (memmap[chunk].mask + 1) / (1 << opts->ram_flags_shift) / 8;;
202 } 201 }
203 code_ptr not_code = code->cur + 1; 202 code_ptr not_code = code->cur + 1;
204 jcc(code, CC_NC, code->cur + 2); 203 jcc(code, CC_NC, code->cur + 2);
205 call(code, opts->save_context); 204 call(code, opts->save_context);
206 call_args(code, opts->handle_code_write, 2, opts->scratch2, opts->context_reg); 205 call_args(code, opts->handle_code_write, 2, opts->scratch2, opts->context_reg);