[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PATCH v1 03/15] s390x/tcg: Factor out conversion of softfl
From: |
David Hildenbrand |
Subject: |
[qemu-s390x] [PATCH v1 03/15] s390x/tcg: Factor out conversion of softfloat exceptions |
Date: |
Tue, 12 Feb 2019 12:02:56 +0100 |
We want to reuse that function in vector instruction context. While at it,
cleanup the code, using defines for magic values and avoiding the
handcrafted bit conversion.
Signed-off-by: David Hildenbrand <address@hidden>
---
target/s390x/fpu_helper.c | 25 +++++++++++++------------
target/s390x/internal.h | 7 +++++++
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/target/s390x/fpu_helper.c b/target/s390x/fpu_helper.c
index f9ec519067..60f589608e 100644
--- a/target/s390x/fpu_helper.c
+++ b/target/s390x/fpu_helper.c
@@ -36,10 +36,18 @@
#define RET128(F) (env->retxl = F.low, F.high)
-#define convert_bit(mask, from, to) \
- (to < from \
- ? (mask / (from / to)) & to \
- : (mask & from) * (to / from))
+uint8_t s390_softfloat_exc_to_ieee(unsigned int exc)
+{
+ uint8_t s390_exc = 0;
+
+ s390_exc |= (exc & float_flag_invalid) ? S390_IEEE_MASK_INVALID : 0;
+ s390_exc |= (exc & float_flag_divbyzero) ? S390_IEEE_MASK_DIVBYZERO : 0;
+ s390_exc |= (exc & float_flag_overflow) ? S390_IEEE_MASK_OVERFLOW : 0;
+ s390_exc |= (exc & float_flag_underflow) ? S390_IEEE_MASK_UNDERFLOW : 0;
+ s390_exc |= (exc & float_flag_inexact) ? S390_IEEE_MASK_INEXACT : 0;
+
+ return s390_exc;
+}
/* Should be called after any operation that may raise IEEE exceptions. */
static void handle_exceptions(CPUS390XState *env, uintptr_t retaddr)
@@ -53,14 +61,7 @@ static void handle_exceptions(CPUS390XState *env, uintptr_t
retaddr)
return;
}
env->fpu_status.float_exception_flags = 0;
-
- /* Convert softfloat exception bits to s390 exception bits. */
- s390_exc = 0;
- s390_exc |= convert_bit(qemu_exc, float_flag_invalid, 0x80);
- s390_exc |= convert_bit(qemu_exc, float_flag_divbyzero, 0x40);
- s390_exc |= convert_bit(qemu_exc, float_flag_overflow, 0x20);
- s390_exc |= convert_bit(qemu_exc, float_flag_underflow, 0x10);
- s390_exc |= convert_bit(qemu_exc, float_flag_inexact, 0x08);
+ s390_exc = s390_softfloat_exc_to_ieee(qemu_exc);
/* Install the exceptions that we raised. */
env->fpc |= s390_exc << 16;
diff --git a/target/s390x/internal.h b/target/s390x/internal.h
index f2a771e2b4..e1c0b1bd3b 100644
--- a/target/s390x/internal.h
+++ b/target/s390x/internal.h
@@ -308,6 +308,13 @@ void s390x_cpu_do_unaligned_access(CPUState *cs, vaddr
addr,
uint32_t set_cc_nz_f32(float32 v);
uint32_t set_cc_nz_f64(float64 v);
uint32_t set_cc_nz_f128(float128 v);
+#define S390_IEEE_MASK_INVALID 0x80
+#define S390_IEEE_MASK_DIVBYZERO 0x40
+#define S390_IEEE_MASK_OVERFLOW 0x20
+#define S390_IEEE_MASK_UNDERFLOW 0x10
+#define S390_IEEE_MASK_INEXACT 0x08
+#define S390_IEEE_MASK_QUANTUM 0x04
+uint8_t s390_softfloat_exc_to_ieee(unsigned int exc);
/* gdbstub.c */
--
2.17.2
- [qemu-s390x] [PATCH v1 00/15] s390x/tcg: Implement floating-point extension facility, (continued)
- [qemu-s390x] [PATCH v1 00/15] s390x/tcg: Implement floating-point extension facility, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 04/15] s390x/tcg: Fix parts of IEEE exception handling, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 05/15] s390x/tcg: Hide IEEE underflows in some scenarios, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 06/15] s390x/tcg: Refactor SET FPC AND SIGNAL handling, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 01/15] s390x/tcg: Fix TEST DATA CLASS instructions, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 03/15] s390x/tcg: Factor out conversion of softfloat exceptions,
David Hildenbrand <=
- [qemu-s390x] [PATCH v1 07/15] s390x/tcg: Fix simulated-IEEE exceptions, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 09/15] s390x/tcg: Check for exceptions in SET BFP ROUNDING MODE, David Hildenbrand, 2019/02/12
- [qemu-s390x] [PATCH v1 08/15] s390x/tcg: Handle SET FPC AND LOAD FPC 3-bit BFP rounding modes, David Hildenbrand, 2019/02/12