• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "tests/asm.h"
2 #include <stdio.h>
3 #include <math.h>
4 
5 double arg, res1, res2;
6 
7 extern void do_fxtract ( void );
8 asm("\n"
9 VG_SYM(do_fxtract) ":\n"
10 "\tfinit\n"
11 "\tfldl " VG_SYM(arg) "\n"
12 "\tfxtract\n"
13 "\tfstpl " VG_SYM(res1) "\n"
14 "\tfstpl " VG_SYM(res2) "\n"
15 "\tret"
16 );
17 
try(double x)18 void try ( double x )
19 {
20   arg = x * 1.414213562373049;
21   res1 = res2 = 0.0;
22   do_fxtract();
23   printf("%17.10e  -> %14.10f %14.10f\n", arg, res1, res2);
24 }
25 
main(void)26 int main ( void )
27 {
28   int i;
29 
30   /* positives */
31 
32   for (i = 0; i < 40; i++)
33      try( 1.27 + (double)(i*10 - 200) );
34 
35   try(+0.0);
36   try(1.0 / 0.0);
37   try(sqrt(-1.0));
38 
39   try(5.1e-308);
40   try(4.1e-308);
41   try(3.1e-308);
42   try(2.1e-308);
43   try(1.1e-308);
44   try(0.9e-308);
45   try(0.7e-308);
46   try(0.6e-308);
47   try(0.5e-308);
48   try(0.4e-308);
49   try(0.3e-308);
50   try(0.1e-308);
51 
52   try(1.3e-320);
53   try(1.3e-321);
54   try(1.3e-322);
55   try(1.3e-323);
56   try(0.9e-323);
57   try(0.7e-323);
58   try(0.5e-323);
59   try(0.3e-323);
60   try(0.2e-323);
61   try(1.3e-324);
62 
63   /* negatives */
64 
65   printf("\n");
66   for (i = 0; i < 40; i++)
67      try( - (1.27 + (double)(i*10 - 200)) );
68 
69   try(-0.0);
70   try(-(1.0 / 0.0));
71   try(-sqrt(-1.0));
72 
73   try(-5.1e-308);
74   try(-4.1e-308);
75   try(-3.1e-308);
76   try(-2.1e-308);
77   try(-1.1e-308);
78   try(-0.9e-308);
79   try(-0.7e-308);
80   try(-0.6e-308);
81   try(-0.5e-308);
82   try(-0.4e-308);
83   try(-0.3e-308);
84   try(-0.1e-308);
85 
86   try(-1.3e-320);
87   try(-1.3e-321);
88   try(-1.3e-322);
89   try(-1.3e-323);
90   try(-0.9e-323);
91   try(-0.7e-323);
92   try(-0.5e-323);
93   try(-0.3e-323);
94   try(-0.2e-323);
95   try(-1.3e-324);
96 
97   return 0;
98 }
99