1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdio.h>
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <math.h>
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdouble d;
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint i;
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void do_fxam ( void );
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovasm(
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\n"
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"do_fxam:\n"
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\txorl %eax,%eax\n"
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\tfld d\n"
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\tfxam\n"
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\tfnstsw %ax\n"
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\tffree %st(0)\n"
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\tmovl %eax, i\n"
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov"\tret\n"
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov);
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdouble inf ( void ) { return 1.0 / 0.0; }
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdouble nAn ( void ) { return 0.0 / 0.0; }
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdouble den ( void ) { return 9.1e-220 / 1e100; }
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Try positive and negative variants of: zero, infinity,
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   nAn, and denorm */
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint main ( void )
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d =  0.0;   do_fxam(); printf("0x%4x: %f\n", i, d );
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = -0.0;   do_fxam(); printf("0x%4x: %f\n", i, d );
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d =  inf(); do_fxam(); printf("0x%4x: %f\n", i, d );
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = -inf(); do_fxam(); printf("0x%4x: %f\n", i, d );
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d =  nAn(); do_fxam(); printf("0x%4x: %f\n", i, d );
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = -nAn(); do_fxam(); printf("0x%4x: %f\n", i, d );
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d =  den(); do_fxam(); printf("0x%4x: %f\n", i, d );
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = -den(); do_fxam(); printf("0x%4x: %f\n", i, d );
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return 0;
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
45