From 577d8c4b5a3d09fbf86eb5f6a68d7d1e94789e91 Mon Sep 17 00:00:00 2001 From: Chris Demetriou Date: Fri, 7 Jun 2002 16:50:42 +0000 Subject: [PATCH] 2002-06-07 Chris Demetriou * 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. --- sim/mips/ChangeLog | 6 +++++ sim/mips/cp1.c | 76 ++++++++++++++++++++++++++---------------------------- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index 0afcde9..8d8e30e 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -1,5 +1,11 @@ 2002-06-07 Chris Demetriou + * 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. + +2002-06-07 Chris Demetriou + * cp1.c: Clean up formatting of a few comments. (value_fpr): Reformat switch statement. 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) { -- 2.7.4