]> www.ginac.de Git - cln.git/blob - src/float/base/cl_ieee.cc
fb4ca4939770187e8da5c13017d85b5879148e1c
[cln.git] / src / float / base / cl_ieee.cc
1 // System dependent IEEE floating-point coprocessor initialization.
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 CL_PROVIDE(cl_ieee)
7
8 // Specification.
9 #include "cl_ieee.h"
10
11
12 // Implementation.
13
14 #include "cl_FF.h"
15 #include "cl_DF.h"
16 #include "cl_float_config.h"
17
18 #if (defined(linux) || defined(__linux)) && (defined(FAST_FLOAT) || defined(FAST_DOUBLE))
19
20 // Damit Division durch 0.0 ein NaN und kein SIGFPE liefert:
21 // Entweder mit -lieee linken,
22 // oder libc-linux/sysdeps/linux/{i386,m68k}/ieee.c kopieren:
23
24 #include <fpu_control.h>
25
26 #if 0 // Leider gibt das einen Error, wenn man zusätzlich mit -lieee linkt.
27         #if defined(HAVE_FPU_CONTROL_T)
28                 fpu_control_t __fpu_control = _FPU_IEEE;
29         #else
30                 unsigned short __fpu_control = _FPU_IEEE;
31         #endif
32 #else
33 AT_INITIALIZATION(ieee)
34 {
35         #if defined(HAVE_FPU_CONTROL_T)
36                 extern fpu_control_t __fpu_control;
37                 __fpu_control = _FPU_IEEE;
38         #elif defined(HAVE_SETFPUCW)
39                 __setfpucw(_FPU_IEEE);
40         #else
41                 extern unsigned short __fpu_control;
42                 __fpu_control = _FPU_IEEE;
43         #endif
44 }
45 #endif
46
47 #endif
48
49 // This dummy links in this module whenever some module needs IEEE floats.
50 int cl_ieee_module;
51
52 CL_PROVIDE_END(cl_ieee)