# define XBT_ALWAYS_INLINE XBT_INLINE
#endif
+#if defined(__GNUC__)
+# define XBT_THREAD_LOCAL __thread
+#elif defined(_MSC_VER)
+# define XBT_THREAD_LOCAL __declspec(thread)
+#else
+# define XBT_THREAD_LOCAL No thread local on this architecture
+#endif
+
/* improvable on gcc (by evaluating arguments only once), but wouldn't be portable */
#ifdef MIN
# undef MIN
#ifdef _WIN32
#include <windows.h>
+#include <malloc.h>
#else
#include <sys/mman.h>
#endif
#define _aligned_free __mingw_aligned_free
#endif //MINGW
-#if defined(_XBT_WIN32)
-#include <malloc.h>
-#endif
-
#ifdef HAVE_VALGRIND_VALGRIND_H
# include <valgrind/valgrind.h>
#endif
int smx_context_guard_size;
int smx_context_guard_size_was_set = 0;
#ifdef HAVE_THREAD_LOCAL_STORAGE
-static __thread smx_context_t smx_current_context_parallel;
+static XBT_THREAD_LOCAL smx_context_t smx_current_context_parallel;
#else
static xbt_os_thread_key_t smx_current_context_key = 0;
#endif