]> git.pld-linux.org Git - packages/gcc4.git/blame - gcc4-ldbl-default.patch
- added from gcc/
[packages/gcc4.git] / gcc4-ldbl-default.patch
CommitLineData
4ada39a3
AM
12006-02-10 Jakub Jelinek <jakub@redhat.com>
2
3 * doc/install.texi (Options specification): Document
4 --with-long-double-128.
5
62006-02-05 Jakub Jelinek <jakub@redhat.com>
7
8 * config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file.
9 (sparc64-*-linux*): Likewise.
10 * config/sparc/t-linux64 (SHLIB_MAPFILES): Removed.
11 * config/sparc/t-linux: New file.
12 * config/sparc/libgcc-sparc-glibc.ver (__fixtfdi, __fixunstfdi,
13 __floatditf): Export at GCC_LDBL_3.0 if -m32 -mlong-double-128.
14 (__divtc3, __multc3, __powitf2): Export at GCC_LDBL_4.0.0 if
15 -m32 -mlong-double-128.
16
17 * config.gcc (alpha*-*-linux*): Add alpha/t-linux to tmake_file.
18 * config/alpha/t-linux: New file.
19 * config/alpha/libgcc-alpha-ldbl.ver: New file.
20
212006-02-04 Jakub Jelinek <jakub@redhat.com>
22
23 * config/sparc/linux.h (TARGET_OS_CPP_BUILTINS): Define
24 __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128.
25 (CPP_SUBTARGET_SPEC): Don't add -D__LONG_DOUBLE_128__ here.
26 * config/sparc/linux64.h (TARGET_OS_CPP_BUILTINS): Define
27 __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128 and TARGET_ARCH32.
28 (CPP_ARCH32_SPEC): Remove.
29
302006-02-03 Aldy Hernandez <aldyh@redhat.com>
31
32 * config/s390/s390.c (override_options): Handle
33 TARGET_DEFAULT_LONG_DOUBLE_128.
34
35 * config/alpha/alpha.c (override_options): Handle
36 TARGET_DEFAULT_LONG_DOUBLE_128.
37
38 * config/sparc/sparc.c (sparc_override_options): Handle
39 TARGET_DEFAULT_LONG_DOUBLE_128.
40
412006-02-04 Jakub Jelinek <jakub@redhat.com>
42
43 * config/rs6000/linux.h [TARGET_DEFAULT_LONG_DOUBLE_128]
44 (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128.
45 * config/rs6000/linux64.h [TARGET_DEFAULT_LONG_DOUBLE_128]
46 (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128.
47
48 * configure.ac: Add --with{out}-long-double-128 configure option.
49 (TARGET_DEFAULT_LONG_DOUBLE_128): New test.
50 * configure: Rebuilt.
51 * config.in: Rebuilt.
52
53--- gcc/config/rs6000/linux.h.jj 2006-02-04 11:46:38.000000000 +0100
54+++ gcc/config/rs6000/linux.h 2006-02-04 11:47:18.000000000 +0100
55@@ -120,3 +120,8 @@
56 #endif
57
58 #define POWERPC_LINUX
59+
60+/* ppc linux has 128-bit long double support in glibc 2.4 and later. */
61+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
62+#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
63+#endif
64--- gcc/config/rs6000/linux64.h.jj 2006-02-04 11:46:38.000000000 +0100
65+++ gcc/config/rs6000/linux64.h 2006-02-04 11:47:37.000000000 +0100
66@@ -570,3 +570,8 @@ while (0)
67 #endif
68
69 #define POWERPC_LINUX
70+
71+/* ppc{32,64} linux has 128-bit long double support in glibc 2.4 and later. */
72+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
73+#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
74+#endif
75--- gcc/configure.ac.jj 2006-02-04 10:42:42.000000000 +0100
76+++ gcc/configure.ac 2006-02-04 10:44:51.000000000 +0100
77@@ -3135,6 +3135,39 @@ if test x$gcc_cv_libc_provides_ssp = xye
78 [Define if your target C library provides stack protector support])
79 fi
80
81+# Check if TFmode long double should be used by default or not.
82+# Some glibc targets used DFmode long double, but with glibc 2.4
83+# and later they can use TFmode.
84+case "$target" in
85+ powerpc*-*-*gnu* | \
86+ sparc*-*-linux* | \
87+ s390*-*-linux* | \
88+ alpha*-*-linux*)
89+ AC_ARG_WITH(long-double-128,
90+[ --with-long-double-128 Use 128-bit long double by default.],
91+ gcc_cv_target_ldbl128="$with_long_double_128",
92+ [gcc_cv_target_ldbl128=no
93+ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
94+ if test "x$with_sysroot" = x; then
95+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
96+ elif test "x$with_sysroot" = xyes; then
97+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
98+ else
99+ glibc_header_dir="${with_sysroot}/usr/include"
100+ fi
101+ else
102+ glibc_header_dir=/usr/include
103+ fi
104+ grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
105+ $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
106+ && gcc_cv_target_ldbl128=yes])
107+ ;;
108+esac
109+if test x$gcc_cv_target_ldbl128 = xyes; then
110+ AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
111+ [Define if TFmode long double should be the default])
112+fi
113+
114 # Find out what GC implementation we want, or may, use.
115 AC_ARG_WITH(gc,
116 [ --with-gc={page,zone} choose the garbage collection mechanism to use
117--- gcc/configure.jj 2006-02-04 10:42:41.000000000 +0100
118+++ gcc/configure 2006-02-04 10:46:54.000000000 +0100
119@@ -931,6 +931,7 @@ Optional Packages:
120 --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
121 --without-libiconv-prefix don't search for libiconv in includedir and libdir
122 --with-system-libunwind use installed libunwind
123+ --with-long-double-128 Use 128-bit long double by default.
124 --with-gc={page,zone} choose the garbage collection mechanism to use
125 with the compiler
126 --with-system-zlib use installed libz
127@@ -7492,7 +7493,7 @@ if test "${gcc_cv_prog_makeinfo_modern+s
128 else
129 ac_prog_version=`$MAKEINFO --version 2>&1 |
130 sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
131- echo "configure:7495: version of makeinfo is $ac_prog_version" >&5
132+ echo "configure:7496: version of makeinfo is $ac_prog_version" >&5
133 case $ac_prog_version in
134 '') gcc_cv_prog_makeinfo_modern=no;;
135 4.[2-9]*)
136@@ -16227,6 +16228,46 @@ _ACEOF
137
138 fi
139
140+# Check if TFmode long double should be used by default or not.
141+# Some glibc targets used DFmode long double, but with glibc 2.4
142+# and later they can use TFmode.
143+case "$target" in
144+ powerpc*-*-*gnu* | \
145+ sparc*-*-linux* | \
146+ s390*-*-linux* | \
147+ alpha*-*-linux*)
148+
149+# Check whether --with-long-double-128 or --without-long-double-128 was given.
150+if test "${with_long_double_128+set}" = set; then
151+ withval="$with_long_double_128"
152+ gcc_cv_target_ldbl128="$with_long_double_128"
153+else
154+ gcc_cv_target_ldbl128=no
155+ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
156+ if test "x$with_sysroot" = x; then
157+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
158+ elif test "x$with_sysroot" = xyes; then
159+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
160+ else
161+ glibc_header_dir="${with_sysroot}/usr/include"
162+ fi
163+ else
164+ glibc_header_dir=/usr/include
165+ fi
166+ grep '^ *#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
167+ $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
168+ && gcc_cv_target_ldbl128=yes
169+fi;
170+ ;;
171+esac
172+if test x$gcc_cv_target_ldbl128 = xyes; then
173+
174+cat >>confdefs.h <<\_ACEOF
175+#define TARGET_DEFAULT_LONG_DOUBLE_128 1
176+_ACEOF
177+
178+fi
179+
180 # Find out what GC implementation we want, or may, use.
181
182 # Check whether --with-gc or --without-gc was given.
183--- gcc/config.in.jj 2006-02-04 10:42:42.000000000 +0100
184+++ gcc/config.in 2006-02-04 10:44:51.000000000 +0100
185@@ -1283,6 +1283,12 @@
186 #endif
187
188
189+/* Define if TFmode long double should be the default */
190+#ifndef USED_FOR_TARGET
191+#undef TARGET_DEFAULT_LONG_DOUBLE_128
192+#endif
193+
194+
195 /* Define if your target C library provides stack protector support */
196 #ifndef USED_FOR_TARGET
197 #undef TARGET_LIBC_PROVIDES_SSP
198--- gcc/config/alpha/alpha.c.jj 2006-02-04 10:42:41.000000000 +0100
199+++ gcc/config/alpha/alpha.c 2006-02-04 12:36:09.000000000 +0100
200@@ -501,6 +516,11 @@ override_options (void)
201 REAL_MODE_FORMAT (DFmode) = &vax_g_format;
202 REAL_MODE_FORMAT (TFmode) = NULL;
203 }
204+
205+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
206+ if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
207+ target_flags |= MASK_LONG_DOUBLE_128;
208+#endif
209 }
210 \f
211 /* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */
212--- gcc/config/s390/s390.c.jj 2006-02-04 10:42:41.000000000 +0100
213+++ gcc/config/s390/s390.c 2006-02-04 12:36:09.000000000 +0100
214@@ -1415,6 +1415,11 @@ override_options (void)
215 }
216 else if (s390_stack_guard)
217 error ("-mstack-guard implies use of -mstack-size");
218+
219+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
220+ if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
221+ target_flags |= MASK_LONG_DOUBLE_128;
222+#endif
223 }
224
225 /* Map for smallest class containing reg regno. */
226--- gcc/config/sparc/linux.h.jj 2006-02-04 10:42:41.000000000 +0100
227+++ gcc/config/sparc/linux.h 2006-02-04 12:39:31.000000000 +0100
228@@ -23,17 +23,19 @@ Boston, MA 02110-1301, USA. */
229 #define TARGET_OS_CPP_BUILTINS() \
230 do \
231 { \
232- builtin_define_std ("unix"); \
233- builtin_define_std ("linux"); \
234- builtin_define ("__gnu_linux__"); \
235- builtin_assert ("system=linux"); \
236- builtin_assert ("system=unix"); \
237- builtin_assert ("system=posix"); \
238- if (flag_pic) \
239- { \
240- builtin_define ("__PIC__"); \
241- builtin_define ("__pic__"); \
242- } \
243+ builtin_define_std ("unix"); \
244+ builtin_define_std ("linux"); \
245+ builtin_define ("__gnu_linux__"); \
246+ builtin_assert ("system=linux"); \
247+ builtin_assert ("system=unix"); \
248+ builtin_assert ("system=posix"); \
249+ if (flag_pic) \
250+ { \
251+ builtin_define ("__PIC__"); \
252+ builtin_define ("__pic__"); \
253+ } \
254+ if (TARGET_LONG_DOUBLE_128) \
255+ builtin_define ("__LONG_DOUBLE_128__"); \
256 } \
257 while (0)
258
259@@ -100,8 +102,7 @@ Boston, MA 02110-1301, USA. */
260
261 #undef CPP_SUBTARGET_SPEC
262 #define CPP_SUBTARGET_SPEC \
263-"%{posix:-D_POSIX_SOURCE} \
264-%{pthread:-D_REENTRANT} %{mlong-double-128:-D__LONG_DOUBLE_128__}"
265+"%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
266
267 #undef LIB_SPEC
268 #define LIB_SPEC \
269--- gcc/config/sparc/sparc.c.jj 2006-02-04 10:42:41.000000000 +0100
270+++ gcc/config/sparc/sparc.c 2006-02-04 12:36:09.000000000 +0100
271@@ -782,6 +790,11 @@ sparc_override_options (void)
272 sparc_costs = &ultrasparc3_costs;
273 break;
274 };
275+
276+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
277+ if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
278+ target_flags |= MASK_LONG_DOUBLE_128;
279+#endif
280 }
281 \f
282 #ifdef SUBTARGET_ATTRIBUTE_TABLE
283--- gcc/config/sparc/linux64.h.jj 2006-02-04 10:42:41.000000000 +0100
284+++ gcc/config/sparc/linux64.h 2006-02-04 12:39:31.000000000 +0100
285@@ -20,22 +20,24 @@ along with GCC; see the file COPYING. I
286 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
287 Boston, MA 02110-1301, USA. */
288
289-#define TARGET_OS_CPP_BUILTINS() \
290- do \
291- { \
292- builtin_define_std ("unix"); \
293- builtin_define_std ("linux"); \
294- builtin_define ("_LONGLONG"); \
295- builtin_define ("__gnu_linux__"); \
296- builtin_assert ("system=linux"); \
297- builtin_assert ("system=unix"); \
298- builtin_assert ("system=posix"); \
299- if (flag_pic) \
300- { \
301- builtin_define ("__PIC__"); \
302- builtin_define ("__pic__"); \
303- } \
304- } \
305+#define TARGET_OS_CPP_BUILTINS() \
306+ do \
307+ { \
308+ builtin_define_std ("unix"); \
309+ builtin_define_std ("linux"); \
310+ builtin_define ("_LONGLONG"); \
311+ builtin_define ("__gnu_linux__"); \
312+ builtin_assert ("system=linux"); \
313+ builtin_assert ("system=unix"); \
314+ builtin_assert ("system=posix"); \
315+ if (flag_pic) \
316+ { \
317+ builtin_define ("__PIC__"); \
318+ builtin_define ("__pic__"); \
319+ } \
320+ if (TARGET_ARCH32 && TARGET_LONG_DOUBLE_128) \
321+ builtin_define ("__LONG_DOUBLE_128__"); \
322+ } \
323 while (0)
324
325 /* Don't assume anything about the header files. */
326@@ -59,13 +61,6 @@ Boston, MA 02110-1301, USA. */
327 #undef ASM_CPU_DEFAULT_SPEC
328 #define ASM_CPU_DEFAULT_SPEC "-Av9a"
329
330-#ifdef SPARC_BI_ARCH
331-
332-#undef CPP_ARCH32_SPEC
333-#define CPP_ARCH32_SPEC "%{mlong-double-128:-D__LONG_DOUBLE_128__}"
334-
335-#endif
336-
337 /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
338 the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
339 provides part of the support for getting C++ file-scope static
340--- gcc/config.gcc.jj 2006-02-04 09:38:33.000000000 +0100
341+++ gcc/config.gcc 2006-02-05 22:00:25.000000000 +0100
342@@ -568,7 +568,7 @@ alpha*-*-unicosmk*)
343 alpha*-*-linux*)
344 tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
345 target_cpu_default="MASK_GAS"
346- tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
347+ tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee alpha/t-linux"
348 ;;
349 alpha*-*-gnu*)
350 target_cpu_default="MASK_GAS"
351@@ -2059,7 +2059,7 @@ sparc-*-elf*)
352 sparc-*-linux*) # SPARC's running GNU/Linux, libc6
353 tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
354 extra_options="${extra_options} sparc/long-double-switch.opt"
355- tmake_file="${tmake_file} sparc/t-crtfm"
356+ tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm"
357 ;;
358 sparc-*-rtems*)
359 tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h"
360@@ -2178,7 +2178,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
361 sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
362 tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h"
363 extra_options="${extra_options} sparc/long-double-switch.opt"
364- tmake_file="${tmake_file} sparc/t-linux64 sparc/t-crtfm"
365+ tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm"
366 ;;
367 sparc64-*-netbsd*)
368 tm_file="sparc/biarch64.h ${tm_file}"
369--- gcc/config/alpha/libgcc-alpha-ldbl.ver.jj 2006-02-05 21:57:55.000000000 +0100
370+++ gcc/config/alpha/libgcc-alpha-ldbl.ver 2006-02-05 21:58:59.000000000 +0100
371@@ -0,0 +1,32 @@
372+%ifdef __LONG_DOUBLE_128__
373+
374+# long double 128 bit support in libgcc_s.so.1 is only available
375+# when configured with --with-long-double-128. Make sure all the
376+# symbols are available at @@GCC_LDBL_* versions to make it clear
377+# there is a configurable symbol set.
378+
379+%exclude {
380+ __fixtfdi
381+ __fixunstfdi
382+ __floatditf
383+
384+ __divtc3
385+ __multc3
386+ __powitf2
387+}
388+
389+%inherit GCC_LDBL_3.0 GCC_3.0
390+GCC_LDBL_3.0 {
391+ __fixtfdi
392+ __fixunstfdi
393+ __floatditf
394+}
395+
396+%inherit GCC_LDBL_4.0.0 GCC_4.0.0
397+GCC_LDBL_4.0.0 {
398+ __divtc3
399+ __multc3
400+ __powitf2
401+}
402+
403+%endif
404--- gcc/config/alpha/t-linux.jj 2006-02-05 21:57:01.000000000 +0100
405+++ gcc/config/alpha/t-linux 2006-02-05 21:59:40.000000000 +0100
406@@ -0,0 +1 @@
407+SHLIB_MAPFILES += $(srcdir)/config/alpha/libgcc-alpha-ldbl.ver
408--- gcc/config/sparc/t-linux64.jj 2006-01-28 00:43:01.000000000 +0100
409+++ gcc/config/sparc/t-linux64 2006-02-05 20:40:45.000000000 +0100
410@@ -8,12 +8,6 @@ INSTALL_LIBGCC = install-multilib
411 EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
412 crtfastmath.o
413
414-# Override t-slibgcc-elf-ver to export some libgcc symbols with
415-# the symbol versions that glibc used.
416-# Avoid the t-linux version file.
417-SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
418- $(srcdir)/config/sparc/libgcc-sparc-glibc.ver
419-
420 CRTSTUFF_T_CFLAGS = `if test x$$($(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) \
421 -print-multi-os-directory) \
422 = x../lib64; then echo -mcmodel=medany; fi`
423--- gcc/config/sparc/libgcc-sparc-glibc.ver.jj 2006-01-28 00:43:01.000000000 +0100
424+++ gcc/config/sparc/libgcc-sparc-glibc.ver 2006-02-05 21:03:43.000000000 +0100
425@@ -26,3 +26,36 @@ GLIBC_VER {
426 __frame_state_for
427 __register_frame_info_table
428 }
429+
430+%if !defined (__arch64__) && defined (__LONG_DOUBLE_128__)
431+
432+# long double 128 bit support from 32-bit libgcc_s.so.1 is only available
433+# when configured with --with-long-double-128. Make sure all the
434+# symbols are available at @@GCC_LDBL_* versions to make it clear
435+# there is a configurable symbol set.
436+
437+%exclude {
438+ __fixtfdi
439+ __fixunstfdi
440+ __floatditf
441+
442+ __divtc3
443+ __multc3
444+ __powitf2
445+}
446+
447+%inherit GCC_LDBL_3.0 GCC_3.0
448+GCC_LDBL_3.0 {
449+ __fixtfdi
450+ __fixunstfdi
451+ __floatditf
452+}
453+
454+%inherit GCC_LDBL_4.0.0 GCC_4.0.0
455+GCC_LDBL_4.0.0 {
456+ __divtc3
457+ __multc3
458+ __powitf2
459+}
460+
461+%endif
462--- gcc/config/sparc/t-linux.jj 2006-02-05 20:40:20.000000000 +0100
463+++ gcc/config/sparc/t-linux 2006-02-05 20:40:55.000000000 +0100
464@@ -0,0 +1,5 @@
465+# Override t-slibgcc-elf-ver to export some libgcc symbols with
466+# the symbol versions that glibc used.
467+# Avoid the t-linux version file.
468+SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
469+ $(srcdir)/config/sparc/libgcc-sparc-glibc.ver
470--- gcc/doc/install.texi.jj 2006-02-02 16:39:46.000000000 +0100
471+++ gcc/doc/install.texi 2006-02-10 15:33:53.000000000 +0100
472@@ -1224,6 +1224,14 @@ error message.
473 All support for systems which have been obsoleted in one release of GCC
474 is removed entirely in the next major release, unless someone steps
475 forward to maintain the port.
476+
477+@item --with-long-double-128
478+Specify if @code{long double} type should be 128-bit by default on selected
479+GNU/Linux architectures. If using @code{--without-long-double-128},
480+@code{long double} will be by default 64-bit, the same as @code{double} type.
481+When neither of these configure options are used, the default will be
482+128-bit @code{long double} when built against GNU C Library 2.4 and later,
483+64-bit @code{long double} otherwise.
484 @end table
485
486 @subheading Cross-Compiler-Specific Options
This page took 0.197349 seconds and 4 git commands to generate.