#include typedef unsigned int UInt; void set_fpscr ( UInt x ) { UInt d[2]; d[0] = 0; d[1] = x; __asm__ __volatile__( "lfd %%f0,0(%0)\n\t" "mtfsf 255,%%f0" : /*out*/ : /*in*/ "b"(&d[0]) : /*trash*/ "fr0", "cc", "memory" ); } int main ( void ) { int i; UInt r; for (i = 0; i < 16; i++) { set_fpscr(i); __asm__ __volatile__( "li %0,0\n\t" "mtcr %0\n\t" "mcrfs 1,7\n\t" "mfcr %0" : /*out*/ "=b"(r) : /*in*/ : /*trash*/ "cc" ); printf("0x%x -> 0x%08x\n", i, r); } for (i = 0; i < 16; i++) { set_fpscr(i); __asm__ __volatile__( "li %0,-1\n\t" "mtcr %0\n\t" "mcrfs 1,7\n\t" "mfcr %0" : /*out*/ "=b"(r) : /*in*/ : /*trash*/ "cc" ); printf("0x%x -> 0x%08x\n", i, r); } return 0; }