diff options
author | Chris Demetriou <cgd@google.com> | 2002-06-07 16:50:42 +0000 |
---|---|---|
committer | Chris Demetriou <cgd@google.com> | 2002-06-07 16:50:42 +0000 |
commit | 577d8c4b5a3d09fbf86eb5f6a68d7d1e94789e91 (patch) | |
tree | c0ae2732b25157d00914720a7caaad48c2a75bfb /sim/mips/cp1.c | |
parent | 196496eda07d1faa8d71fbbf000fa09a05c8e908 (diff) | |
download | gdb-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.c | 76 |
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) { |