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