blob: 680b7ffbb8cd10ff729e56bfe6f2606476c736f0 [file] [log] [blame]
sewardj0c7a4f92005-03-25 20:29:00 +00001
2#include <stdio.h>
3#include <math.h>
4
5double d;
6int i;
7
sewardjfef858e2005-03-25 22:32:39 +00008extern void do_fxam ( void );
sewardj0c7a4f92005-03-25 20:29:00 +00009
10asm(
11"\n"
sewardjfef858e2005-03-25 22:32:39 +000012"do_fxam:\n"
sewardj0c7a4f92005-03-25 20:29:00 +000013"\txorl %eax,%eax\n"
14"\tfld d\n"
15"\tfxam\n"
16"\tfnstsw %ax\n"
17"\tffree %st(0)\n"
18"\tmovl %eax, i\n"
19"\tret\n"
20);
21
sewardjfef858e2005-03-25 22:32:39 +000022
23double inf ( void ) { return 1.0 / 0.0; }
24double nAn ( void ) { return 0.0 / 0.0; }
25double den ( void ) { return 9.1e-220 / 1e100; }
26
27/* Try positive and negative variants of: zero, infinity,
28 nAn, and denorm */
29
sewardj0c7a4f92005-03-25 20:29:00 +000030int main ( void )
31{
sewardjfef858e2005-03-25 22:32:39 +000032 d = 0.0; do_fxam(); printf("0x%4x: %f\n", i, d );
33 d = -0.0; do_fxam(); printf("0x%4x: %f\n", i, d );
34
35 d = inf(); do_fxam(); printf("0x%4x: %f\n", i, d );
36 d = -inf(); do_fxam(); printf("0x%4x: %f\n", i, d );
37
38 d = nAn(); do_fxam(); printf("0x%4x: %f\n", i, d );
39 d = -nAn(); do_fxam(); printf("0x%4x: %f\n", i, d );
40
41 d = den(); do_fxam(); printf("0x%4x: %f\n", i, d );
42 d = -den(); do_fxam(); printf("0x%4x: %f\n", i, d );
sewardj0c7a4f92005-03-25 20:29:00 +000043 return 0;
44}