Mercurial > repos > blastem
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); |