annotate libgcc/soft-fp/soft-fp.h @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Software floating-point emulation.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
2 Copyright (C) 1997-2019 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 This file is part of the GNU C Library.
kono
parents:
diff changeset
4 Contributed by Richard Henderson (rth@cygnus.com),
kono
parents:
diff changeset
5 Jakub Jelinek (jj@ultra.linux.cz),
kono
parents:
diff changeset
6 David S. Miller (davem@redhat.com) and
kono
parents:
diff changeset
7 Peter Maydell (pmaydell@chiark.greenend.org.uk).
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 The GNU C Library is free software; you can redistribute it and/or
kono
parents:
diff changeset
10 modify it under the terms of the GNU Lesser General Public
kono
parents:
diff changeset
11 License as published by the Free Software Foundation; either
kono
parents:
diff changeset
12 version 2.1 of the License, or (at your option) any later version.
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 In addition to the permissions in the GNU Lesser General Public
kono
parents:
diff changeset
15 License, the Free Software Foundation gives you unlimited
kono
parents:
diff changeset
16 permission to link the compiled version of this file into
kono
parents:
diff changeset
17 combinations with other programs, and to distribute those
kono
parents:
diff changeset
18 combinations without any restriction coming from the use of this
kono
parents:
diff changeset
19 file. (The Lesser General Public License restrictions do apply in
kono
parents:
diff changeset
20 other respects; for example, they cover modification of the file,
kono
parents:
diff changeset
21 and distribution when not linked into a combine executable.)
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 The GNU C Library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
26 Lesser General Public License for more details.
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 You should have received a copy of the GNU Lesser General Public
kono
parents:
diff changeset
29 License along with the GNU C Library; if not, see
kono
parents:
diff changeset
30 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 #ifndef SOFT_FP_H
kono
parents:
diff changeset
33 #define SOFT_FP_H 1
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 #ifdef _LIBC
kono
parents:
diff changeset
36 # include <sfp-machine.h>
kono
parents:
diff changeset
37 #elif defined __KERNEL__
kono
parents:
diff changeset
38 /* The Linux kernel uses asm/ names for architecture-specific
kono
parents:
diff changeset
39 files. */
kono
parents:
diff changeset
40 # include <asm/sfp-machine.h>
kono
parents:
diff changeset
41 #else
kono
parents:
diff changeset
42 # include "sfp-machine.h"
kono
parents:
diff changeset
43 #endif
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 /* Allow sfp-machine to have its own byte order definitions. */
kono
parents:
diff changeset
46 #ifndef __BYTE_ORDER
kono
parents:
diff changeset
47 # ifdef _LIBC
kono
parents:
diff changeset
48 # include <endian.h>
kono
parents:
diff changeset
49 # else
kono
parents:
diff changeset
50 # error "endianness not defined by sfp-machine.h"
kono
parents:
diff changeset
51 # endif
kono
parents:
diff changeset
52 #endif
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 /* For unreachable default cases in switch statements over bitwise OR
kono
parents:
diff changeset
55 of FP_CLS_* values. */
kono
parents:
diff changeset
56 #if (defined __GNUC__ \
kono
parents:
diff changeset
57 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)))
kono
parents:
diff changeset
58 # define _FP_UNREACHABLE __builtin_unreachable ()
kono
parents:
diff changeset
59 #else
kono
parents:
diff changeset
60 # define _FP_UNREACHABLE abort ()
kono
parents:
diff changeset
61 #endif
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 #if ((defined __GNUC__ \
kono
parents:
diff changeset
64 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))) \
kono
parents:
diff changeset
65 || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L))
kono
parents:
diff changeset
66 # define _FP_STATIC_ASSERT(expr, msg) \
kono
parents:
diff changeset
67 _Static_assert ((expr), msg)
kono
parents:
diff changeset
68 #else
kono
parents:
diff changeset
69 # define _FP_STATIC_ASSERT(expr, msg) \
kono
parents:
diff changeset
70 extern int (*__Static_assert_function (void)) \
kono
parents:
diff changeset
71 [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
kono
parents:
diff changeset
72 #endif
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 /* In the Linux kernel, some architectures have a single function that
kono
parents:
diff changeset
75 uses different kinds of unpacking and packing depending on the
kono
parents:
diff changeset
76 instruction being emulated, meaning it is not readily visible to
kono
parents:
diff changeset
77 the compiler that variables from _FP_DECL and _FP_FRAC_DECL_*
kono
parents:
diff changeset
78 macros are only used in cases where they were initialized. */
kono
parents:
diff changeset
79 #ifdef __KERNEL__
kono
parents:
diff changeset
80 # define _FP_ZERO_INIT = 0
kono
parents:
diff changeset
81 #else
kono
parents:
diff changeset
82 # define _FP_ZERO_INIT
kono
parents:
diff changeset
83 #endif
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 #define _FP_WORKBITS 3
kono
parents:
diff changeset
86 #define _FP_WORK_LSB ((_FP_W_TYPE) 1 << 3)
kono
parents:
diff changeset
87 #define _FP_WORK_ROUND ((_FP_W_TYPE) 1 << 2)
kono
parents:
diff changeset
88 #define _FP_WORK_GUARD ((_FP_W_TYPE) 1 << 1)
kono
parents:
diff changeset
89 #define _FP_WORK_STICKY ((_FP_W_TYPE) 1 << 0)
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 #ifndef FP_RND_NEAREST
kono
parents:
diff changeset
92 # define FP_RND_NEAREST 0
kono
parents:
diff changeset
93 # define FP_RND_ZERO 1
kono
parents:
diff changeset
94 # define FP_RND_PINF 2
kono
parents:
diff changeset
95 # define FP_RND_MINF 3
kono
parents:
diff changeset
96 #endif
kono
parents:
diff changeset
97 #ifndef FP_ROUNDMODE
kono
parents:
diff changeset
98 # define FP_ROUNDMODE FP_RND_NEAREST
kono
parents:
diff changeset
99 #endif
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 /* By default don't care about exceptions. */
kono
parents:
diff changeset
102 #ifndef FP_EX_INVALID
kono
parents:
diff changeset
103 # define FP_EX_INVALID 0
kono
parents:
diff changeset
104 #endif
kono
parents:
diff changeset
105 #ifndef FP_EX_OVERFLOW
kono
parents:
diff changeset
106 # define FP_EX_OVERFLOW 0
kono
parents:
diff changeset
107 #endif
kono
parents:
diff changeset
108 #ifndef FP_EX_UNDERFLOW
kono
parents:
diff changeset
109 # define FP_EX_UNDERFLOW 0
kono
parents:
diff changeset
110 #endif
kono
parents:
diff changeset
111 #ifndef FP_EX_DIVZERO
kono
parents:
diff changeset
112 # define FP_EX_DIVZERO 0
kono
parents:
diff changeset
113 #endif
kono
parents:
diff changeset
114 #ifndef FP_EX_INEXACT
kono
parents:
diff changeset
115 # define FP_EX_INEXACT 0
kono
parents:
diff changeset
116 #endif
kono
parents:
diff changeset
117 #ifndef FP_EX_DENORM
kono
parents:
diff changeset
118 # define FP_EX_DENORM 0
kono
parents:
diff changeset
119 #endif
kono
parents:
diff changeset
120
kono
parents:
diff changeset
121 /* Sub-exceptions of "invalid". */
kono
parents:
diff changeset
122 /* Signaling NaN operand. */
kono
parents:
diff changeset
123 #ifndef FP_EX_INVALID_SNAN
kono
parents:
diff changeset
124 # define FP_EX_INVALID_SNAN 0
kono
parents:
diff changeset
125 #endif
kono
parents:
diff changeset
126 /* Inf * 0. */
kono
parents:
diff changeset
127 #ifndef FP_EX_INVALID_IMZ
kono
parents:
diff changeset
128 # define FP_EX_INVALID_IMZ 0
kono
parents:
diff changeset
129 #endif
kono
parents:
diff changeset
130 /* fma (Inf, 0, c). */
kono
parents:
diff changeset
131 #ifndef FP_EX_INVALID_IMZ_FMA
kono
parents:
diff changeset
132 # define FP_EX_INVALID_IMZ_FMA 0
kono
parents:
diff changeset
133 #endif
kono
parents:
diff changeset
134 /* Inf - Inf. */
kono
parents:
diff changeset
135 #ifndef FP_EX_INVALID_ISI
kono
parents:
diff changeset
136 # define FP_EX_INVALID_ISI 0
kono
parents:
diff changeset
137 #endif
kono
parents:
diff changeset
138 /* 0 / 0. */
kono
parents:
diff changeset
139 #ifndef FP_EX_INVALID_ZDZ
kono
parents:
diff changeset
140 # define FP_EX_INVALID_ZDZ 0
kono
parents:
diff changeset
141 #endif
kono
parents:
diff changeset
142 /* Inf / Inf. */
kono
parents:
diff changeset
143 #ifndef FP_EX_INVALID_IDI
kono
parents:
diff changeset
144 # define FP_EX_INVALID_IDI 0
kono
parents:
diff changeset
145 #endif
kono
parents:
diff changeset
146 /* sqrt (negative). */
kono
parents:
diff changeset
147 #ifndef FP_EX_INVALID_SQRT
kono
parents:
diff changeset
148 # define FP_EX_INVALID_SQRT 0
kono
parents:
diff changeset
149 #endif
kono
parents:
diff changeset
150 /* Invalid conversion to integer. */
kono
parents:
diff changeset
151 #ifndef FP_EX_INVALID_CVI
kono
parents:
diff changeset
152 # define FP_EX_INVALID_CVI 0
kono
parents:
diff changeset
153 #endif
kono
parents:
diff changeset
154 /* Invalid comparison. */
kono
parents:
diff changeset
155 #ifndef FP_EX_INVALID_VC
kono
parents:
diff changeset
156 # define FP_EX_INVALID_VC 0
kono
parents:
diff changeset
157 #endif
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 /* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the
kono
parents:
diff changeset
160 struct layout variant used for structures where bit-fields are used
kono
parents:
diff changeset
161 to access specific parts of binary floating-point numbers. This is
kono
parents:
diff changeset
162 required for systems where the default ABI uses struct layout with
kono
parents:
diff changeset
163 differences in how consecutive bit-fields are laid out from the
kono
parents:
diff changeset
164 default expected by soft-fp. */
kono
parents:
diff changeset
165 #ifndef _FP_STRUCT_LAYOUT
kono
parents:
diff changeset
166 # define _FP_STRUCT_LAYOUT
kono
parents:
diff changeset
167 #endif
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 #ifdef _FP_DECL_EX
kono
parents:
diff changeset
170 # define FP_DECL_EX \
kono
parents:
diff changeset
171 int _fex = 0; \
kono
parents:
diff changeset
172 _FP_DECL_EX
kono
parents:
diff changeset
173 #else
kono
parents:
diff changeset
174 # define FP_DECL_EX int _fex = 0
kono
parents:
diff changeset
175 #endif
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 /* Initialize any machine-specific state used in FP_ROUNDMODE,
kono
parents:
diff changeset
178 FP_TRAPPING_EXCEPTIONS or FP_HANDLE_EXCEPTIONS. */
kono
parents:
diff changeset
179 #ifndef FP_INIT_ROUNDMODE
kono
parents:
diff changeset
180 # define FP_INIT_ROUNDMODE do {} while (0)
kono
parents:
diff changeset
181 #endif
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 /* Initialize any machine-specific state used in
kono
parents:
diff changeset
184 FP_TRAPPING_EXCEPTIONS or FP_HANDLE_EXCEPTIONS. */
kono
parents:
diff changeset
185 #ifndef FP_INIT_TRAPPING_EXCEPTIONS
kono
parents:
diff changeset
186 # define FP_INIT_TRAPPING_EXCEPTIONS FP_INIT_ROUNDMODE
kono
parents:
diff changeset
187 #endif
kono
parents:
diff changeset
188
kono
parents:
diff changeset
189 /* Initialize any machine-specific state used in
kono
parents:
diff changeset
190 FP_HANDLE_EXCEPTIONS. */
kono
parents:
diff changeset
191 #ifndef FP_INIT_EXCEPTIONS
kono
parents:
diff changeset
192 # define FP_INIT_EXCEPTIONS FP_INIT_TRAPPING_EXCEPTIONS
kono
parents:
diff changeset
193 #endif
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 #ifndef FP_HANDLE_EXCEPTIONS
kono
parents:
diff changeset
196 # define FP_HANDLE_EXCEPTIONS do {} while (0)
kono
parents:
diff changeset
197 #endif
kono
parents:
diff changeset
198
kono
parents:
diff changeset
199 /* Whether to flush subnormal inputs to zero with the same sign. */
kono
parents:
diff changeset
200 #ifndef FP_DENORM_ZERO
kono
parents:
diff changeset
201 # define FP_DENORM_ZERO 0
kono
parents:
diff changeset
202 #endif
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 #ifndef FP_INHIBIT_RESULTS
kono
parents:
diff changeset
205 /* By default we write the results always.
kono
parents:
diff changeset
206 sfp-machine may override this and e.g.
kono
parents:
diff changeset
207 check if some exceptions are unmasked
kono
parents:
diff changeset
208 and inhibit it in such a case. */
kono
parents:
diff changeset
209 # define FP_INHIBIT_RESULTS 0
kono
parents:
diff changeset
210 #endif
kono
parents:
diff changeset
211
kono
parents:
diff changeset
212 #define FP_SET_EXCEPTION(ex) \
kono
parents:
diff changeset
213 _fex |= (ex)
kono
parents:
diff changeset
214
kono
parents:
diff changeset
215 #define FP_CUR_EXCEPTIONS \
kono
parents:
diff changeset
216 (_fex)
kono
parents:
diff changeset
217
kono
parents:
diff changeset
218 #ifndef FP_TRAPPING_EXCEPTIONS
kono
parents:
diff changeset
219 # define FP_TRAPPING_EXCEPTIONS 0
kono
parents:
diff changeset
220 #endif
kono
parents:
diff changeset
221
kono
parents:
diff changeset
222 /* A file using soft-fp may define FP_NO_EXCEPTIONS before including
kono
parents:
diff changeset
223 soft-fp.h to indicate that, although a macro used there could raise
kono
parents:
diff changeset
224 exceptions, or do rounding and potentially thereby raise
kono
parents:
diff changeset
225 exceptions, for some arguments, for the particular arguments used
kono
parents:
diff changeset
226 in that file no exceptions or rounding can occur. Such a file
kono
parents:
diff changeset
227 should not itself use macros relating to handling exceptions and
kono
parents:
diff changeset
228 rounding modes; this is only for indirect uses (in particular, in
kono
parents:
diff changeset
229 _FP_FROM_INT and the macros it calls). */
kono
parents:
diff changeset
230 #ifdef FP_NO_EXCEPTIONS
kono
parents:
diff changeset
231
kono
parents:
diff changeset
232 # undef FP_SET_EXCEPTION
kono
parents:
diff changeset
233 # define FP_SET_EXCEPTION(ex) do {} while (0)
kono
parents:
diff changeset
234
kono
parents:
diff changeset
235 # undef FP_CUR_EXCEPTIONS
kono
parents:
diff changeset
236 # define FP_CUR_EXCEPTIONS 0
kono
parents:
diff changeset
237
kono
parents:
diff changeset
238 # undef FP_TRAPPING_EXCEPTIONS
kono
parents:
diff changeset
239 # define FP_TRAPPING_EXCEPTIONS 0
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241 # undef FP_ROUNDMODE
kono
parents:
diff changeset
242 # define FP_ROUNDMODE FP_RND_ZERO
kono
parents:
diff changeset
243
kono
parents:
diff changeset
244 # undef _FP_TININESS_AFTER_ROUNDING
kono
parents:
diff changeset
245 # define _FP_TININESS_AFTER_ROUNDING 0
kono
parents:
diff changeset
246
kono
parents:
diff changeset
247 #endif
kono
parents:
diff changeset
248
kono
parents:
diff changeset
249 /* A file using soft-fp may define FP_NO_EXACT_UNDERFLOW before
kono
parents:
diff changeset
250 including soft-fp.h to indicate that, although a macro used there
kono
parents:
diff changeset
251 could allow for the case of exact underflow requiring the underflow
kono
parents:
diff changeset
252 exception to be raised if traps are enabled, for the particular
kono
parents:
diff changeset
253 arguments used in that file no exact underflow can occur. */
kono
parents:
diff changeset
254 #ifdef FP_NO_EXACT_UNDERFLOW
kono
parents:
diff changeset
255 # undef FP_TRAPPING_EXCEPTIONS
kono
parents:
diff changeset
256 # define FP_TRAPPING_EXCEPTIONS 0
kono
parents:
diff changeset
257 #endif
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 #define _FP_ROUND_NEAREST(wc, X) \
kono
parents:
diff changeset
260 do \
kono
parents:
diff changeset
261 { \
kono
parents:
diff changeset
262 if ((_FP_FRAC_LOW_##wc (X) & 15) != _FP_WORK_ROUND) \
kono
parents:
diff changeset
263 _FP_FRAC_ADDI_##wc (X, _FP_WORK_ROUND); \
kono
parents:
diff changeset
264 } \
kono
parents:
diff changeset
265 while (0)
kono
parents:
diff changeset
266
kono
parents:
diff changeset
267 #define _FP_ROUND_ZERO(wc, X) (void) 0
kono
parents:
diff changeset
268
kono
parents:
diff changeset
269 #define _FP_ROUND_PINF(wc, X) \
kono
parents:
diff changeset
270 do \
kono
parents:
diff changeset
271 { \
kono
parents:
diff changeset
272 if (!X##_s && (_FP_FRAC_LOW_##wc (X) & 7)) \
kono
parents:
diff changeset
273 _FP_FRAC_ADDI_##wc (X, _FP_WORK_LSB); \
kono
parents:
diff changeset
274 } \
kono
parents:
diff changeset
275 while (0)
kono
parents:
diff changeset
276
kono
parents:
diff changeset
277 #define _FP_ROUND_MINF(wc, X) \
kono
parents:
diff changeset
278 do \
kono
parents:
diff changeset
279 { \
kono
parents:
diff changeset
280 if (X##_s && (_FP_FRAC_LOW_##wc (X) & 7)) \
kono
parents:
diff changeset
281 _FP_FRAC_ADDI_##wc (X, _FP_WORK_LSB); \
kono
parents:
diff changeset
282 } \
kono
parents:
diff changeset
283 while (0)
kono
parents:
diff changeset
284
kono
parents:
diff changeset
285 #define _FP_ROUND(wc, X) \
kono
parents:
diff changeset
286 do \
kono
parents:
diff changeset
287 { \
kono
parents:
diff changeset
288 if (_FP_FRAC_LOW_##wc (X) & 7) \
kono
parents:
diff changeset
289 { \
kono
parents:
diff changeset
290 FP_SET_EXCEPTION (FP_EX_INEXACT); \
kono
parents:
diff changeset
291 switch (FP_ROUNDMODE) \
kono
parents:
diff changeset
292 { \
kono
parents:
diff changeset
293 case FP_RND_NEAREST: \
kono
parents:
diff changeset
294 _FP_ROUND_NEAREST (wc, X); \
kono
parents:
diff changeset
295 break; \
kono
parents:
diff changeset
296 case FP_RND_ZERO: \
kono
parents:
diff changeset
297 _FP_ROUND_ZERO (wc, X); \
kono
parents:
diff changeset
298 break; \
kono
parents:
diff changeset
299 case FP_RND_PINF: \
kono
parents:
diff changeset
300 _FP_ROUND_PINF (wc, X); \
kono
parents:
diff changeset
301 break; \
kono
parents:
diff changeset
302 case FP_RND_MINF: \
kono
parents:
diff changeset
303 _FP_ROUND_MINF (wc, X); \
kono
parents:
diff changeset
304 break; \
kono
parents:
diff changeset
305 } \
kono
parents:
diff changeset
306 } \
kono
parents:
diff changeset
307 } \
kono
parents:
diff changeset
308 while (0)
kono
parents:
diff changeset
309
kono
parents:
diff changeset
310 #define FP_CLS_NORMAL 0
kono
parents:
diff changeset
311 #define FP_CLS_ZERO 1
kono
parents:
diff changeset
312 #define FP_CLS_INF 2
kono
parents:
diff changeset
313 #define FP_CLS_NAN 3
kono
parents:
diff changeset
314
kono
parents:
diff changeset
315 #define _FP_CLS_COMBINE(x, y) (((x) << 2) | (y))
kono
parents:
diff changeset
316
kono
parents:
diff changeset
317 #include "op-1.h"
kono
parents:
diff changeset
318 #include "op-2.h"
kono
parents:
diff changeset
319 #include "op-4.h"
kono
parents:
diff changeset
320 #include "op-8.h"
kono
parents:
diff changeset
321 #include "op-common.h"
kono
parents:
diff changeset
322
kono
parents:
diff changeset
323 /* Sigh. Silly things longlong.h needs. */
kono
parents:
diff changeset
324 #define UWtype _FP_W_TYPE
kono
parents:
diff changeset
325 #define W_TYPE_SIZE _FP_W_TYPE_SIZE
kono
parents:
diff changeset
326
kono
parents:
diff changeset
327 typedef int QItype __attribute__ ((mode (QI)));
kono
parents:
diff changeset
328 typedef int SItype __attribute__ ((mode (SI)));
kono
parents:
diff changeset
329 typedef int DItype __attribute__ ((mode (DI)));
kono
parents:
diff changeset
330 typedef unsigned int UQItype __attribute__ ((mode (QI)));
kono
parents:
diff changeset
331 typedef unsigned int USItype __attribute__ ((mode (SI)));
kono
parents:
diff changeset
332 typedef unsigned int UDItype __attribute__ ((mode (DI)));
kono
parents:
diff changeset
333 #if _FP_W_TYPE_SIZE == 32
kono
parents:
diff changeset
334 typedef unsigned int UHWtype __attribute__ ((mode (HI)));
kono
parents:
diff changeset
335 #elif _FP_W_TYPE_SIZE == 64
kono
parents:
diff changeset
336 typedef USItype UHWtype;
kono
parents:
diff changeset
337 #endif
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339 #ifndef CMPtype
kono
parents:
diff changeset
340 # define CMPtype int
kono
parents:
diff changeset
341 #endif
kono
parents:
diff changeset
342
kono
parents:
diff changeset
343 #define SI_BITS (__CHAR_BIT__ * (int) sizeof (SItype))
kono
parents:
diff changeset
344 #define DI_BITS (__CHAR_BIT__ * (int) sizeof (DItype))
kono
parents:
diff changeset
345
kono
parents:
diff changeset
346 #ifndef umul_ppmm
kono
parents:
diff changeset
347 # ifdef _LIBC
kono
parents:
diff changeset
348 # include <stdlib/longlong.h>
kono
parents:
diff changeset
349 # else
kono
parents:
diff changeset
350 # include "longlong.h"
kono
parents:
diff changeset
351 # endif
kono
parents:
diff changeset
352 #endif
kono
parents:
diff changeset
353
kono
parents:
diff changeset
354 #endif /* !SOFT_FP_H */