Mercurial > repos > blastem
diff gen_x86.c @ 1692:5dacaef602a7 segacd
Merge from default
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 05 Jan 2019 00:58:08 -0800 |
parents | 5453aafa0656 |
children | 37afb9cf58be |
line wrap: on
line diff
--- a/gen_x86.c Tue Dec 19 00:49:13 2017 -0800 +++ b/gen_x86.c Sat Jan 05 00:58:08 2019 -0800 @@ -170,6 +170,12 @@ "b", "w", "d", "q" }; +#ifdef X86_64 +#define CHECK_DISP(disp) (disp <= 0x7FFFFFFF && disp >= -2147483648) +#else +#define CHECK_DISP(disp) 1 +#endif + void jmp_nocheck(code_info *code, code_ptr dest) { code_ptr out = code->cur; @@ -179,7 +185,7 @@ *(out++) = disp; } else { disp = dest-(out+5); - if (disp <= 0x7FFFFFFF && disp >= -2147483648) { + if (CHECK_DISP(disp)) { *(out++) = OP_JMP; *(out++) = disp; disp >>= 8; @@ -1917,7 +1923,7 @@ *(out++) = disp; } else { disp = dest-(out+6); - if (disp <= 0x7FFFFFFF && disp >= -2147483648) { + if (CHECK_DISP(disp)) { *(out++) = PRE_2BYTE; *(out++) = OP2_JCC | cc; *(out++) = disp; @@ -1944,7 +1950,7 @@ *(out++) = disp; } else { disp = dest-(out+5); - if (disp <= 0x7FFFFFFF && disp >= -2147483648) { + if (CHECK_DISP(disp)) { *(out++) = OP_JMP; *(out++) = disp; disp >>= 8; @@ -1991,7 +1997,7 @@ check_alloc_code(code, 5); code_ptr out = code->cur; ptrdiff_t disp = fun-(out+5); - if (disp <= 0x7FFFFFFF && disp >= -2147483648) { + if (CHECK_DISP(disp)) { *(out++) = OP_CALL; *(out++) = disp; disp >>= 8; @@ -2029,7 +2035,7 @@ check_alloc_code(code, 5); code_ptr out = code->cur; ptrdiff_t disp = fun-(out+5); - if (disp <= 0x7FFFFFFF && disp >= -2147483648) { + if (CHECK_DISP(disp)) { *(out++) = OP_CALL; *(out++) = disp; disp >>= 8; @@ -2146,6 +2152,7 @@ { push_r(code, arg_arr[i]); } + free(arg_arr); return stack_args * sizeof(void *) + adjust; }