# HG changeset patch # User Michael Pavone # Date 1419626214 28800 # Node ID 68f86ca4bb3244a112e96260a79c7acaabb232f6 # Parent 086de86929327ecbfca5491528b531b3021f18f2 Add a couple of missing checks for the byte_swap and address_size parameters in gen_mem_fun diff -r 086de8692932 -r 68f86ca4bb32 backend_x86.c --- a/backend_x86.c Fri Dec 26 12:34:41 2014 -0800 +++ b/backend_x86.c Fri Dec 26 12:36:54 2014 -0800 @@ -154,7 +154,7 @@ retn(code); *good_addr = code->cur - (good_addr + 1); shr_ir(code, 1, adr_reg, opts->address_size); - } else { + } else if (opts->byte_swap) { xor_ir(code, 1, adr_reg, opts->address_size); } } else if ((memmap[chunk].flags & MMAP_ONLY_ODD) || (memmap[chunk].flags & MMAP_ONLY_EVEN)) { @@ -164,6 +164,9 @@ shr_ir(code, 8, opts->scratch1, SZ_W); } } + if (opts->address_size != SZ_D) { + movzx_rr(code, adr_reg, adr_reg, opts->address_size, SZ_D); + } if ((intptr_t)memmap[chunk].buffer <= 0x7FFFFFFF && (intptr_t)memmap[chunk].buffer >= -2147483648) { if (is_write) { mov_rrdisp(code, opts->scratch1, opts->scratch2, (intptr_t)memmap[chunk].buffer, tmp_size);