aboutsummaryrefslogtreecommitdiff
path: root/sim/mips/cp1.c
diff options
context:
space:
mode:
authorChris Demetriou <cgd@google.com>2002-06-07 16:50:42 +0000
committerChris Demetriou <cgd@google.com>2002-06-07 16:50:42 +0000
commit577d8c4b5a3d09fbf86eb5f6a68d7d1e94789e91 (patch)
treec0ae2732b25157d00914720a7caaad48c2a75bfb /sim/mips/cp1.c
parent196496eda07d1faa8d71fbbf000fa09a05c8e908 (diff)
downloadgdb-577d8c4b5a3d09fbf86eb5f6a68d7d1e94789e91.zip
gdb-577d8c4b5a3d09fbf86eb5f6a68d7d1e94789e91.tar.gz
gdb-577d8c4b5a3d09fbf86eb5f6a68d7d1e94789e91.tar.bz2
2002-06-07 Chris Demetriou <cgd@broadcom.com>
* cp1.c (convert): Remove unusable debugging code, and move MIPS rounding mode to sim FP rounding mode flag conversion code into... (rounding_mode): New function.
Diffstat (limited to 'sim/mips/cp1.c')
-rw-r--r--sim/mips/cp1.c76
1 files changed, 37 insertions, 39 deletions
diff --git a/sim/mips/cp1.c b/sim/mips/cp1.c
index e4bfba2..362bcef 100644
--- a/sim/mips/cp1.c
+++ b/sim/mips/cp1.c
@@ -426,6 +426,42 @@ update_fcsr (sim_cpu *cpu,
return;
}
+static sim_fpu_round
+rounding_mode(int rm)
+{
+ sim_fpu_round round;
+
+ switch (rm)
+ {
+ case FP_RM_NEAREST:
+ /* Round result to nearest representable value. When two
+ representable values are equally near, round to the value
+ that has a least significant bit of zero (i.e. is even). */
+ round = sim_fpu_round_near;
+ break;
+ case FP_RM_TOZERO:
+ /* Round result to the value closest to, and not greater in
+ magnitude than, the result. */
+ round = sim_fpu_round_zero;
+ break;
+ case FP_RM_TOPINF:
+ /* Round result to the value closest to, and not less than,
+ the result. */
+ round = sim_fpu_round_up;
+ break;
+ case FP_RM_TOMINF:
+ /* Round result to the value closest to, and not greater than,
+ the result. */
+ round = sim_fpu_round_down;
+ break;
+ default:
+ round = 0;
+ fprintf (stderr, "Bad switch\n");
+ abort ();
+ }
+ return round;
+}
+
/* Comparison operations. */
@@ -694,48 +730,10 @@ convert (sim_cpu *cpu,
FP_formats to)
{
sim_fpu wop;
- sim_fpu_round round;
+ sim_fpu_round round = rounding_mode (rm);
unsigned32 result32;
unsigned64 result64;
-#ifdef DEBUG
-#if 0 /* FIXME: doesn't compile */
- printf ("DBG: Convert: mode %s : op 0x%s : from %s : to %s : (PC = 0x%s)\n",
- fpu_rounding_mode_name (rm), pr_addr (op), fpu_format_name (from),
- fpu_format_name (to), pr_addr (IPC));
-#endif
-#endif /* DEBUG */
-
- switch (rm)
- {
- case FP_RM_NEAREST:
- /* Round result to nearest representable value. When two
- representable values are equally near, round to the value
- that has a least significant bit of zero (i.e. is even). */
- round = sim_fpu_round_near;
- break;
- case FP_RM_TOZERO:
- /* Round result to the value closest to, and not greater in
- magnitude than, the result. */
- round = sim_fpu_round_zero;
- break;
- case FP_RM_TOPINF:
- /* Round result to the value closest to, and not less than,
- the result. */
- round = sim_fpu_round_up;
- break;
-
- case FP_RM_TOMINF:
- /* Round result to the value closest to, and not greater than,
- the result. */
- round = sim_fpu_round_down;
- break;
- default:
- round = 0;
- fprintf (stderr, "Bad switch\n");
- abort ();
- }
-
/* Convert the input to sim_fpu internal format */
switch (from)
{