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