Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision ecae5860965de56ce3fadb77f1a7686686e37c67)
+++ src/libcfa/concurrency/invoke.h	(revision d56cc2199f40aba8cc9635ca8e888afdd3d18ab8)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 30 22:33:59 2018
-// Update Count     : 30
+// Last Modified On : Sat May 19 08:23:21 2018
+// Update Count     : 31
 //
 
@@ -18,7 +18,4 @@
 #include "bits/locks.h"
 
-#define TL_GET( member ) kernelTLS.member
-#define TL_SET( member, value ) kernelTLS.member = value;
-
 #ifdef __cforall
 extern "C" {
@@ -28,4 +25,22 @@
 #ifndef _INVOKE_H_
 #define _INVOKE_H_
+
+#ifdef __ARM_ARCH
+	// function prototypes are only really used by these macros on ARM
+	void disable_global_interrupts();
+	void enable_global_interrupts();
+
+	#define TL_GET( member ) ( { __typeof__( kernelTLS.member ) target; \
+                disable_global_interrupts(); \
+                target = kernelTLS.member; \
+                enable_global_interrupts(); \
+                target; } )
+	#define TL_SET( member, value ) disable_global_interrupts(); \
+		kernelTLS.member = value; \
+		enable_global_interrupts();
+#else
+	#define TL_GET( member ) kernelTLS.member
+	#define TL_SET( member, value ) kernelTLS.member = value;
+#endif
 
 	#ifdef __cforall
