[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 057/111] m68k: correctly compute divsl
From: |
Bryce Lanham |
Subject: |
[Qemu-devel] [PATCH 057/111] m68k: correctly compute divsl |
Date: |
Wed, 17 Aug 2011 15:47:02 -0500 |
From: Laurent Vivier <address@hidden>
- put results in QUADH and DIV1
- correctly compute overflow flag (idea from aranym/UAE)
Signed-off-by: Laurent Vivier <address@hidden>
---
target-m68k/op_helper.c | 34 ++++++++++++++++++----------------
target-m68k/translate.c | 2 +-
2 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c
index c270259..d180c80 100644
--- a/target-m68k/op_helper.c
+++ b/target-m68k/op_helper.c
@@ -290,37 +290,39 @@ void HELPER(divu64)(CPUState *env)
/* Don't modify destination if overflow occured. */
if ((flags & CCF_V) == 0) {
env->div1 = quot;
- env->div2 = rem;
+ env->quadh = rem;
}
env->cc_dest = flags;
}
void HELPER(divs64)(CPUState *env)
{
- int32_t num;
+ uint32_t num;
int32_t den;
- int32_t quot;
+ int64_t quot;
int32_t rem;
int32_t flags;
+ int64_t quad;
num = env->div1;
den = env->div2;
if (den == 0)
raise_exception(EXCP_DIV0);
- quot = (num | ((int64_t)env->quadh << 32)) / den;
- rem = (num | ((int64_t)env->quadh << 32)) % den;
- rem = num % den;
- flags = 0;
- if (quot != (int32_t)quot)
- flags |= CCF_V;
- if (quot == 0)
- flags |= CCF_Z;
- else if (quot < 0)
- flags |= CCF_N;
- /* Don't modify destination if overflow occured. */
- if ((flags & CCF_V) == 0) {
+ quad = num | ((int64_t)env->quadh << 32);
+ quot = quad / (int64_t)den;
+ rem = quad % (int64_t)den;
+
+ if ((quot & 0xffffffff80000000ULL) &&
+ (quot & 0xffffffff80000000ULL) != 0xffffffff80000000ULL) {
+ flags = (env->cc_dest & ~ CCF_C) | CCF_V;
+ } else {
+ flags = 0;
+ if (quot == 0)
+ flags |= CCF_Z;
+ else if ((int32_t)quot < 0)
+ flags |= CCF_N;
env->div1 = quot;
- env->div2 = rem;
+ env->quadh = rem;
}
env->cc_dest = flags;
}
diff --git a/target-m68k/translate.c b/target-m68k/translate.c
index b011a5e..0808673 100644
--- a/target-m68k/translate.c
+++ b/target-m68k/translate.c
@@ -1055,7 +1055,7 @@ DISAS_INSN(divl)
}
tcg_gen_mov_i32(num, QREG_DIV1);
if (!TCGV_EQUAL(num, reg))
- tcg_gen_mov_i32(reg, QREG_DIV2);
+ tcg_gen_mov_i32(reg, QREG_QUADH);
s->cc_op = CC_OP_FLAGS;
return;
}
--
1.7.2.3
- [Qemu-devel] [PATCH 070/111] m68k: initialize FRegs, define pickNaN(), (continued)
- [Qemu-devel] [PATCH 070/111] m68k: initialize FRegs, define pickNaN(), Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 042/111] m68k: set X flag according size of operand Set X flag correctly for addsub, arith_im, addsubq., Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 085/111] m68k: add fatan instruction, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 073/111] m68k: add cmpm instruction, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 055/111] m68k: Correct bfclr in register case., Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 054/111] m68k: Added ULL to 64 bit integer in helper.c, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 040/111] m68k: add sbcd instruction, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 082/111] m68k: add fmod instruction, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 068/111] m68k: correct addsubq, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 053/111] m68k: for bitfield opcodes, correct operands corruption, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 057/111] m68k: correctly compute divsl,
Bryce Lanham <=
- [Qemu-devel] [PATCH 027/111] m68k: add DBcc instruction., Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 083/111] m68k: flush flags before negx instruction., Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 084/111] m68k: correct fmovemx FP registers order., Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 047/111] m68k: use read_imm1() when it is possible, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 079/111] m68k: add fsin instruction, Bryce Lanham, 2011/08/17
- [Qemu-devel] [PATCH 087/111] m68k: fcmp correctly compares infinity., Bryce Lanham, 2011/08/17
- Re: [Qemu-devel] [RFC][PATCH 000/111] QEMU m68k core additions, Anthony Liguori, 2011/08/17