| |
| /* Marginally test fprem/fprem1/fsincos; these are hard to check |
| otherwise since compilers hardly ever generate them. */ |
| |
| #include <stdio.h> |
| |
| double do_fprem ( void ) |
| { |
| double res; |
| __asm__ __volatile__( |
| "ffree %%st(0)\n\t" |
| "ffree %%st(1)\n\t" |
| "fldpi\n\t" |
| "fldln2\n\t" |
| "fprem\n\t" |
| "fstpl 0(%0)" |
| : : "r"(&res) |
| ); |
| return res; |
| } |
| |
| double do_fprem1 ( void ) |
| { |
| double res; |
| __asm__ __volatile__( |
| "ffree %%st(0)\n\t" |
| "ffree %%st(1)\n\t" |
| "fldpi\n\t" |
| "fldln2\n\t" |
| "fprem1\n\t" |
| "fstpl 0(%0)" |
| : : "r"(&res) |
| ); |
| return res; |
| } |
| |
| double do_fsincos ( void ) |
| { |
| double res; |
| __asm__ __volatile__( |
| "fldln2\n\t" |
| "fsincos\n\t" |
| "fsub %%st(1)\n\t" |
| "fstpl 0(%0)" |
| : : "r"(&res) |
| ); |
| return res; |
| } |
| |
| int main ( void ) |
| { |
| __asm__ __volatile__("finit"); |
| printf("fprem %f\n", do_fprem()); |
| printf("fprem1 %f\n", do_fprem1()); |
| printf("fsincos %f\n", do_fsincos()); |
| return 0; |
| } |