1 2/* Marginally test fprem/fprem1/fsincos; these are hard to check 3 otherwise since compilers hardly ever generate them. */ 4 5#include <stdio.h> 6 7double do_fprem ( void ) 8{ 9 double res = 0.0; 10 __asm__ __volatile__( 11 "ffree %%st(0)\n\t" 12 "ffree %%st(1)\n\t" 13 "fldpi\n\t" 14 "fldln2\n\t" 15 "fprem\n\t" 16 "fstpl 0(%0)" 17 : : "r"(&res) 18 ); 19 return res; 20} 21 22double do_fprem1 ( void ) 23{ 24 double res = 0.0; 25 __asm__ __volatile__( 26 "ffree %%st(0)\n\t" 27 "ffree %%st(1)\n\t" 28 "fldpi\n\t" 29 "fldln2\n\t" 30 "fprem1\n\t" 31 "fstpl 0(%0)" 32 : : "r"(&res) 33 ); 34 return res; 35} 36 37double do_fsincos ( void ) 38{ 39 double res = 0.0; 40 __asm__ __volatile__( 41 "fldln2\n\t" 42 "fsincos\n\t" 43 "fsub %%st(1)\n\t" 44 "fstpl 0(%0)" 45 : : "r"(&res) 46 ); 47 return res; 48} 49 50int main ( void ) 51{ 52 __asm__ __volatile__("finit"); 53 printf("fprem %f\n", do_fprem()); 54 printf("fprem1 %f\n", do_fprem1()); 55 printf("fsincos %f\n", do_fsincos()); 56 return 0; 57} 58