comparison m68k_core_x86.c @ 732:61467483eb31

Fix div instruction when dest is d0 in 32-bit build
author Michael Pavone <pavone@retrodev.com>
date Mon, 25 May 2015 13:21:24 -0700
parents 59a98179d3ba
children fbda8e865dae
comparison
equal deleted inserted replaced
731:0835cd3dfc36 732:61467483eb31
1696 shl_irdisp(code, 16, dst_op->base, dst_op->disp, SZ_D); 1696 shl_irdisp(code, 16, dst_op->base, dst_op->disp, SZ_D);
1697 mov_rrdisp(code, RAX, dst_op->base, dst_op->disp, SZ_W); 1697 mov_rrdisp(code, RAX, dst_op->base, dst_op->disp, SZ_W);
1698 } 1698 }
1699 cmp_ir(code, 0, RAX, SZ_W); 1699 cmp_ir(code, 0, RAX, SZ_W);
1700 pop_r(code, RAX); 1700 pop_r(code, RAX);
1701 pop_r(code, RDX); 1701 if (dst_op->base == RDX) {
1702 update_flags(opts, V0|Z|N); 1702 update_flags(opts, V0|Z|N);
1703 add_ir(code, sizeof(void *), RSP, SZ_D);
1704 } else {
1705 pop_r(code, RDX);
1706 update_flags(opts, V0|Z|N);
1707 }
1703 code_ptr end_off = code->cur + 1; 1708 code_ptr end_off = code->cur + 1;
1704 jmp(code, code->cur + 2); 1709 jmp(code, code->cur + 2);
1705 *norm_off = code->cur - (norm_off + 1); 1710 *norm_off = code->cur - (norm_off + 1);
1706 if (inst->op == M68K_DIVS) { 1711 if (inst->op == M68K_DIVS) {
1707 *skip_sec_check = code->cur - (skip_sec_check+1); 1712 *skip_sec_check = code->cur - (skip_sec_check+1);