This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch i386 libgcc]: Enable support for __float128 (TFmode) IEEE quad type for x86/x64 mingw targets


this patch enable the 128-bit floating pointer feature for the x86 and
x64 mingw targets. I added to the mingw32.h file the defines to enable
the TFmode for it. I am a bit curious about that for cygwin those
defines aren't necessary (at least the cygwin's patch was applied in
front and as told should work). Dave could you verify this?

I tested this patch for i686-pc-mingw32 and for x86_64-pc-mingw32
without having regressions.

ChangeLog for gcc

2009-06-21  Kai Tietz  <>

	* config.gcc: Add for x86 and x64 mingw targets t-fprules-soft
	and t-softfp support.
	* config/i386/mingw32.h (LIBGCC2_HAS_TF_MODE): Enable TFmode.
	(LIBGCC2_TF_CEXT): Define.
	(TF_SIZE): Define.

ChangeLog for libgcc

	* Add soft emulation for x86 and x64 mingw targets.
	* config/i386/64/_divtc3.c: Disable for mingw targets usage of
	.symver assembly symbol.
	* config/i386/64/_multc3.c: Likewise.
	* config/i386/64/_powitf2.c: Likewise.
	* config/i386/64/eqtf2.c: Likewise.
	* config/i386/64/getf2.c: Likewise.
	* config/i386/64/letf2.c: Likewise.
	* config/i386/64/letf2.c: Likewise.
	* config/i386/64/sfp-machine.h (_FP_W_TYPE): Define it
	for x64 mingw target as unsigned long long.
	(_FP_WS_TYPE): Define it for x64 mingw target as signed long
	(_FP_I_TYPE): Define it for x64 mingw target as long long.

Is this patch ok for apply on trunk?


|  (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination
Index: gcc/gcc/config.gcc
--- gcc.orig/gcc/config.gcc
+++ gcc/gcc/config.gcc
@@ -3136,7 +3136,7 @@ case ${target} in
 	i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
 		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux"
-	i[34567]86-*-cygwin*)
+	i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
 		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
Index: gcc/gcc/config/i386/mingw32.h
--- gcc.orig/gcc/config/i386/mingw32.h
+++ gcc/gcc/config/i386/mingw32.h
@@ -123,6 +123,14 @@ along with GCC; see the file COPYING3.  
+/* Put all *tf routines in libgcc.  */
+#define LIBGCC2_HAS_TF_MODE 1
+#define LIBGCC2_TF_CEXT q
+#undef TF_SIZE
+#define TF_SIZE 113
 /* Output STRING, a string representing a filename, to FILE.
    We canonicalize it to be in Unix format (backslashes are replaced
    forward slashes.  */
Index: gcc/libgcc/
--- gcc.orig/libgcc/
+++ gcc/libgcc/
@@ -571,7 +571,7 @@ case ${host} in
 i[34567]86-*-darwin* | x86_64-*-darwin* | \
   i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
   i[34567]86-*-linux* | x86_64-*-linux* | \
-  i[34567]86-*-cygwin*)
+  i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
 	if test "${host_address}" = 32; then
 		tmake_file="${tmake_file} t-softfp i386/${host_address}/t-fprules-softfp"
Index: gcc/libgcc/config/i386/64/_divtc3.c
--- gcc.orig/libgcc/config/i386/64/_divtc3.c
+++ gcc/libgcc/config/i386/64/_divtc3.c
@@ -9,6 +9,8 @@
 #undef __divtc3
 extern __typeof__ (__divtc3_shared) __divtc3_compat __attribute__((alias ("__divtc3_shared")));
+#ifndef _WIN32
 asm (".symver __divtc3_compat,__divtc3@GCC_4.0.0");
 asm (".symver __divtc3_shared,__divtc3@@GCC_4.3.0");
Index: gcc/libgcc/config/i386/64/_multc3.c
--- gcc.orig/libgcc/config/i386/64/_multc3.c
+++ gcc/libgcc/config/i386/64/_multc3.c
@@ -9,6 +9,8 @@
 #undef __multc3
 extern __typeof__ (__multc3_shared) __multc3_compat __attribute__((alias ("__multc3_shared")));
+#ifndef _WIN32
 asm (".symver __multc3_compat,__multc3@GCC_4.0.0");
 asm (".symver __multc3_shared,__multc3@@GCC_4.3.0");
Index: gcc/libgcc/config/i386/64/_powitf2.c
--- gcc.orig/libgcc/config/i386/64/_powitf2.c
+++ gcc/libgcc/config/i386/64/_powitf2.c
@@ -9,6 +9,8 @@
 #undef __powitf2
 extern __typeof__ (__powitf2_shared) __powitf2_compat __attribute__((alias ("__powitf2_shared")));
+#ifndef _WIN32
 asm (".symver __powitf2_compat,__powitf2@GCC_4.0.0");
 asm (".symver __powitf2_shared,__powitf2@@GCC_4.3.0");
Index: gcc/libgcc/config/i386/64/eqtf2.c
--- gcc.orig/libgcc/config/i386/64/eqtf2.c
+++ gcc/libgcc/config/i386/64/eqtf2.c
@@ -8,6 +8,8 @@
 #undef __netf2
 strong_alias (__netf2_shared, __netf2_compat);
+#ifndef _WIN32
 asm (".symver __netf2_compat,__netf2@GCC_3.0");
 asm (".symver __netf2_shared,__netf2@@GCC_4.3.0");
Index: gcc/libgcc/config/i386/64/getf2.c
--- gcc.orig/libgcc/config/i386/64/getf2.c
+++ gcc/libgcc/config/i386/64/getf2.c
@@ -8,6 +8,8 @@
 #undef __gttf2
 strong_alias (__gttf2_shared, __gttf2_compat);
+#ifndef _WIN32
 asm (".symver __gttf2_compat,__gttf2@GCC_3.0");
 asm (".symver __gttf2_shared,__gttf2@@GCC_4.3.0");
Index: gcc/libgcc/config/i386/64/letf2.c
--- gcc.orig/libgcc/config/i386/64/letf2.c
+++ gcc/libgcc/config/i386/64/letf2.c
@@ -8,6 +8,8 @@
 #undef __lttf2
 strong_alias (__lttf2_shared, __lttf2_compat);
+#ifndef _WIN32
 asm (".symver __lttf2_compat,__lttf2@GCC_3.0");
 asm (".symver __lttf2_shared,__lttf2@@GCC_4.3.0");
Index: gcc/libgcc/config/i386/64/sfp-machine.h
--- gcc.orig/libgcc/config/i386/64/sfp-machine.h
+++ gcc/libgcc/config/i386/64/sfp-machine.h
@@ -1,7 +1,14 @@
 #define _FP_W_TYPE_SIZE		64
-#define _FP_W_TYPE		unsigned long
-#define _FP_WS_TYPE		signed long
-#define _FP_I_TYPE		long
+#ifdef _WIN64
+ #define _FP_W_TYPE		unsigned long long
+ #define _FP_WS_TYPE		signed long long
+ #define _FP_I_TYPE		long long
+ #define _FP_W_TYPE		unsigned long
+ #define _FP_WS_TYPE		signed long
+ #define _FP_I_TYPE		long
 typedef int TItype __attribute__ ((mode (TI)));
 typedef unsigned int UTItype __attribute__ ((mode (TI)));

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]