#include <stdio.h>

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