2004-08-08 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Sun, 8 Aug 2004 08:48:54 +0000 (08:48 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sun, 8 Aug 2004 08:48:54 +0000 (08:48 -0000)
* mini-amd64.c (mono_arch_setup_jit_tls_data): Add tls offset detection
for gcc-3.4.

* Makefile.am: Statically link mono against libmono on AMD64.

svn path=/trunk/mono/; revision=32033

mono/mini/ChangeLog
mono/mini/Makefile.am
mono/mini/mini-amd64.c

index 1884cd07105678defe53dcb21001a8c978b97e1b..c631461210607811fb567f8a3b165c51236e91a3 100644 (file)
@@ -1,5 +1,10 @@
 2004-08-08  Zoltan Varga  <vargaz@freemail.hu>
 
+       * mini-amd64.c (mono_arch_setup_jit_tls_data): Add tls offset detection
+       for gcc-3.4.
+
+       * Makefile.am: Statically link mono against libmono on AMD64.
+       
        * mini-amd64.c inssel-amd64.brg: Optimizations.
 
 2004-08-07  Zoltan Varga  <vargaz@freemail.hu>
index cf83ca9d7a22190f5b0cce5e58a605e336c5b9e3..4508d437783af99ce9c7fca00f691d92d48aecfd 100644 (file)
@@ -46,8 +46,16 @@ endif
 mono_SOURCES = \
        main.c
 
+if AMD64
+# Link libmono into mono statically on platforms where it is possible
+# This leads to higher performance, especially with TLS
+MONO_LIB=.libs/libmono.a
+else
+MONO_LIB=libmono.la
+endif
+
 mono_LDADD = \
-       libmono.la              \
+       $(MONO_LIB)                     \
        $(GLIB_LIBS)            \
        $(GMODULE_LIBS) -lm     \
        $(ICU_LIBS)
index c565094658af8bb65505273a991406a433b5edfd..fe737e88382c345f642b3a7305ed5f3d29a9a150 100644 (file)
@@ -4407,8 +4407,7 @@ mono_arch_emit_prolog (MonoCompile *cfg)
                if (lmf_tls_offset != -1) {
                        /* Load lmf quicky using the FS register */
                        x86_prefix (code, X86_FS_PREFIX);
-                       amd64_mov_reg_mem (code, AMD64_RAX, 0, 8);
-                       amd64_mov_reg_membase (code, AMD64_RAX, AMD64_RAX, lmf_tls_offset, 8);
+                       amd64_mov_reg_mem (code, AMD64_RAX, lmf_tls_offset, 8);
                }
                else {
                        /* 
@@ -4917,7 +4916,6 @@ mono_arch_setup_jit_tls_data (MonoJitTlsData *tls)
                 * Determine the offset of mono_lfm_addr inside the TLS structures
                 * by disassembling the function above.
                 */
-
                /* This is generated by gcc 3.3.2 */
                if ((code [0] == 0x55) && (code [1] == 0x48) && (code [2] == 0x89) &&
                        (code [3] == 0xe5) && (code [4] == 0x64) && (code [5] == 0x48) &&
@@ -4925,7 +4923,13 @@ mono_arch_setup_jit_tls_data (MonoJitTlsData *tls)
                        (code [9] == 0x00) && (code [10] == 0x00) && (code [11] == 0x00) &&
                        (code [12] == 0x0) && (code [13] == 0x48) && (code [14] == 0x8b) &&
                        (code [15] == 0x80)) {
-                       lmf_tls_offset = *(int*)&(code [16]);
+                       lmf_tls_offset = *(gint32*)&(code [16]);
+               } else if 
+                       /* This is generated by gcc-3.4.1 */
+                       ((code [0] == 0x55) && (code [1] == 0x48) && (code [2] == 0x89) &&
+                        (code [3] == 0xe5) && (code [4] == 0x64) && (code [5] == 0x48) &&
+                        (code [6] == 0x8b) && (code [7] == 0x04) && (code [8] == 0x25)) {
+                       lmf_tls_offset = *(gint32*)&(code [9]);
                }
        }