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