mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 09:56:29 +00:00
42 lines
834 B
C
42 lines
834 B
C
#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;
|
|
}
|