1 
2 #include <stdio.h>
3 
4 typedef unsigned int UInt;
5 
6 void set_fpscr ( UInt x )
7 {
8    UInt d[2];
9    d[0] = 0;
10    d[1] = x;
11    __asm__ __volatile__(
12       "lfd %%f0,0(%0)\n\t"
13       "mtfsf 255,%%f0"
14       : /*out*/
15       : /*in*/ "b"(&d[0])
16       : /*trash*/ "fr0", "cc", "memory"
17    );
18 
19 }
20 
21 int main ( void )
22 {
23   int i;
24   UInt r;
25   for (i = 0; i < 16; i++) {
26     set_fpscr(i);
27     __asm__ __volatile__(
28        "li %0,0\n\t"
29        "mtcr %0\n\t"
30        "mcrfs 1,7\n\t"
31        "mfcr %0"
32        : /*out*/ "=b"(r)
33        : /*in*/
34        : /*trash*/ "cc"
35     );
36     printf("0x%x -> 0x%08x\n", i, r);
37   }
38   for (i = 0; i < 16; i++) {
39     set_fpscr(i);
40     __asm__ __volatile__(
41        "li %0,-1\n\t"
42        "mtcr %0\n\t"
43        "mcrfs 1,7\n\t"
44        "mfcr %0"
45        : /*out*/ "=b"(r)
46        : /*in*/
47        : /*trash*/ "cc"
48     );
49     printf("0x%x -> 0x%08x\n", i, r);
50   }
51   return 0;
52 }
53