Commit 3c5c8f6748ce5a4a63ac7d025ddca4a01574a1a7

Authored by Ralf Baechle
1 parent efec3c4e96

Delete unused ieee754_cname[] and declaration.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

Showing 2 changed files with 0 additions and 11 deletions Inline Diff

arch/mips/math-emu/ieee754.c
1 /* ieee754 floating point arithmetic 1 /* ieee754 floating point arithmetic
2 * single and double precision 2 * single and double precision
3 * 3 *
4 * BUGS 4 * BUGS
5 * not much dp done 5 * not much dp done
6 * doesn't generate IEEE754_INEXACT 6 * doesn't generate IEEE754_INEXACT
7 * 7 *
8 */ 8 */
9 /* 9 /*
10 * MIPS floating point support 10 * MIPS floating point support
11 * Copyright (C) 1994-2000 Algorithmics Ltd. 11 * Copyright (C) 1994-2000 Algorithmics Ltd.
12 * http://www.algor.co.uk 12 * http://www.algor.co.uk
13 * 13 *
14 * ######################################################################## 14 * ########################################################################
15 * 15 *
16 * This program is free software; you can distribute it and/or modify it 16 * This program is free software; you can distribute it and/or modify it
17 * under the terms of the GNU General Public License (Version 2) as 17 * under the terms of the GNU General Public License (Version 2) as
18 * published by the Free Software Foundation. 18 * published by the Free Software Foundation.
19 * 19 *
20 * This program is distributed in the hope it will be useful, but WITHOUT 20 * This program is distributed in the hope it will be useful, but WITHOUT
21 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 21 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 22 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 * for more details. 23 * for more details.
24 * 24 *
25 * You should have received a copy of the GNU General Public License along 25 * You should have received a copy of the GNU General Public License along
26 * with this program; if not, write to the Free Software Foundation, Inc., 26 * with this program; if not, write to the Free Software Foundation, Inc.,
27 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 27 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
28 * 28 *
29 * ######################################################################## 29 * ########################################################################
30 */ 30 */
31 31
32 32
33 #include "ieee754int.h" 33 #include "ieee754int.h"
34 #include "ieee754sp.h" 34 #include "ieee754sp.h"
35 #include "ieee754dp.h" 35 #include "ieee754dp.h"
36 36
37 #define DP_EBIAS 1023 37 #define DP_EBIAS 1023
38 #define DP_EMIN (-1022) 38 #define DP_EMIN (-1022)
39 #define DP_EMAX 1023 39 #define DP_EMAX 1023
40 40
41 #define SP_EBIAS 127 41 #define SP_EBIAS 127
42 #define SP_EMIN (-126) 42 #define SP_EMIN (-126)
43 #define SP_EMAX 127 43 #define SP_EMAX 127
44 44
45 /* indexed by class */
46 const char *const ieee754_cname[] = {
47 "Normal",
48 "Zero",
49 "Denormal",
50 "Infinity",
51 "QNaN",
52 "SNaN",
53 };
54
55 /* special constants 45 /* special constants
56 */ 46 */
57 47
58 48
59 #if (defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN) || defined(__MIPSEL__) 49 #if (defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN) || defined(__MIPSEL__)
60 #define SPSTR(s,b,m) {m,b,s} 50 #define SPSTR(s,b,m) {m,b,s}
61 #define DPSTR(s,b,mh,ml) {ml,mh,b,s} 51 #define DPSTR(s,b,mh,ml) {ml,mh,b,s}
62 #endif 52 #endif
63 53
64 #ifdef __MIPSEB__ 54 #ifdef __MIPSEB__
65 #define SPSTR(s,b,m) {s,b,m} 55 #define SPSTR(s,b,m) {s,b,m}
66 #define DPSTR(s,b,mh,ml) {s,b,mh,ml} 56 #define DPSTR(s,b,mh,ml) {s,b,mh,ml}
67 #endif 57 #endif
68 58
69 const struct ieee754dp_konst __ieee754dp_spcvals[] = { 59 const struct ieee754dp_konst __ieee754dp_spcvals[] = {
70 DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* + zero */ 60 DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* + zero */
71 DPSTR(1, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* - zero */ 61 DPSTR(1, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* - zero */
72 DPSTR(0, DP_EBIAS, 0, 0), /* + 1.0 */ 62 DPSTR(0, DP_EBIAS, 0, 0), /* + 1.0 */
73 DPSTR(1, DP_EBIAS, 0, 0), /* - 1.0 */ 63 DPSTR(1, DP_EBIAS, 0, 0), /* - 1.0 */
74 DPSTR(0, 3 + DP_EBIAS, 0x40000, 0), /* + 10.0 */ 64 DPSTR(0, 3 + DP_EBIAS, 0x40000, 0), /* + 10.0 */
75 DPSTR(1, 3 + DP_EBIAS, 0x40000, 0), /* - 10.0 */ 65 DPSTR(1, 3 + DP_EBIAS, 0x40000, 0), /* - 10.0 */
76 DPSTR(0, DP_EMAX + 1 + DP_EBIAS, 0, 0), /* + infinity */ 66 DPSTR(0, DP_EMAX + 1 + DP_EBIAS, 0, 0), /* + infinity */
77 DPSTR(1, DP_EMAX + 1 + DP_EBIAS, 0, 0), /* - infinity */ 67 DPSTR(1, DP_EMAX + 1 + DP_EBIAS, 0, 0), /* - infinity */
78 DPSTR(0,DP_EMAX+1+DP_EBIAS,0x7FFFF,0xFFFFFFFF), /* + indef quiet Nan */ 68 DPSTR(0,DP_EMAX+1+DP_EBIAS,0x7FFFF,0xFFFFFFFF), /* + indef quiet Nan */
79 DPSTR(0, DP_EMAX + DP_EBIAS, 0xFFFFF, 0xFFFFFFFF), /* + max */ 69 DPSTR(0, DP_EMAX + DP_EBIAS, 0xFFFFF, 0xFFFFFFFF), /* + max */
80 DPSTR(1, DP_EMAX + DP_EBIAS, 0xFFFFF, 0xFFFFFFFF), /* - max */ 70 DPSTR(1, DP_EMAX + DP_EBIAS, 0xFFFFF, 0xFFFFFFFF), /* - max */
81 DPSTR(0, DP_EMIN + DP_EBIAS, 0, 0), /* + min normal */ 71 DPSTR(0, DP_EMIN + DP_EBIAS, 0, 0), /* + min normal */
82 DPSTR(1, DP_EMIN + DP_EBIAS, 0, 0), /* - min normal */ 72 DPSTR(1, DP_EMIN + DP_EBIAS, 0, 0), /* - min normal */
83 DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 1), /* + min denormal */ 73 DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 1), /* + min denormal */
84 DPSTR(1, DP_EMIN - 1 + DP_EBIAS, 0, 1), /* - min denormal */ 74 DPSTR(1, DP_EMIN - 1 + DP_EBIAS, 0, 1), /* - min denormal */
85 DPSTR(0, 31 + DP_EBIAS, 0, 0), /* + 1.0e31 */ 75 DPSTR(0, 31 + DP_EBIAS, 0, 0), /* + 1.0e31 */
86 DPSTR(0, 63 + DP_EBIAS, 0, 0), /* + 1.0e63 */ 76 DPSTR(0, 63 + DP_EBIAS, 0, 0), /* + 1.0e63 */
87 }; 77 };
88 78
89 const struct ieee754sp_konst __ieee754sp_spcvals[] = { 79 const struct ieee754sp_konst __ieee754sp_spcvals[] = {
90 SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 0), /* + zero */ 80 SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 0), /* + zero */
91 SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 0), /* - zero */ 81 SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 0), /* - zero */
92 SPSTR(0, SP_EBIAS, 0), /* + 1.0 */ 82 SPSTR(0, SP_EBIAS, 0), /* + 1.0 */
93 SPSTR(1, SP_EBIAS, 0), /* - 1.0 */ 83 SPSTR(1, SP_EBIAS, 0), /* - 1.0 */
94 SPSTR(0, 3 + SP_EBIAS, 0x200000), /* + 10.0 */ 84 SPSTR(0, 3 + SP_EBIAS, 0x200000), /* + 10.0 */
95 SPSTR(1, 3 + SP_EBIAS, 0x200000), /* - 10.0 */ 85 SPSTR(1, 3 + SP_EBIAS, 0x200000), /* - 10.0 */
96 SPSTR(0, SP_EMAX + 1 + SP_EBIAS, 0), /* + infinity */ 86 SPSTR(0, SP_EMAX + 1 + SP_EBIAS, 0), /* + infinity */
97 SPSTR(1, SP_EMAX + 1 + SP_EBIAS, 0), /* - infinity */ 87 SPSTR(1, SP_EMAX + 1 + SP_EBIAS, 0), /* - infinity */
98 SPSTR(0,SP_EMAX+1+SP_EBIAS,0x3FFFFF), /* + indef quiet Nan */ 88 SPSTR(0,SP_EMAX+1+SP_EBIAS,0x3FFFFF), /* + indef quiet Nan */
99 SPSTR(0, SP_EMAX + SP_EBIAS, 0x7FFFFF), /* + max normal */ 89 SPSTR(0, SP_EMAX + SP_EBIAS, 0x7FFFFF), /* + max normal */
100 SPSTR(1, SP_EMAX + SP_EBIAS, 0x7FFFFF), /* - max normal */ 90 SPSTR(1, SP_EMAX + SP_EBIAS, 0x7FFFFF), /* - max normal */
101 SPSTR(0, SP_EMIN + SP_EBIAS, 0), /* + min normal */ 91 SPSTR(0, SP_EMIN + SP_EBIAS, 0), /* + min normal */
102 SPSTR(1, SP_EMIN + SP_EBIAS, 0), /* - min normal */ 92 SPSTR(1, SP_EMIN + SP_EBIAS, 0), /* - min normal */
103 SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 1), /* + min denormal */ 93 SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 1), /* + min denormal */
104 SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 1), /* - min denormal */ 94 SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 1), /* - min denormal */
105 SPSTR(0, 31 + SP_EBIAS, 0), /* + 1.0e31 */ 95 SPSTR(0, 31 + SP_EBIAS, 0), /* + 1.0e31 */
106 SPSTR(0, 63 + SP_EBIAS, 0), /* + 1.0e63 */ 96 SPSTR(0, 63 + SP_EBIAS, 0), /* + 1.0e63 */
107 }; 97 };
108 98
109 99
110 int ieee754si_xcpt(int r, const char *op, ...) 100 int ieee754si_xcpt(int r, const char *op, ...)
111 { 101 {
112 struct ieee754xctx ax; 102 struct ieee754xctx ax;
113 103
114 if (!TSTX()) 104 if (!TSTX())
115 return r; 105 return r;
116 ax.op = op; 106 ax.op = op;
117 ax.rt = IEEE754_RT_SI; 107 ax.rt = IEEE754_RT_SI;
118 ax.rv.si = r; 108 ax.rv.si = r;
119 va_start(ax.ap, op); 109 va_start(ax.ap, op);
120 ieee754_xcpt(&ax); 110 ieee754_xcpt(&ax);
121 return ax.rv.si; 111 return ax.rv.si;
122 } 112 }
123 113
124 s64 ieee754di_xcpt(s64 r, const char *op, ...) 114 s64 ieee754di_xcpt(s64 r, const char *op, ...)
125 { 115 {
126 struct ieee754xctx ax; 116 struct ieee754xctx ax;
127 117
128 if (!TSTX()) 118 if (!TSTX())
129 return r; 119 return r;
130 ax.op = op; 120 ax.op = op;
131 ax.rt = IEEE754_RT_DI; 121 ax.rt = IEEE754_RT_DI;
132 ax.rv.di = r; 122 ax.rv.di = r;
133 va_start(ax.ap, op); 123 va_start(ax.ap, op);
134 ieee754_xcpt(&ax); 124 ieee754_xcpt(&ax);
135 return ax.rv.di; 125 return ax.rv.di;
136 } 126 }
137 127
arch/mips/math-emu/ieee754.h
1 /* 1 /*
2 * MIPS floating point support 2 * MIPS floating point support
3 * Copyright (C) 1994-2000 Algorithmics Ltd. 3 * Copyright (C) 1994-2000 Algorithmics Ltd.
4 * http://www.algor.co.uk 4 * http://www.algor.co.uk
5 * 5 *
6 * This program is free software; you can distribute it and/or modify it 6 * This program is free software; you can distribute it and/or modify it
7 * under the terms of the GNU General Public License (Version 2) as 7 * under the terms of the GNU General Public License (Version 2) as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 * 9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT 10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details. 13 * for more details.
14 * 14 *
15 * You should have received a copy of the GNU General Public License along 15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc., 16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 17 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
18 * 18 *
19 * Nov 7, 2000 19 * Nov 7, 2000
20 * Modification to allow integration with Linux kernel 20 * Modification to allow integration with Linux kernel
21 * 21 *
22 * Kevin D. Kissell, kevink@mips.com and Carsten Langgard, carstenl@mips.com 22 * Kevin D. Kissell, kevink@mips.com and Carsten Langgard, carstenl@mips.com
23 * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. 23 * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
24 */ 24 */
25 #ifndef __ARCH_MIPS_MATH_EMU_IEEE754_H 25 #ifndef __ARCH_MIPS_MATH_EMU_IEEE754_H
26 #define __ARCH_MIPS_MATH_EMU_IEEE754_H 26 #define __ARCH_MIPS_MATH_EMU_IEEE754_H
27 27
28 #include <asm/byteorder.h> 28 #include <asm/byteorder.h>
29 #include <linux/types.h> 29 #include <linux/types.h>
30 #include <linux/sched.h> 30 #include <linux/sched.h>
31 31
32 /* 32 /*
33 * Not very pretty, but the Linux kernel's normal va_list definition 33 * Not very pretty, but the Linux kernel's normal va_list definition
34 * does not allow it to be used as a structure element, as it is here. 34 * does not allow it to be used as a structure element, as it is here.
35 */ 35 */
36 #ifndef _STDARG_H 36 #ifndef _STDARG_H
37 #include <stdarg.h> 37 #include <stdarg.h>
38 #endif 38 #endif
39 39
40 #ifdef __LITTLE_ENDIAN 40 #ifdef __LITTLE_ENDIAN
41 struct ieee754dp_konst { 41 struct ieee754dp_konst {
42 unsigned mantlo:32; 42 unsigned mantlo:32;
43 unsigned manthi:20; 43 unsigned manthi:20;
44 unsigned bexp:11; 44 unsigned bexp:11;
45 unsigned sign:1; 45 unsigned sign:1;
46 }; 46 };
47 struct ieee754sp_konst { 47 struct ieee754sp_konst {
48 unsigned mant:23; 48 unsigned mant:23;
49 unsigned bexp:8; 49 unsigned bexp:8;
50 unsigned sign:1; 50 unsigned sign:1;
51 }; 51 };
52 52
53 typedef union _ieee754dp { 53 typedef union _ieee754dp {
54 struct ieee754dp_konst oparts; 54 struct ieee754dp_konst oparts;
55 struct { 55 struct {
56 u64 mant:52; 56 u64 mant:52;
57 unsigned int bexp:11; 57 unsigned int bexp:11;
58 unsigned int sign:1; 58 unsigned int sign:1;
59 } parts; 59 } parts;
60 u64 bits; 60 u64 bits;
61 double d; 61 double d;
62 } ieee754dp; 62 } ieee754dp;
63 63
64 typedef union _ieee754sp { 64 typedef union _ieee754sp {
65 struct ieee754sp_konst parts; 65 struct ieee754sp_konst parts;
66 float f; 66 float f;
67 u32 bits; 67 u32 bits;
68 } ieee754sp; 68 } ieee754sp;
69 #endif 69 #endif
70 70
71 #ifdef __BIG_ENDIAN 71 #ifdef __BIG_ENDIAN
72 struct ieee754dp_konst { 72 struct ieee754dp_konst {
73 unsigned sign:1; 73 unsigned sign:1;
74 unsigned bexp:11; 74 unsigned bexp:11;
75 unsigned manthi:20; 75 unsigned manthi:20;
76 unsigned mantlo:32; 76 unsigned mantlo:32;
77 }; 77 };
78 78
79 typedef union _ieee754dp { 79 typedef union _ieee754dp {
80 struct ieee754dp_konst oparts; 80 struct ieee754dp_konst oparts;
81 struct { 81 struct {
82 unsigned int sign:1; 82 unsigned int sign:1;
83 unsigned int bexp:11; 83 unsigned int bexp:11;
84 u64 mant:52; 84 u64 mant:52;
85 } parts; 85 } parts;
86 double d; 86 double d;
87 u64 bits; 87 u64 bits;
88 } ieee754dp; 88 } ieee754dp;
89 89
90 struct ieee754sp_konst { 90 struct ieee754sp_konst {
91 unsigned sign:1; 91 unsigned sign:1;
92 unsigned bexp:8; 92 unsigned bexp:8;
93 unsigned mant:23; 93 unsigned mant:23;
94 }; 94 };
95 95
96 typedef union _ieee754sp { 96 typedef union _ieee754sp {
97 struct ieee754sp_konst parts; 97 struct ieee754sp_konst parts;
98 float f; 98 float f;
99 u32 bits; 99 u32 bits;
100 } ieee754sp; 100 } ieee754sp;
101 #endif 101 #endif
102 102
103 /* 103 /*
104 * single precision (often aka float) 104 * single precision (often aka float)
105 */ 105 */
106 int ieee754sp_finite(ieee754sp x); 106 int ieee754sp_finite(ieee754sp x);
107 int ieee754sp_class(ieee754sp x); 107 int ieee754sp_class(ieee754sp x);
108 108
109 ieee754sp ieee754sp_abs(ieee754sp x); 109 ieee754sp ieee754sp_abs(ieee754sp x);
110 ieee754sp ieee754sp_neg(ieee754sp x); 110 ieee754sp ieee754sp_neg(ieee754sp x);
111 ieee754sp ieee754sp_scalb(ieee754sp x, int); 111 ieee754sp ieee754sp_scalb(ieee754sp x, int);
112 ieee754sp ieee754sp_logb(ieee754sp x); 112 ieee754sp ieee754sp_logb(ieee754sp x);
113 113
114 /* x with sign of y */ 114 /* x with sign of y */
115 ieee754sp ieee754sp_copysign(ieee754sp x, ieee754sp y); 115 ieee754sp ieee754sp_copysign(ieee754sp x, ieee754sp y);
116 116
117 ieee754sp ieee754sp_add(ieee754sp x, ieee754sp y); 117 ieee754sp ieee754sp_add(ieee754sp x, ieee754sp y);
118 ieee754sp ieee754sp_sub(ieee754sp x, ieee754sp y); 118 ieee754sp ieee754sp_sub(ieee754sp x, ieee754sp y);
119 ieee754sp ieee754sp_mul(ieee754sp x, ieee754sp y); 119 ieee754sp ieee754sp_mul(ieee754sp x, ieee754sp y);
120 ieee754sp ieee754sp_div(ieee754sp x, ieee754sp y); 120 ieee754sp ieee754sp_div(ieee754sp x, ieee754sp y);
121 121
122 ieee754sp ieee754sp_fint(int x); 122 ieee754sp ieee754sp_fint(int x);
123 ieee754sp ieee754sp_funs(unsigned x); 123 ieee754sp ieee754sp_funs(unsigned x);
124 ieee754sp ieee754sp_flong(s64 x); 124 ieee754sp ieee754sp_flong(s64 x);
125 ieee754sp ieee754sp_fulong(u64 x); 125 ieee754sp ieee754sp_fulong(u64 x);
126 ieee754sp ieee754sp_fdp(ieee754dp x); 126 ieee754sp ieee754sp_fdp(ieee754dp x);
127 127
128 int ieee754sp_tint(ieee754sp x); 128 int ieee754sp_tint(ieee754sp x);
129 unsigned int ieee754sp_tuns(ieee754sp x); 129 unsigned int ieee754sp_tuns(ieee754sp x);
130 s64 ieee754sp_tlong(ieee754sp x); 130 s64 ieee754sp_tlong(ieee754sp x);
131 u64 ieee754sp_tulong(ieee754sp x); 131 u64 ieee754sp_tulong(ieee754sp x);
132 132
133 int ieee754sp_cmp(ieee754sp x, ieee754sp y, int cop, int sig); 133 int ieee754sp_cmp(ieee754sp x, ieee754sp y, int cop, int sig);
134 /* 134 /*
135 * basic sp math 135 * basic sp math
136 */ 136 */
137 ieee754sp ieee754sp_modf(ieee754sp x, ieee754sp * ip); 137 ieee754sp ieee754sp_modf(ieee754sp x, ieee754sp * ip);
138 ieee754sp ieee754sp_frexp(ieee754sp x, int *exp); 138 ieee754sp ieee754sp_frexp(ieee754sp x, int *exp);
139 ieee754sp ieee754sp_ldexp(ieee754sp x, int exp); 139 ieee754sp ieee754sp_ldexp(ieee754sp x, int exp);
140 140
141 ieee754sp ieee754sp_ceil(ieee754sp x); 141 ieee754sp ieee754sp_ceil(ieee754sp x);
142 ieee754sp ieee754sp_floor(ieee754sp x); 142 ieee754sp ieee754sp_floor(ieee754sp x);
143 ieee754sp ieee754sp_trunc(ieee754sp x); 143 ieee754sp ieee754sp_trunc(ieee754sp x);
144 144
145 ieee754sp ieee754sp_sqrt(ieee754sp x); 145 ieee754sp ieee754sp_sqrt(ieee754sp x);
146 146
147 /* 147 /*
148 * double precision (often aka double) 148 * double precision (often aka double)
149 */ 149 */
150 int ieee754dp_finite(ieee754dp x); 150 int ieee754dp_finite(ieee754dp x);
151 int ieee754dp_class(ieee754dp x); 151 int ieee754dp_class(ieee754dp x);
152 152
153 /* x with sign of y */ 153 /* x with sign of y */
154 ieee754dp ieee754dp_copysign(ieee754dp x, ieee754dp y); 154 ieee754dp ieee754dp_copysign(ieee754dp x, ieee754dp y);
155 155
156 ieee754dp ieee754dp_add(ieee754dp x, ieee754dp y); 156 ieee754dp ieee754dp_add(ieee754dp x, ieee754dp y);
157 ieee754dp ieee754dp_sub(ieee754dp x, ieee754dp y); 157 ieee754dp ieee754dp_sub(ieee754dp x, ieee754dp y);
158 ieee754dp ieee754dp_mul(ieee754dp x, ieee754dp y); 158 ieee754dp ieee754dp_mul(ieee754dp x, ieee754dp y);
159 ieee754dp ieee754dp_div(ieee754dp x, ieee754dp y); 159 ieee754dp ieee754dp_div(ieee754dp x, ieee754dp y);
160 160
161 ieee754dp ieee754dp_abs(ieee754dp x); 161 ieee754dp ieee754dp_abs(ieee754dp x);
162 ieee754dp ieee754dp_neg(ieee754dp x); 162 ieee754dp ieee754dp_neg(ieee754dp x);
163 ieee754dp ieee754dp_scalb(ieee754dp x, int); 163 ieee754dp ieee754dp_scalb(ieee754dp x, int);
164 164
165 /* return exponent as integer in floating point format 165 /* return exponent as integer in floating point format
166 */ 166 */
167 ieee754dp ieee754dp_logb(ieee754dp x); 167 ieee754dp ieee754dp_logb(ieee754dp x);
168 168
169 ieee754dp ieee754dp_fint(int x); 169 ieee754dp ieee754dp_fint(int x);
170 ieee754dp ieee754dp_funs(unsigned x); 170 ieee754dp ieee754dp_funs(unsigned x);
171 ieee754dp ieee754dp_flong(s64 x); 171 ieee754dp ieee754dp_flong(s64 x);
172 ieee754dp ieee754dp_fulong(u64 x); 172 ieee754dp ieee754dp_fulong(u64 x);
173 ieee754dp ieee754dp_fsp(ieee754sp x); 173 ieee754dp ieee754dp_fsp(ieee754sp x);
174 174
175 ieee754dp ieee754dp_ceil(ieee754dp x); 175 ieee754dp ieee754dp_ceil(ieee754dp x);
176 ieee754dp ieee754dp_floor(ieee754dp x); 176 ieee754dp ieee754dp_floor(ieee754dp x);
177 ieee754dp ieee754dp_trunc(ieee754dp x); 177 ieee754dp ieee754dp_trunc(ieee754dp x);
178 178
179 int ieee754dp_tint(ieee754dp x); 179 int ieee754dp_tint(ieee754dp x);
180 unsigned int ieee754dp_tuns(ieee754dp x); 180 unsigned int ieee754dp_tuns(ieee754dp x);
181 s64 ieee754dp_tlong(ieee754dp x); 181 s64 ieee754dp_tlong(ieee754dp x);
182 u64 ieee754dp_tulong(ieee754dp x); 182 u64 ieee754dp_tulong(ieee754dp x);
183 183
184 int ieee754dp_cmp(ieee754dp x, ieee754dp y, int cop, int sig); 184 int ieee754dp_cmp(ieee754dp x, ieee754dp y, int cop, int sig);
185 /* 185 /*
186 * basic sp math 186 * basic sp math
187 */ 187 */
188 ieee754dp ieee754dp_modf(ieee754dp x, ieee754dp * ip); 188 ieee754dp ieee754dp_modf(ieee754dp x, ieee754dp * ip);
189 ieee754dp ieee754dp_frexp(ieee754dp x, int *exp); 189 ieee754dp ieee754dp_frexp(ieee754dp x, int *exp);
190 ieee754dp ieee754dp_ldexp(ieee754dp x, int exp); 190 ieee754dp ieee754dp_ldexp(ieee754dp x, int exp);
191 191
192 ieee754dp ieee754dp_ceil(ieee754dp x); 192 ieee754dp ieee754dp_ceil(ieee754dp x);
193 ieee754dp ieee754dp_floor(ieee754dp x); 193 ieee754dp ieee754dp_floor(ieee754dp x);
194 ieee754dp ieee754dp_trunc(ieee754dp x); 194 ieee754dp ieee754dp_trunc(ieee754dp x);
195 195
196 ieee754dp ieee754dp_sqrt(ieee754dp x); 196 ieee754dp ieee754dp_sqrt(ieee754dp x);
197 197
198 198
199 199
200 /* 5 types of floating point number 200 /* 5 types of floating point number
201 */ 201 */
202 #define IEEE754_CLASS_NORM 0x00 202 #define IEEE754_CLASS_NORM 0x00
203 #define IEEE754_CLASS_ZERO 0x01 203 #define IEEE754_CLASS_ZERO 0x01
204 #define IEEE754_CLASS_DNORM 0x02 204 #define IEEE754_CLASS_DNORM 0x02
205 #define IEEE754_CLASS_INF 0x03 205 #define IEEE754_CLASS_INF 0x03
206 #define IEEE754_CLASS_SNAN 0x04 206 #define IEEE754_CLASS_SNAN 0x04
207 #define IEEE754_CLASS_QNAN 0x05 207 #define IEEE754_CLASS_QNAN 0x05
208 extern const char *const ieee754_cname[];
209 208
210 /* exception numbers */ 209 /* exception numbers */
211 #define IEEE754_INEXACT 0x01 210 #define IEEE754_INEXACT 0x01
212 #define IEEE754_UNDERFLOW 0x02 211 #define IEEE754_UNDERFLOW 0x02
213 #define IEEE754_OVERFLOW 0x04 212 #define IEEE754_OVERFLOW 0x04
214 #define IEEE754_ZERO_DIVIDE 0x08 213 #define IEEE754_ZERO_DIVIDE 0x08
215 #define IEEE754_INVALID_OPERATION 0x10 214 #define IEEE754_INVALID_OPERATION 0x10
216 215
217 /* cmp operators 216 /* cmp operators
218 */ 217 */
219 #define IEEE754_CLT 0x01 218 #define IEEE754_CLT 0x01
220 #define IEEE754_CEQ 0x02 219 #define IEEE754_CEQ 0x02
221 #define IEEE754_CGT 0x04 220 #define IEEE754_CGT 0x04
222 #define IEEE754_CUN 0x08 221 #define IEEE754_CUN 0x08
223 222
224 /* rounding mode 223 /* rounding mode
225 */ 224 */
226 #define IEEE754_RN 0 /* round to nearest */ 225 #define IEEE754_RN 0 /* round to nearest */
227 #define IEEE754_RZ 1 /* round toward zero */ 226 #define IEEE754_RZ 1 /* round toward zero */
228 #define IEEE754_RD 2 /* round toward -Infinity */ 227 #define IEEE754_RD 2 /* round toward -Infinity */
229 #define IEEE754_RU 3 /* round toward +Infinity */ 228 #define IEEE754_RU 3 /* round toward +Infinity */
230 229
231 /* other naming */ 230 /* other naming */
232 #define IEEE754_RM IEEE754_RD 231 #define IEEE754_RM IEEE754_RD
233 #define IEEE754_RP IEEE754_RU 232 #define IEEE754_RP IEEE754_RU
234 233
235 /* "normal" comparisons 234 /* "normal" comparisons
236 */ 235 */
237 static inline int ieee754sp_eq(ieee754sp x, ieee754sp y) 236 static inline int ieee754sp_eq(ieee754sp x, ieee754sp y)
238 { 237 {
239 return ieee754sp_cmp(x, y, IEEE754_CEQ, 0); 238 return ieee754sp_cmp(x, y, IEEE754_CEQ, 0);
240 } 239 }
241 240
242 static inline int ieee754sp_ne(ieee754sp x, ieee754sp y) 241 static inline int ieee754sp_ne(ieee754sp x, ieee754sp y)
243 { 242 {
244 return ieee754sp_cmp(x, y, 243 return ieee754sp_cmp(x, y,
245 IEEE754_CLT | IEEE754_CGT | IEEE754_CUN, 0); 244 IEEE754_CLT | IEEE754_CGT | IEEE754_CUN, 0);
246 } 245 }
247 246
248 static inline int ieee754sp_lt(ieee754sp x, ieee754sp y) 247 static inline int ieee754sp_lt(ieee754sp x, ieee754sp y)
249 { 248 {
250 return ieee754sp_cmp(x, y, IEEE754_CLT, 0); 249 return ieee754sp_cmp(x, y, IEEE754_CLT, 0);
251 } 250 }
252 251
253 static inline int ieee754sp_le(ieee754sp x, ieee754sp y) 252 static inline int ieee754sp_le(ieee754sp x, ieee754sp y)
254 { 253 {
255 return ieee754sp_cmp(x, y, IEEE754_CLT | IEEE754_CEQ, 0); 254 return ieee754sp_cmp(x, y, IEEE754_CLT | IEEE754_CEQ, 0);
256 } 255 }
257 256
258 static inline int ieee754sp_gt(ieee754sp x, ieee754sp y) 257 static inline int ieee754sp_gt(ieee754sp x, ieee754sp y)
259 { 258 {
260 return ieee754sp_cmp(x, y, IEEE754_CGT, 0); 259 return ieee754sp_cmp(x, y, IEEE754_CGT, 0);
261 } 260 }
262 261
263 262
264 static inline int ieee754sp_ge(ieee754sp x, ieee754sp y) 263 static inline int ieee754sp_ge(ieee754sp x, ieee754sp y)
265 { 264 {
266 return ieee754sp_cmp(x, y, IEEE754_CGT | IEEE754_CEQ, 0); 265 return ieee754sp_cmp(x, y, IEEE754_CGT | IEEE754_CEQ, 0);
267 } 266 }
268 267
269 static inline int ieee754dp_eq(ieee754dp x, ieee754dp y) 268 static inline int ieee754dp_eq(ieee754dp x, ieee754dp y)
270 { 269 {
271 return ieee754dp_cmp(x, y, IEEE754_CEQ, 0); 270 return ieee754dp_cmp(x, y, IEEE754_CEQ, 0);
272 } 271 }
273 272
274 static inline int ieee754dp_ne(ieee754dp x, ieee754dp y) 273 static inline int ieee754dp_ne(ieee754dp x, ieee754dp y)
275 { 274 {
276 return ieee754dp_cmp(x, y, 275 return ieee754dp_cmp(x, y,
277 IEEE754_CLT | IEEE754_CGT | IEEE754_CUN, 0); 276 IEEE754_CLT | IEEE754_CGT | IEEE754_CUN, 0);
278 } 277 }
279 278
280 static inline int ieee754dp_lt(ieee754dp x, ieee754dp y) 279 static inline int ieee754dp_lt(ieee754dp x, ieee754dp y)
281 { 280 {
282 return ieee754dp_cmp(x, y, IEEE754_CLT, 0); 281 return ieee754dp_cmp(x, y, IEEE754_CLT, 0);
283 } 282 }
284 283
285 static inline int ieee754dp_le(ieee754dp x, ieee754dp y) 284 static inline int ieee754dp_le(ieee754dp x, ieee754dp y)
286 { 285 {
287 return ieee754dp_cmp(x, y, IEEE754_CLT | IEEE754_CEQ, 0); 286 return ieee754dp_cmp(x, y, IEEE754_CLT | IEEE754_CEQ, 0);
288 } 287 }
289 288
290 static inline int ieee754dp_gt(ieee754dp x, ieee754dp y) 289 static inline int ieee754dp_gt(ieee754dp x, ieee754dp y)
291 { 290 {
292 return ieee754dp_cmp(x, y, IEEE754_CGT, 0); 291 return ieee754dp_cmp(x, y, IEEE754_CGT, 0);
293 } 292 }
294 293
295 static inline int ieee754dp_ge(ieee754dp x, ieee754dp y) 294 static inline int ieee754dp_ge(ieee754dp x, ieee754dp y)
296 { 295 {
297 return ieee754dp_cmp(x, y, IEEE754_CGT | IEEE754_CEQ, 0); 296 return ieee754dp_cmp(x, y, IEEE754_CGT | IEEE754_CEQ, 0);
298 } 297 }
299 298
300 299
301 /* 300 /*
302 * Like strtod 301 * Like strtod
303 */ 302 */
304 ieee754dp ieee754dp_fstr(const char *s, char **endp); 303 ieee754dp ieee754dp_fstr(const char *s, char **endp);
305 char *ieee754dp_tstr(ieee754dp x, int prec, int fmt, int af); 304 char *ieee754dp_tstr(ieee754dp x, int prec, int fmt, int af);
306 305
307 306
308 /* 307 /*
309 * The control status register 308 * The control status register
310 */ 309 */
311 struct _ieee754_csr { 310 struct _ieee754_csr {
312 #ifdef __BIG_ENDIAN 311 #ifdef __BIG_ENDIAN
313 unsigned pad0:7; 312 unsigned pad0:7;
314 unsigned nod:1; /* set 1 for no denormalised numbers */ 313 unsigned nod:1; /* set 1 for no denormalised numbers */
315 unsigned c:1; /* condition */ 314 unsigned c:1; /* condition */
316 unsigned pad1:5; 315 unsigned pad1:5;
317 unsigned cx:6; /* exceptions this operation */ 316 unsigned cx:6; /* exceptions this operation */
318 unsigned mx:5; /* exception enable mask */ 317 unsigned mx:5; /* exception enable mask */
319 unsigned sx:5; /* exceptions total */ 318 unsigned sx:5; /* exceptions total */
320 unsigned rm:2; /* current rounding mode */ 319 unsigned rm:2; /* current rounding mode */
321 #endif 320 #endif
322 #ifdef __LITTLE_ENDIAN 321 #ifdef __LITTLE_ENDIAN
323 unsigned rm:2; /* current rounding mode */ 322 unsigned rm:2; /* current rounding mode */
324 unsigned sx:5; /* exceptions total */ 323 unsigned sx:5; /* exceptions total */
325 unsigned mx:5; /* exception enable mask */ 324 unsigned mx:5; /* exception enable mask */
326 unsigned cx:6; /* exceptions this operation */ 325 unsigned cx:6; /* exceptions this operation */
327 unsigned pad1:5; 326 unsigned pad1:5;
328 unsigned c:1; /* condition */ 327 unsigned c:1; /* condition */
329 unsigned nod:1; /* set 1 for no denormalised numbers */ 328 unsigned nod:1; /* set 1 for no denormalised numbers */
330 unsigned pad0:7; 329 unsigned pad0:7;
331 #endif 330 #endif
332 }; 331 };
333 #define ieee754_csr (*(struct _ieee754_csr *)(&current->thread.fpu.soft.fcr31)) 332 #define ieee754_csr (*(struct _ieee754_csr *)(&current->thread.fpu.soft.fcr31))
334 333
335 static inline unsigned ieee754_getrm(void) 334 static inline unsigned ieee754_getrm(void)
336 { 335 {
337 return (ieee754_csr.rm); 336 return (ieee754_csr.rm);
338 } 337 }
339 static inline unsigned ieee754_setrm(unsigned rm) 338 static inline unsigned ieee754_setrm(unsigned rm)
340 { 339 {
341 return (ieee754_csr.rm = rm); 340 return (ieee754_csr.rm = rm);
342 } 341 }
343 342
344 /* 343 /*
345 * get current exceptions 344 * get current exceptions
346 */ 345 */
347 static inline unsigned ieee754_getcx(void) 346 static inline unsigned ieee754_getcx(void)
348 { 347 {
349 return (ieee754_csr.cx); 348 return (ieee754_csr.cx);
350 } 349 }
351 350
352 /* test for current exception condition 351 /* test for current exception condition
353 */ 352 */
354 static inline int ieee754_cxtest(unsigned n) 353 static inline int ieee754_cxtest(unsigned n)
355 { 354 {
356 return (ieee754_csr.cx & n); 355 return (ieee754_csr.cx & n);
357 } 356 }
358 357
359 /* 358 /*
360 * get sticky exceptions 359 * get sticky exceptions
361 */ 360 */
362 static inline unsigned ieee754_getsx(void) 361 static inline unsigned ieee754_getsx(void)
363 { 362 {
364 return (ieee754_csr.sx); 363 return (ieee754_csr.sx);
365 } 364 }
366 365
367 /* clear sticky conditions 366 /* clear sticky conditions
368 */ 367 */
369 static inline unsigned ieee754_clrsx(void) 368 static inline unsigned ieee754_clrsx(void)
370 { 369 {
371 return (ieee754_csr.sx = 0); 370 return (ieee754_csr.sx = 0);
372 } 371 }
373 372
374 /* test for sticky exception condition 373 /* test for sticky exception condition
375 */ 374 */
376 static inline int ieee754_sxtest(unsigned n) 375 static inline int ieee754_sxtest(unsigned n)
377 { 376 {
378 return (ieee754_csr.sx & n); 377 return (ieee754_csr.sx & n);
379 } 378 }
380 379
381 /* debugging */ 380 /* debugging */
382 ieee754sp ieee754sp_dump(char *s, ieee754sp x); 381 ieee754sp ieee754sp_dump(char *s, ieee754sp x);
383 ieee754dp ieee754dp_dump(char *s, ieee754dp x); 382 ieee754dp ieee754dp_dump(char *s, ieee754dp x);
384 383
385 #define IEEE754_SPCVAL_PZERO 0 384 #define IEEE754_SPCVAL_PZERO 0
386 #define IEEE754_SPCVAL_NZERO 1 385 #define IEEE754_SPCVAL_NZERO 1
387 #define IEEE754_SPCVAL_PONE 2 386 #define IEEE754_SPCVAL_PONE 2
388 #define IEEE754_SPCVAL_NONE 3 387 #define IEEE754_SPCVAL_NONE 3
389 #define IEEE754_SPCVAL_PTEN 4 388 #define IEEE754_SPCVAL_PTEN 4
390 #define IEEE754_SPCVAL_NTEN 5 389 #define IEEE754_SPCVAL_NTEN 5
391 #define IEEE754_SPCVAL_PINFINITY 6 390 #define IEEE754_SPCVAL_PINFINITY 6
392 #define IEEE754_SPCVAL_NINFINITY 7 391 #define IEEE754_SPCVAL_NINFINITY 7
393 #define IEEE754_SPCVAL_INDEF 8 392 #define IEEE754_SPCVAL_INDEF 8
394 #define IEEE754_SPCVAL_PMAX 9 /* +max norm */ 393 #define IEEE754_SPCVAL_PMAX 9 /* +max norm */
395 #define IEEE754_SPCVAL_NMAX 10 /* -max norm */ 394 #define IEEE754_SPCVAL_NMAX 10 /* -max norm */
396 #define IEEE754_SPCVAL_PMIN 11 /* +min norm */ 395 #define IEEE754_SPCVAL_PMIN 11 /* +min norm */
397 #define IEEE754_SPCVAL_NMIN 12 /* +min norm */ 396 #define IEEE754_SPCVAL_NMIN 12 /* +min norm */
398 #define IEEE754_SPCVAL_PMIND 13 /* +min denorm */ 397 #define IEEE754_SPCVAL_PMIND 13 /* +min denorm */
399 #define IEEE754_SPCVAL_NMIND 14 /* +min denorm */ 398 #define IEEE754_SPCVAL_NMIND 14 /* +min denorm */
400 #define IEEE754_SPCVAL_P1E31 15 /* + 1.0e31 */ 399 #define IEEE754_SPCVAL_P1E31 15 /* + 1.0e31 */
401 #define IEEE754_SPCVAL_P1E63 16 /* + 1.0e63 */ 400 #define IEEE754_SPCVAL_P1E63 16 /* + 1.0e63 */
402 401
403 extern const struct ieee754dp_konst __ieee754dp_spcvals[]; 402 extern const struct ieee754dp_konst __ieee754dp_spcvals[];
404 extern const struct ieee754sp_konst __ieee754sp_spcvals[]; 403 extern const struct ieee754sp_konst __ieee754sp_spcvals[];
405 #define ieee754dp_spcvals ((const ieee754dp *)__ieee754dp_spcvals) 404 #define ieee754dp_spcvals ((const ieee754dp *)__ieee754dp_spcvals)
406 #define ieee754sp_spcvals ((const ieee754sp *)__ieee754sp_spcvals) 405 #define ieee754sp_spcvals ((const ieee754sp *)__ieee754sp_spcvals)
407 406
408 /* 407 /*
409 * Return infinity with given sign 408 * Return infinity with given sign
410 */ 409 */
411 #define ieee754dp_inf(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PINFINITY+(sn)]) 410 #define ieee754dp_inf(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PINFINITY+(sn)])
412 #define ieee754dp_zero(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PZERO+(sn)]) 411 #define ieee754dp_zero(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PZERO+(sn)])
413 #define ieee754dp_one(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PONE+(sn)]) 412 #define ieee754dp_one(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PONE+(sn)])
414 #define ieee754dp_ten(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PTEN+(sn)]) 413 #define ieee754dp_ten(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PTEN+(sn)])
415 #define ieee754dp_indef() (ieee754dp_spcvals[IEEE754_SPCVAL_INDEF]) 414 #define ieee754dp_indef() (ieee754dp_spcvals[IEEE754_SPCVAL_INDEF])
416 #define ieee754dp_max(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMAX+(sn)]) 415 #define ieee754dp_max(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMAX+(sn)])
417 #define ieee754dp_min(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIN+(sn)]) 416 #define ieee754dp_min(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIN+(sn)])
418 #define ieee754dp_mind(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIND+(sn)]) 417 #define ieee754dp_mind(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIND+(sn)])
419 #define ieee754dp_1e31() (ieee754dp_spcvals[IEEE754_SPCVAL_P1E31]) 418 #define ieee754dp_1e31() (ieee754dp_spcvals[IEEE754_SPCVAL_P1E31])
420 #define ieee754dp_1e63() (ieee754dp_spcvals[IEEE754_SPCVAL_P1E63]) 419 #define ieee754dp_1e63() (ieee754dp_spcvals[IEEE754_SPCVAL_P1E63])
421 420
422 #define ieee754sp_inf(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PINFINITY+(sn)]) 421 #define ieee754sp_inf(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PINFINITY+(sn)])
423 #define ieee754sp_zero(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PZERO+(sn)]) 422 #define ieee754sp_zero(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PZERO+(sn)])
424 #define ieee754sp_one(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PONE+(sn)]) 423 #define ieee754sp_one(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PONE+(sn)])
425 #define ieee754sp_ten(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PTEN+(sn)]) 424 #define ieee754sp_ten(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PTEN+(sn)])
426 #define ieee754sp_indef() (ieee754sp_spcvals[IEEE754_SPCVAL_INDEF]) 425 #define ieee754sp_indef() (ieee754sp_spcvals[IEEE754_SPCVAL_INDEF])
427 #define ieee754sp_max(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMAX+(sn)]) 426 #define ieee754sp_max(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMAX+(sn)])
428 #define ieee754sp_min(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIN+(sn)]) 427 #define ieee754sp_min(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIN+(sn)])
429 #define ieee754sp_mind(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIND+(sn)]) 428 #define ieee754sp_mind(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIND+(sn)])
430 #define ieee754sp_1e31() (ieee754sp_spcvals[IEEE754_SPCVAL_P1E31]) 429 #define ieee754sp_1e31() (ieee754sp_spcvals[IEEE754_SPCVAL_P1E31])
431 #define ieee754sp_1e63() (ieee754sp_spcvals[IEEE754_SPCVAL_P1E63]) 430 #define ieee754sp_1e63() (ieee754sp_spcvals[IEEE754_SPCVAL_P1E63])
432 431
433 /* 432 /*
434 * Indefinite integer value 433 * Indefinite integer value
435 */ 434 */
436 #define ieee754si_indef() INT_MAX 435 #define ieee754si_indef() INT_MAX
437 #ifdef LONG_LONG_MAX 436 #ifdef LONG_LONG_MAX
438 #define ieee754di_indef() LONG_LONG_MAX 437 #define ieee754di_indef() LONG_LONG_MAX
439 #else 438 #else
440 #define ieee754di_indef() ((s64)(~0ULL>>1)) 439 #define ieee754di_indef() ((s64)(~0ULL>>1))
441 #endif 440 #endif
442 441
443 /* IEEE exception context, passed to handler */ 442 /* IEEE exception context, passed to handler */
444 struct ieee754xctx { 443 struct ieee754xctx {
445 const char *op; /* operation name */ 444 const char *op; /* operation name */
446 int rt; /* result type */ 445 int rt; /* result type */
447 union { 446 union {
448 ieee754sp sp; /* single precision */ 447 ieee754sp sp; /* single precision */
449 ieee754dp dp; /* double precision */ 448 ieee754dp dp; /* double precision */
450 #ifdef IEEE854_XP 449 #ifdef IEEE854_XP
451 ieee754xp xp; /* extended precision */ 450 ieee754xp xp; /* extended precision */
452 #endif 451 #endif
453 int si; /* standard signed integer (32bits) */ 452 int si; /* standard signed integer (32bits) */
454 s64 di; /* extended signed integer (64bits) */ 453 s64 di; /* extended signed integer (64bits) */
455 } rv; /* default result format implied by op */ 454 } rv; /* default result format implied by op */
456 va_list ap; 455 va_list ap;
457 }; 456 };
458 457
459 /* result types for xctx.rt */ 458 /* result types for xctx.rt */
460 #define IEEE754_RT_SP 0 459 #define IEEE754_RT_SP 0
461 #define IEEE754_RT_DP 1 460 #define IEEE754_RT_DP 1
462 #define IEEE754_RT_XP 2 461 #define IEEE754_RT_XP 2
463 #define IEEE754_RT_SI 3 462 #define IEEE754_RT_SI 3
464 #define IEEE754_RT_DI 4 463 #define IEEE754_RT_DI 4
465 464
466 extern void ieee754_xcpt(struct ieee754xctx *xcp); 465 extern void ieee754_xcpt(struct ieee754xctx *xcp);
467 466
468 /* compat */ 467 /* compat */
469 #define ieee754dp_fix(x) ieee754dp_tint(x) 468 #define ieee754dp_fix(x) ieee754dp_tint(x)
470 #define ieee754sp_fix(x) ieee754sp_tint(x) 469 #define ieee754sp_fix(x) ieee754sp_tint(x)
471 470
472 #endif /* __ARCH_MIPS_MATH_EMU_IEEE754_H */ 471 #endif /* __ARCH_MIPS_MATH_EMU_IEEE754_H */
473 472