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:
Chris Demetriou 2002-06-07 16:50:42 +00:00
parent 196496eda0
commit 577d8c4b5a
2 changed files with 43 additions and 39 deletions

View File

@ -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.

View File

@ -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)
{