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;
 | 
						|
}
 |