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