From ab3dac04c2478a484b0e063b04fd0f19cc0f368d Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Wed, 30 Dec 2020 21:36:41 +0100 Subject: [PATCH] Use tpidrro_el0 for thread local storage in macOS-arm64 Fixes #343 --- include/mimalloc-internal.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h index e3e78e40..df700d39 100644 --- a/include/mimalloc-internal.h +++ b/include/mimalloc-internal.h @@ -707,7 +707,11 @@ static inline void* mi_tls_slot(size_t slot) mi_attr_noexcept { res = tcb[slot]; #elif defined(__aarch64__) void** tcb; UNUSED(ofs); +#if defined(__MACH__) + __asm__ volatile ("mrs %0, tpidrro_el0" : "=r" (tcb)); +#else __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); +#endif res = tcb[slot]; #endif return res; @@ -730,7 +734,11 @@ static inline void mi_tls_slot_set(size_t slot, void* value) mi_attr_noexcept { tcb[slot] = value; #elif defined(__aarch64__) void** tcb; UNUSED(ofs); +#if defined(__MACH__) + __asm__ volatile ("mrs %0, tpidrro_el0" : "=r" (tcb)); +#else __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); +#endif tcb[slot] = value; #endif }