annotate packages/language/c/libm/current/src/misc/standard.c @ 64:c38311975d4f ecos-sw-2000-01-28

Merge from eCos master repository on 2000-01-28-04:28:11-GMT
author jlarmour
date Fri, 28 Jan 2000 04:59:39 +0000
parents 443894e2e912
children bf00f99aec69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 // signgam.cxx
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 // Support sign of the gamma*() functions in Math library
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
14 // http://sourceware.cygnus.com/ecos
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
15 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
16 // Software distributed under the License is distributed on an
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
18 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
25 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
29 //
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
34 // Author(s): jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
35 // Contributors: jlarmour
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 // Date: 1998-02-13
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 // Purpose:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 // Description: Contains the accessor functions to get and set the stored sign
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 // of the gamma*() functions in the math library
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 // Usage:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 /* @(#)k_standard.c 1.3 95/01/18 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 * ====================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 * Developed at SunSoft, a Sun Microsystems, Inc. business.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 * Permission to use, copy, modify, and distribute this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 * software is freely granted, provided that this notice
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 * is preserved.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55 * ====================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 // CONFIGURATION
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 #include <pkgconf/libm.h> // Configuration header
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 // Include the Math library?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 #ifdef CYGPKG_LIBM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 // INCLUDES
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 #include <cyg/infra/cyg_type.h> // Common type definitions and support
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 #include <cyg/infra/cyg_trac.h> // Tracing macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 #include <math.h> // Main header for math library
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 #include "mathincl/fdlibm.h" // Internal header for math library
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 #include <cyg/error/codes.h> // standard error codes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 #ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 #include <errno.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 static int errno; // this whole file won't be used if we're IEEE only, but
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 // doing this keeps the compiler happy
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 #ifdef CYGSEM_LIBM_USE_STDERR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 #include <stdio.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 #define WRITE2(u,v) fputs(u, stderr)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 #define WRITE2(u,v) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 #endif // ifdef CYGSEM_LIBM_USE_STDERR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 // GLOBALS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 static const double zero = 0.0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 // FUNCTIONS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 * Standard conformance (non-IEEE) on exception cases.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 * Mapping:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 * 1 -- acos(|x|>1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 * 2 -- asin(|x|>1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 * 3 -- atan2(+-0,+-0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 * 4 -- hypot overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 * 5 -- cosh overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 * 6 -- exp overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 * 7 -- exp underflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 * 8 -- y0(0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 * 9 -- y0(-ve)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 * 10-- y1(0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 * 11-- y1(-ve)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 * 12-- yn(0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 * 13-- yn(-ve)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 * 14-- lgamma(finite) overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 * 15-- lgamma(-integer)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 * 16-- log(0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 * 17-- log(x<0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 * 18-- log10(0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 * 19-- log10(x<0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 * 20-- pow(0.0,0.0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 * 21-- pow(x,y) overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 * 22-- pow(x,y) underflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 * 23-- pow(0,negative)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 * 24-- pow(neg,non-integral)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 * 25-- sinh(finite) overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 * 26-- sqrt(negative)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 * 27-- fmod(x,0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 * 28-- remainder(x,0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 * 29-- acosh(x<1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 * 30-- atanh(|x|>1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 * 31-- atanh(|x|=1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 * 32-- scalb overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 * 33-- scalb underflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 * 34-- j0(|x|>X_TLOSS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 * 35-- y0(x>X_TLOSS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 * 36-- j1(|x|>X_TLOSS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 * 37-- y1(x>X_TLOSS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 * 38-- jn(|x|>X_TLOSS, n)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 * 39-- yn(x>X_TLOSS, n)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 * 40-- gamma(finite) overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 * 41-- gamma(-integer)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145 * 42-- pow(NaN,0.0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 * 43-- ldexp overflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 * 44-- ldexp underflow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 double
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 __kernel_standard(double x, double y, int type)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 struct exception exc;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 #ifdef CYGSEM_LIBM_USE_STDERR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 (void) fflush(stdout);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 exc.arg1 = x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 exc.arg2 = y;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 switch(type) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 case 1:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 /* acos(|x|>1) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 exc.name = "acos";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 (void) WRITE2("acos: DOMAIN error\n", 19);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 case 2:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 /* asin(|x|>1) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 exc.name = "asin";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 (void) WRITE2("asin: DOMAIN error\n", 19);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 case 3:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 /* atan2(+-0,+-0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 exc.arg1 = y;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 exc.arg2 = x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 exc.name = "atan2";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 (void) WRITE2("atan2: DOMAIN error\n", 20);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 case 4:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 /* hypot(finite,finite) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 exc.name = "hypot";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 case 5:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 /* cosh(finite) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 exc.name = "cosh";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 case 6:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 /* exp(finite) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 exc.name = "exp";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 case 7:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 /* exp(finite) underflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 exc.type = UNDERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 exc.name = "exp";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 case 8:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 /* y0(0) = -inf */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 exc.type = DOMAIN; /* should be SING for IEEE */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 exc.name = "y0";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 (void) WRITE2("y0: DOMAIN error\n", 17);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 case 9:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 /* y0(x<0) = NaN */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 exc.name = "y0";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 (void) WRITE2("y0: DOMAIN error\n", 17);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 case 10:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 /* y1(0) = -inf */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 exc.type = DOMAIN; /* should be SING for IEEE */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 exc.name = "y1";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 (void) WRITE2("y1: DOMAIN error\n", 17);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 case 11:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 /* y1(x<0) = NaN */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 exc.name = "y1";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 (void) WRITE2("y1: DOMAIN error\n", 17);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 case 12:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 /* yn(n,0) = -inf */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 exc.type = DOMAIN; /* should be SING for IEEE */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 exc.name = "yn";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 (void) WRITE2("yn: DOMAIN error\n", 17);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 case 13:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 /* yn(x<0) = NaN */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 exc.name = "yn";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 (void) WRITE2("yn: DOMAIN error\n", 17);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 case 14:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362 /* lgamma(finite) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 exc.name = "lgamma";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375 case 15:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 /* lgamma(-integer) or lgamma(0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377 exc.type = SING;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 exc.name = "lgamma";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 (void) WRITE2("lgamma: SING error\n", 19);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 case 16:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 /* log(0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 exc.type = SING;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 exc.name = "log";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 (void) WRITE2("log: SING error\n", 16);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 case 17:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 /* log(x<0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 exc.name = "log";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421 (void) WRITE2("log: DOMAIN error\n", 18);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 case 18:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 /* log10(0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 exc.type = SING;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 exc.name = "log10";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438 (void) WRITE2("log10: SING error\n", 18);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 case 19:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 /* log10(x<0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 exc.name = "log10";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 (void) WRITE2("log10: DOMAIN error\n", 20);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
460 case 20:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461 /* pow(0.0,0.0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464 exc.name = "pow";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 if (cyg_libm_get_compat_mode() != CYGNUM_LIBM_COMPAT_SVID) exc.retval = 1.0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468 (void) WRITE2("pow(0,0): DOMAIN error\n", 23);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
470 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
471 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
472 case 21:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
473 /* pow(x,y) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
475 exc.name = "pow";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
476 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478 y *= 0.5;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 if(x<zero&&rint(y)!=y) exc.retval = -HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
480 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
481 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
482 y *= 0.5;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
483 if(x<zero&&rint(y)!=y) exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
487 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 case 22:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 /* pow(x,y) underflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 exc.type = UNDERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 exc.name = "pow";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502 case 23:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503 /* 0**neg */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
505 exc.name = "pow";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509 exc.retval = -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
511 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
513 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
514 (void) WRITE2("pow(0,neg): DOMAIN error\n", 25);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
516 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
517 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519 case 24:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520 /* neg**non-integral */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522 exc.name = "pow";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
524 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526 exc.retval = zero/zero; /* X/Open allow NaN */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
527 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
528 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531 (void) WRITE2("neg**non-integral: DOMAIN error\n", 32);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
532 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
533 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536 case 25:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537 /* sinh(finite) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539 exc.name = "sinh";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541 exc.retval = ( (x>zero) ? HUGE : -HUGE);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543 exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
546 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 case 26:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
551 /* sqrt(x<0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553 exc.name = "sqrt";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
555 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
556 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
557 exc.retval = zero/zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
561 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
562 (void) WRITE2("sqrt: DOMAIN error\n", 19);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
564 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
567 case 27:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568 /* fmod(x,0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 exc.name = "fmod";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572 exc.retval = x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 exc.retval = zero/zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
578 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 (void) WRITE2("fmod: DOMAIN error\n", 20);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
580 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
581 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 case 28:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 /* remainder(x,0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
587 exc.name = "remainder";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
588 exc.retval = zero/zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
589 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
590 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
591 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
592 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593 (void) WRITE2("remainder: DOMAIN error\n", 24);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
594 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
595 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
596 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
597 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
598 case 29:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
599 /* acosh(x<1) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 exc.name = "acosh";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602 exc.retval = zero/zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607 (void) WRITE2("acosh: DOMAIN error\n", 20);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 case 30:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 /* atanh(|x|>1) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 exc.name = "atanh";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 exc.retval = zero/zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
621 (void) WRITE2("atanh: DOMAIN error\n", 20);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
622 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
623 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
624 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
625 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
626 case 31:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
627 /* atanh(|x|=1) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
628 exc.type = SING;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
629 exc.name = "atanh";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
630 exc.retval = x/zero; /* sign(x)*inf */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
631 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
632 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
633 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
634 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
635 (void) WRITE2("atanh: SING error\n", 18);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
636 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
637 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
638 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
639 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
640 case 32:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641 /* scalb overflow; SVID also returns +-HUGE_VAL */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
642 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
643 exc.name = "scalb";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
644 exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
645 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
650 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
651 case 33:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652 /* scalb underflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
653 exc.type = UNDERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
654 exc.name = "scalb";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 exc.retval = copysign(zero,x);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 case 34:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663 /* j0(|x|>X_TLOSS) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664 exc.type = TLOSS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 exc.name = "j0";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 (void) WRITE2(exc.name, 2);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 (void) WRITE2(": TLOSS error\n", 14);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 case 35:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678 /* y0(x>X_TLOSS) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
679 exc.type = TLOSS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
680 exc.name = "y0";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
681 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
682 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
683 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
685 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 (void) WRITE2(exc.name, 2);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
687 (void) WRITE2(": TLOSS error\n", 14);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
688 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
689 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
690 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
691 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
692 case 36:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
693 /* j1(|x|>X_TLOSS) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
694 exc.type = TLOSS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
695 exc.name = "j1";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
696 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 (void) WRITE2(exc.name, 2);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 (void) WRITE2(": TLOSS error\n", 14);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707 case 37:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708 /* y1(x>X_TLOSS) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709 exc.type = TLOSS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710 exc.name = "y1";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
712 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
713 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716 (void) WRITE2(exc.name, 2);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 (void) WRITE2(": TLOSS error\n", 14);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
721 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722 case 38:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 /* jn(|x|>X_TLOSS) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724 exc.type = TLOSS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 exc.name = "jn";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731 (void) WRITE2(exc.name, 2);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732 (void) WRITE2(": TLOSS error\n", 14);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 case 39:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 /* yn(x>X_TLOSS) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739 exc.type = TLOSS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 exc.name = "yn";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 exc.retval = zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746 (void) WRITE2(exc.name, 2);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
747 (void) WRITE2(": TLOSS error\n", 14);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
748 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
752 case 40:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
753 /* gamma(finite) overflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755 exc.name = "gamma";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
756 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
757 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
758 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
759 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
760 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
762 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
763 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
764 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
765 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 case 41:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
767 /* gamma(-integer) or gamma(0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
768 exc.type = SING;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
769 exc.name = "gamma";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
770 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 exc.retval = HUGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
772 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 exc.retval = HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
774 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 (void) WRITE2("gamma: SING error\n", 18);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
780 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
781 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
783 case 42:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
784 /* pow(NaN,0.0) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
785 /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID & CYGNUM_LIBM_COMPAT_XOPEN */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
786 exc.type = DOMAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
787 exc.name = "pow";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
788 exc.retval = x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
789 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790 cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) exc.retval = 1.0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
791 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
792 errno = EDOM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
793 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
795 case 43:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
796 /* ldexp overflow; SVID also returns +-HUGE_VAL */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
797 exc.type = OVERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
798 exc.name = "ldexp";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
799 exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
800 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
803 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
804 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
805 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
806 case 44:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
807 /* ldexp underflow */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
808 exc.type = UNDERFLOW;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
809 exc.name = "ldexp";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
810 exc.retval = copysign(zero,x);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
811 if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
812 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
813 else if (!matherr(&exc)) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
814 errno = ERANGE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
815 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
816 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
817 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
818 return exc.retval;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
819 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
820
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
821 #endif // ifdef CYGPKG_LIBM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
822
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
823 // EOF standard.c