1
From 7fb5e584a4df607a32756ccccd0e97c9631a1670 Mon Sep 17 00:00:00 2001
2
From: Will Newton <will.newton@linaro.org>
3
Date: Fri, 31 Jan 2014 14:47:33 +0000
4
Subject: [PATCH 122/158] target-arm: Move arm_rmode_to_sf to a shared
7
This function will be needed for AArch32 ARMv8 support, so move it to
8
helper.c where it can be used by both targets. Also moves the code out
9
of line, but as it is quite a large function I don't believe this
10
should be a significant performance impact.
12
Signed-off-by: Will Newton <will.newton@linaro.org>
13
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
target-arm/cpu.h | 2 ++
17
target-arm/helper.c | 28 ++++++++++++++++++++++++++++
18
target-arm/translate-a64.c | 28 ----------------------------
19
3 files changed, 30 insertions(+), 28 deletions(-)
21
diff --git a/target-arm/cpu.h b/target-arm/cpu.h
22
index 484728f..4d0b2d7 100644
23
--- a/target-arm/cpu.h
24
+++ b/target-arm/cpu.h
25
@@ -500,6 +500,8 @@ enum arm_fprounding {
29
+int arm_rmode_to_sf(int rmode);
32
ARM_CPU_MODE_USR = 0x10,
33
ARM_CPU_MODE_FIQ = 0x11,
34
diff --git a/target-arm/helper.c b/target-arm/helper.c
35
index 6b763e9..9c50f9e 100644
36
--- a/target-arm/helper.c
37
+++ b/target-arm/helper.c
38
@@ -4445,3 +4445,31 @@ float64 HELPER(rintd)(float64 x, void *fp_status)
43
+/* Convert ARM rounding mode to softfloat */
44
+int arm_rmode_to_sf(int rmode)
47
+ case FPROUNDING_TIEAWAY:
48
+ rmode = float_round_ties_away;
50
+ case FPROUNDING_ODD:
51
+ /* FIXME: add support for TIEAWAY and ODD */
52
+ qemu_log_mask(LOG_UNIMP, "arm: unimplemented rounding mode: %d\n",
54
+ case FPROUNDING_TIEEVEN:
56
+ rmode = float_round_nearest_even;
58
+ case FPROUNDING_POSINF:
59
+ rmode = float_round_up;
61
+ case FPROUNDING_NEGINF:
62
+ rmode = float_round_down;
64
+ case FPROUNDING_ZERO:
65
+ rmode = float_round_to_zero;
70
diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c
71
index 7cfb55b..c22bbb5 100644
72
--- a/target-arm/translate-a64.c
73
+++ b/target-arm/translate-a64.c
74
@@ -3608,34 +3608,6 @@ static void disas_data_proc_reg(DisasContext *s, uint32_t insn)
78
-/* Convert ARM rounding mode to softfloat */
79
-static inline int arm_rmode_to_sf(int rmode)
82
- case FPROUNDING_TIEAWAY:
83
- rmode = float_round_ties_away;
85
- case FPROUNDING_ODD:
86
- /* FIXME: add support for TIEAWAY and ODD */
87
- qemu_log_mask(LOG_UNIMP, "arm: unimplemented rounding mode: %d\n",
89
- case FPROUNDING_TIEEVEN:
91
- rmode = float_round_nearest_even;
93
- case FPROUNDING_POSINF:
94
- rmode = float_round_up;
96
- case FPROUNDING_NEGINF:
97
- rmode = float_round_down;
99
- case FPROUNDING_ZERO:
100
- rmode = float_round_to_zero;
106
static void handle_fp_compare(DisasContext *s, bool is_double,
107
unsigned int rn, unsigned int rm,
108
bool cmp_with_zero, bool signal_all_nans)