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