This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: libbid: Support TLS
- From: "H.J. Lu" <hjl at lucon dot org>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 5 Jul 2007 06:14:54 -0700
- Subject: 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>