[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [V2 PATCH 6/8] target-ppc: Bug Fix: mulldo OV Detection
From: |
Tom Musta |
Subject: |
[Qemu-ppc] [V2 PATCH 6/8] target-ppc: Bug Fix: mulldo OV Detection |
Date: |
Tue, 12 Aug 2014 08:45:08 -0500 |
Fix the code to properly detect overflow; the 128 bit signed
product must have all zeroes or all ones in the first 65 bits
otherwise OV should be set.
Example:
R3 45F086A5D5887509
R4 0000000000000002
mulldo 3,3,4
Should set XER[OV].
Signed-off-by: Tom Musta <address@hidden>
---
target-ppc/int_helper.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index f6e8846..e83a25d 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -32,12 +32,22 @@ uint64_t helper_mulldo(CPUPPCState *env, uint64_t arg1,
uint64_t arg2)
uint64_t tl;
muls64(&tl, (uint64_t *)&th, arg1, arg2);
- /* If th != 0 && th != -1, then we had an overflow */
- if (likely((uint64_t)(th + 1) <= 1)) {
+
+ /* th should either contain all 1 bits or all 0 bits and should
+ * match the sign bit of tl; otherwise we have overflowed. */
+
+ if ((int64_t)tl < 0) {
+ if (likely(th == -1LL)) {
+ env->ov = 0;
+ } else {
+ env->so = env->ov = 1;
+ }
+ } else if (likely(th == 0LL)) {
env->ov = 0;
} else {
env->so = env->ov = 1;
}
+
return (int64_t)tl;
}
#endif
--
1.7.1
- [Qemu-ppc] [V2 PATCH 0/8] target-ppc: Bug Fixes for 64 Bit FXU Instructions, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 1/8] target-ppc: Bug Fix: rlwinm, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 2/8] target-ppc: Bug Fix: rlwnm, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 3/8] target-ppc: Bug Fix: rlwimi, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 4/8] target-ppc: Bug Fix: mullw, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 5/8] target-ppc: Bug Fix: mullwo, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 6/8] target-ppc: Bug Fix: mulldo OV Detection,
Tom Musta <=
- [Qemu-ppc] [V2 PATCH 7/8] target-ppc: Bug Fix: srawi, Tom Musta, 2014/08/12
- [Qemu-ppc] [V2 PATCH 8/8] target-ppc: Bug Fix: srad, Tom Musta, 2014/08/12
- Re: [Qemu-ppc] [V2 PATCH 0/8] target-ppc: Bug Fixes for 64 Bit FXU Instructions, Alexander Graf, 2014/08/12