#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "opcodes.h"
/* Basic test that we can set the rounding mode in the FPC and
query it. Covers only generally available rounding modes. */
void
set_rounding_mode(unsigned mode)
{
register unsigned r asm("1") = mode;
__asm__ volatile ( SFPC(1) : : "d"(r) );
}
unsigned
get_rounding_mode(void)
{
unsigned fpc;
__asm__ volatile ("stfpc %0\n\t" : "=m"(fpc));
return fpc & 0x7;
}
int main(void)
{
int i;
const unsigned rmodes[] = { 0, 1, 2, 3 };
printf("initial rounding mode: %u\n", get_rounding_mode());
for (i = 0; i < sizeof rmodes / sizeof rmodes[0]; ++i) {
printf("setting rounding mode to %u\n", rmodes[i]);
set_rounding_mode(rmodes[i]);
printf("...checking: %u\n", get_rounding_mode());
}
return 0;
}