28 lines
561 B
C
28 lines
561 B
C
|
#include <errno.h>
|
||
|
#include <fenv.h>
|
||
|
|
||
|
#include "fpu_cw.h"
|
||
|
|
||
|
int fesetround(int round)
|
||
|
{
|
||
|
u16_t cw;
|
||
|
|
||
|
/* read and update FPUCW */
|
||
|
cw = fpu_cw_get() & ~FPUCW_ROUNDING_CONTROL;
|
||
|
switch (round)
|
||
|
{
|
||
|
case FE_TONEAREST: cw |= FPUCW_ROUNDING_CONTROL_NEAREST; break;
|
||
|
case FE_DOWNWARD: cw |= FPUCW_ROUNDING_CONTROL_DOWN; break;
|
||
|
case FE_UPWARD: cw |= FPUCW_ROUNDING_CONTROL_UP; break;
|
||
|
case FE_TOWARDZERO: cw |= FPUCW_ROUNDING_CONTROL_TRUNC; break;
|
||
|
|
||
|
default:
|
||
|
errno = EINVAL;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
/* set FPUCW to the updated value */
|
||
|
fpu_cw_set(cw);
|
||
|
return 0;
|
||
|
}
|