[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/60] arm: Use symbolic device names for vfp cmp
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 01/60] arm: Use symbolic device names for vfp cmp |
Date: |
Fri, 27 Sep 2013 02:47:55 +0200 |
The VFP cmp and cmpe helpers are quite cryptic to understand. This is
mostly thanks to the fact that they hardcode values rather than use
their symbolic counterparts.
Make them use names instead.
Signed-off-by: Alexander Graf <address@hidden>
---
target-arm/helper.c | 50 ++++++++++++++++++++++++++------------------------
1 file changed, 26 insertions(+), 24 deletions(-)
diff --git a/target-arm/helper.c b/target-arm/helper.c
index e51ef20..3ec56d6 100644
--- a/target-arm/helper.c
+++ b/target-arm/helper.c
@@ -3603,30 +3603,32 @@ float64 VFP_HELPER(sqrt, d)(float64 a, CPUARMState *env)
}
/* XXX: check quiet/signaling case */
-#define DO_VFP_cmp(p, type) \
-void VFP_HELPER(cmp, p)(type a, type b, CPUARMState *env) \
-{ \
- uint32_t flags; \
- switch(type ## _compare_quiet(a, b, &env->vfp.fp_status)) { \
- case 0: flags = 0x6; break; \
- case -1: flags = 0x8; break; \
- case 1: flags = 0x2; break; \
- default: case 2: flags = 0x3; break; \
- } \
- env->vfp.xregs[ARM_VFP_FPSCR] = (flags << 28) \
- | (env->vfp.xregs[ARM_VFP_FPSCR] & 0x0fffffff); \
-} \
-void VFP_HELPER(cmpe, p)(type a, type b, CPUARMState *env) \
-{ \
- uint32_t flags; \
- switch(type ## _compare(a, b, &env->vfp.fp_status)) { \
- case 0: flags = 0x6; break; \
- case -1: flags = 0x8; break; \
- case 1: flags = 0x2; break; \
- default: case 2: flags = 0x3; break; \
- } \
- env->vfp.xregs[ARM_VFP_FPSCR] = (flags << 28) \
- | (env->vfp.xregs[ARM_VFP_FPSCR] & 0x0fffffff); \
+#define DO_VFP_cmp(p, type)
\
+void VFP_HELPER(cmp, p)(type a, type b, CPUARMState *env)
\
+{
\
+ uint32_t flags;
\
+ switch(type ## _compare_quiet(a, b, &env->vfp.fp_status)) {
\
+ case float_relation_equal: flags = PSTATE_Z | PSTATE_C; break;
\
+ case float_relation_less: flags = PSTATE_N; break;
\
+ case float_relation_greater: flags = PSTATE_C; break;
\
+ default:
\
+ case float_relation_unordered: flags = PSTATE_V | PSTATE_C; break;
\
+ }
\
+ env->vfp.xregs[ARM_VFP_FPSCR] = (flags << 28)
\
+ | (env->vfp.xregs[ARM_VFP_FPSCR] & 0x0fffffff);
\
+}
\
+void VFP_HELPER(cmpe, p)(type a, type b, CPUARMState *env)
\
+{
\
+ uint32_t flags;
\
+ switch(type ## _compare(a, b, &env->vfp.fp_status)) {
\
+ case float_relation_equal: flags = PSTATE_Z | PSTATE_C; break;
\
+ case float_relation_less: flags = PSTATE_N; break;
\
+ case float_relation_greater: flags = PSTATE_C; break;
\
+ default:
\
+ case float_relation_unordered: flags = PSTATE_V | PSTATE_C; break;
\
+ }
\
+ env->vfp.xregs[ARM_VFP_FPSCR] = (flags << 28)
\
+ | (env->vfp.xregs[ARM_VFP_FPSCR] & 0x0fffffff);
\
}
DO_VFP_cmp(s, float32)
DO_VFP_cmp(d, float64)
--
1.7.12.4
- [Qemu-devel] [PATCH 00/60] AArch64 TCG emulation support, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 14/60] AArch64: Add orr instruction emulation, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 02/60] arm: Give the fpscr rounding modes names, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 01/60] arm: Use symbolic device names for vfp cmp,
Alexander Graf <=
- [Qemu-devel] [PATCH 13/60] AArch64: Add stubs for a64 specific helpers, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 10/60] AArch64: Add handling for br instructions, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 05/60] softfloat: Add stubs for int16 conversion, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 12/60] AArch64: Add ldarx style instruction emulation, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 09/60] AArch64: Add b and bl handling, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 08/60] AArch64: Add support to print VFP registers in CPU, Alexander Graf, 2013/09/26
- [Qemu-devel] [PATCH 22/60] AArch64: Add AdvSIMD scalar three same group handling, Alexander Graf, 2013/09/26