Leverage new Windows API TlsGetValue2 for performance
This commit is contained in:
parent
e29ac61987
commit
9e123a833c
|
@ -24,7 +24,7 @@
|
|||
# ifdef __arm__
|
||||
# define LG_QUANTUM 3
|
||||
# endif
|
||||
# ifdef __aarch64__
|
||||
# if defined(__aarch64__) || defined(_M_ARM64)
|
||||
# define LG_QUANTUM 4
|
||||
# endif
|
||||
# ifdef __hppa__
|
||||
|
|
|
@ -15,6 +15,16 @@ typedef struct {
|
|||
extern DWORD tsd_tsd;
|
||||
extern tsd_wrapper_t tsd_boot_wrapper;
|
||||
extern bool tsd_booted;
|
||||
#if defined(_M_ARM64EC)
|
||||
#define JEMALLOC_WIN32_TLSGETVALUE2 0
|
||||
#else
|
||||
#define JEMALLOC_WIN32_TLSGETVALUE2 1
|
||||
#endif
|
||||
#if JEMALLOC_WIN32_TLSGETVALUE2
|
||||
typedef LPVOID (WINAPI *TGV2)(DWORD dwTlsIndex);
|
||||
extern TGV2 tls_get_value2;
|
||||
extern HMODULE tgv2_mod;
|
||||
#endif
|
||||
|
||||
/* Initialization/cleanup. */
|
||||
JEMALLOC_ALWAYS_INLINE bool
|
||||
|
@ -49,9 +59,17 @@ tsd_wrapper_set(tsd_wrapper_t *wrapper) {
|
|||
|
||||
JEMALLOC_ALWAYS_INLINE tsd_wrapper_t *
|
||||
tsd_wrapper_get(bool init) {
|
||||
DWORD error = GetLastError();
|
||||
tsd_wrapper_t *wrapper = (tsd_wrapper_t *) TlsGetValue(tsd_tsd);
|
||||
SetLastError(error);
|
||||
tsd_wrapper_t *wrapper;
|
||||
#if JEMALLOC_WIN32_TLSGETVALUE2
|
||||
if (tls_get_value2 != NULL) {
|
||||
wrapper = (tsd_wrapper_t *) tls_get_value2(tsd_tsd);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
DWORD error = GetLastError();
|
||||
wrapper = (tsd_wrapper_t *) TlsGetValue(tsd_tsd);
|
||||
SetLastError(error);
|
||||
}
|
||||
|
||||
if (init && unlikely(wrapper == NULL)) {
|
||||
wrapper = (tsd_wrapper_t *)
|
||||
|
@ -78,6 +96,12 @@ tsd_boot0(void) {
|
|||
}
|
||||
_malloc_tsd_cleanup_register(&tsd_cleanup_wrapper);
|
||||
tsd_wrapper_set(&tsd_boot_wrapper);
|
||||
#if JEMALLOC_WIN32_TLSGETVALUE2
|
||||
tgv2_mod = LoadLibraryA("api-ms-win-core-processthreads-l1-1-8.dll");
|
||||
if (tgv2_mod != NULL) {
|
||||
tls_get_value2 = (TGV2)GetProcAddress(tgv2_mod, "TlsGetValue2");
|
||||
}
|
||||
#endif
|
||||
tsd_booted = true;
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue