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