Allow runtime to be built with C++ on AIX (#17672)
[mono-project.git] / mono / utils / mono-tls-inline.h
blob28b5c4e67e15cccc88bb5e87a5dd73e5b61f6c48
1 /**
2 * \file
3 * Low-level TLS support
5 * Author:
6 * Rodrigo Kumpera (kumpera@gmail.com)
8 * Copyright 2011 Novell, Inc (http://www.novell.com)
9 * Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
10 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
13 #ifndef __MONO_TLS_INLINE_H__
14 #define __MONO_TLS_INLINE_H__
16 #include "mono-tls.h"
19 * Gets the tls offset associated with the key. This offset is set at key
20 * initialization (at runtime). Certain targets can implement computing
21 * this offset and using it at runtime for fast inlined tls access.
23 MONO_INLINE
24 gint32
25 mono_tls_get_tls_offset (MonoTlsKey key)
27 g_assert (mono_tls_offsets [key]);
28 return mono_tls_offsets [key];
31 // Casts on getters are for the !MONO_KEYWORD_THREAD case.
33 /* Getters for each tls key */
34 MONO_INLINE
35 MonoInternalThread *mono_tls_get_thread (void)
37 return (MonoInternalThread*)MONO_TLS_GET_VALUE (mono_tls_thread, mono_tls_key_thread);
40 #define mono_get_jit_tls mono_tls_get_jit_tls
42 MONO_INLINE
43 MonoJitTlsData *mono_tls_get_jit_tls (void)
45 return (MonoJitTlsData*)MONO_TLS_GET_VALUE (mono_tls_jit_tls, mono_tls_key_jit_tls);
48 MONO_INLINE
49 MonoDomain *mono_tls_get_domain (void)
51 return (MonoDomain*)MONO_TLS_GET_VALUE (mono_tls_domain, mono_tls_key_domain);
54 MONO_INLINE
55 SgenThreadInfo *mono_tls_get_sgen_thread_info (void)
57 return (SgenThreadInfo*)MONO_TLS_GET_VALUE (mono_tls_sgen_thread_info, mono_tls_key_sgen_thread_info);
60 #define mono_get_lmf_addr mono_tls_get_lmf_addr
62 MONO_INLINE
63 MonoLMF **mono_tls_get_lmf_addr (void)
65 return (MonoLMF**)MONO_TLS_GET_VALUE (mono_tls_lmf_addr, mono_tls_key_lmf_addr);
68 /* Setters for each tls key */
69 MONO_INLINE
70 void mono_tls_set_thread (MonoInternalThread *value)
72 MONO_TLS_SET_VALUE (mono_tls_thread, mono_tls_key_thread, value);
75 MONO_INLINE
76 void mono_tls_set_jit_tls (MonoJitTlsData *value)
78 MONO_TLS_SET_VALUE (mono_tls_jit_tls, mono_tls_key_jit_tls, value);
81 MONO_INLINE
82 void mono_tls_set_domain (MonoDomain *value)
84 MONO_TLS_SET_VALUE (mono_tls_domain, mono_tls_key_domain, value);
87 MONO_INLINE
88 void mono_tls_set_sgen_thread_info (SgenThreadInfo *value)
90 MONO_TLS_SET_VALUE (mono_tls_sgen_thread_info, mono_tls_key_sgen_thread_info, value);
93 MONO_INLINE
94 void mono_tls_set_lmf_addr (MonoLMF **value)
96 MONO_TLS_SET_VALUE (mono_tls_lmf_addr, mono_tls_key_lmf_addr, value);
99 #endif /* __MONO_TLS_INLINE_H__ */