2005-06-24 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / utils / mono-compiler.h
1 #ifndef __UTILS_MONO_COMPILER_H__
2 #define __UTILS_MONO_COMPILER_H__
3 /*
4  * This file includes macros used in the runtime to encapsulate different
5  * compiler behaviours.
6  */
7 #include <config.h>
8
9 #ifdef HAVE_KW_THREAD
10 #if HAVE_TLS_MODEL_ATTR
11
12 #if defined(PIC) && defined(__x86_64__)
13 #define MONO_TLS_FAST 
14 #elif defined (__powerpc__)
15 #define MONO_TLS_FAST
16 #else
17 #define MONO_TLS_FAST __attribute__((tls_model("local-exec")))
18 #endif
19
20 #else
21 #define MONO_TLS_FAST 
22 #endif
23
24 #if defined(__GNUC__) && defined(__i386__)
25 #define MONO_THREAD_VAR_OFFSET(var,offset) __asm ("jmp 1f; .section writetext, \"awx\"; 1: movl $" #var "@ntpoff, %0; jmp 2f; .previous; 2:" : "=r" (offset));
26 #else
27 #define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
28 #endif
29
30 #else /* no HAVE_KW_THREAD */
31
32 #define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
33
34 #endif
35
36 /* Deal with Microsoft C compiler differences */
37 #ifdef _MSC_VER\r
38 \r
39 #include <float.h>\r
40 #define isnan(x)        _isnan(x)\r
41 #define trunc(x)        ((int)(x))\r
42 #define isinf(x)        (_isnan(x) ? 0 : (_fpclass(x) == _FPCLASS_NINF) ? -1 : (_fpclass(x) == _FPCLASS_PINF) ? 1 : 0)\r
43 \r
44 #define popen           _popen\r
45 #define pclose          _pclose\r
46 \r
47 #include <direct.h>\r
48 #define mkdir(x)        _mkdir(x)\r
49 \r
50 /* GCC specific functions aren't available */\r
51 #define __builtin_return_address(x)     NULL\r
52 \r
53 #endif /* _MSC_VER */\r
54
55
56 #endif /* __UTILS_MONO_COMPILER_H__*/
57