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.
This commit is contained in:
parent
196496eda0
commit
577d8c4b5a
2 changed files with 43 additions and 39 deletions
|
@ -1,3 +1,9 @@
|
|||
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.
|
||||
|
||||
2002-06-07 Chris Demetriou <cgd@broadcom.com>
|
||||
|
||||
* cp1.c: Clean up formatting of a few comments.
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue