Home | History | Annotate | Download | only in ppc32
      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