This is the mail archive of the gcc-patches@gcc.gnu.org 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: libbid: Support TLS


libbid isn't thread safe. I am checking in this patch to use __thread
if it is available.


H.J.
---
2007-07-05  H.J. Lu  <hongjiu.lu@intel.com>

	* bid_conf.h (BID_THREAD): Defined.
	(__bid_IDEC_glbround): Add BID_THREAD in declaration.
	(__bid_IDEC_glbflags): Likewise.

	* decimal_globals.c (__bid_IDEC_glbround): Add BID_THREAD in
	declaration.
	(__bid_IDEC_glbflags): Likewise.

--- libgcc/config/libbid/bid_conf.h.thread	2007-06-25 11:58:46.000000000 -0700
+++ libgcc/config/libbid/bid_conf.h	2007-06-25 12:02:15.000000000 -0700
@@ -40,6 +40,12 @@ Software Foundation, 51 Franklin Street,
 #define BID_BIG_ENDIAN LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
 #endif
 
+#ifndef BID_THREAD
+#ifdef USE_TLS
+#define BID_THREAD __thread
+#endif
+#endif
+
 #define _intptr_t_defined
 #define DECIMAL_CALL_BY_REFERENCE 0
 #define DECIMAL_GLOBAL_ROUNDING 1
@@ -50,6 +56,10 @@ Software Foundation, 51 Franklin Street,
 
 #define SET_STATUS_FLAGS
 
+#ifndef BID_THREAD
+#define BID_THREAD
+#endif
+
 // If DECIMAL_CALL_BY_REFERENCE is defined then numerical arguments and results
 // are passed by reference otherwise they are passed by value (except that
 // a pointer is always passed to the status flags)
@@ -140,11 +150,11 @@ typedef unsigned int _IDEC_flags; // cou
 #endif
 
 #if DECIMAL_GLOBAL_ROUNDING
-extern _IDEC_round __bid_IDEC_glbround;
+extern BID_THREAD _IDEC_round __bid_IDEC_glbround;
 #endif
 
 #if DECIMAL_GLOBAL_EXCEPTION_FLAGS
-extern _IDEC_flags __bid_IDEC_glbflags;
+extern BID_THREAD _IDEC_flags __bid_IDEC_glbflags;
 #endif
 
 #if DECIMAL_ALTERNATE_EXCEPTION_HANDLING
--- libgcc/config/libbid/decimal_globals.c.thread	2007-06-13 22:30:36.000000000 -0700
+++ libgcc/config/libbid/decimal_globals.c	2007-06-25 12:01:20.000000000 -0700
@@ -30,7 +30,7 @@ Software Foundation, 51 Franklin Street,
 #include "bid_functions.h"
 
 #if DECIMAL_GLOBAL_ROUNDING
-  _IDEC_round __bid_IDEC_glbround = ROUNDING_TO_NEAREST;
+BID_THREAD _IDEC_round __bid_IDEC_glbround = ROUNDING_TO_NEAREST;
 
 void
 __dfp_set_round (int mode)
@@ -46,7 +46,7 @@ __dfp_get_round (void)
 #endif
 
 #if DECIMAL_GLOBAL_EXCEPTION_FLAGS
-  _IDEC_flags __bid_IDEC_glbflags = EXACT_STATUS;
+BID_THREAD _IDEC_flags __bid_IDEC_glbflags = EXACT_STATUS;
 
 #include <fenv.h>
 


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