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