comparison m68k_to_x86.c @ 442:1a48b31f5316

Fix carry flag on rotate when the register provided rotate bit count is exactly 32
author Mike Pavone <pavone@retrodev.com>
date Wed, 17 Jul 2013 00:18:28 -0700
parents 306986209cba
children 9ac3828ea560
comparison
equal deleted inserted replaced
441:112d5d0830fd 442:1a48b31f5316
3555 dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D); 3555 dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D);
3556 dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D); 3556 dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D);
3557 dst = cmp_ir(dst, 32, SCRATCH1, SZ_B); 3557 dst = cmp_ir(dst, 32, SCRATCH1, SZ_B);
3558 norm_off = dst+1; 3558 norm_off = dst+1;
3559 dst = jcc(dst, CC_L, dst+2); 3559 dst = jcc(dst, CC_L, dst+2);
3560 dst = sub_ir(dst, 32, SCRATCH1, SZ_B);
3560 if (dst_op.mode == MODE_REG_DIRECT) { 3561 if (dst_op.mode == MODE_REG_DIRECT) {
3561 if (inst->op == M68K_ROL) { 3562 if (inst->op == M68K_ROL) {
3562 dst = rol_ir(dst, 31, dst_op.base, inst->extra.size); 3563 dst = rol_ir(dst, 31, dst_op.base, inst->extra.size);
3563 dst = rol_ir(dst, 1, dst_op.base, inst->extra.size); 3564 dst = rol_ir(dst, 1, dst_op.base, inst->extra.size);
3564 } else { 3565 } else {
3572 } else { 3573 } else {
3573 dst = ror_irdisp8(dst, 31, dst_op.base, dst_op.disp, inst->extra.size); 3574 dst = ror_irdisp8(dst, 31, dst_op.base, dst_op.disp, inst->extra.size);
3574 dst = ror_irdisp8(dst, 1, dst_op.base, dst_op.disp, inst->extra.size); 3575 dst = ror_irdisp8(dst, 1, dst_op.base, dst_op.disp, inst->extra.size);
3575 } 3576 }
3576 } 3577 }
3577 dst = sub_ir(dst, 32, SCRATCH1, SZ_B);
3578 *norm_off = dst - (norm_off+1); 3578 *norm_off = dst - (norm_off+1);
3579 if (dst_op.mode == MODE_REG_DIRECT) { 3579 if (dst_op.mode == MODE_REG_DIRECT) {
3580 if (inst->op == M68K_ROL) { 3580 if (inst->op == M68K_ROL) {
3581 dst = rol_clr(dst, dst_op.base, inst->extra.size); 3581 dst = rol_clr(dst, dst_op.base, inst->extra.size);
3582 } else { 3582 } else {