changeset 595:68f86ca4bb32

Add a couple of missing checks for the byte_swap and address_size parameters in gen_mem_fun
author Michael Pavone <pavone@retrodev.com>
date Fri, 26 Dec 2014 12:36:54 -0800
parents 086de8692932
children 9853bcce4729
files backend_x86.c
diffstat 1 files changed, 4 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);