Merge pull request #1088 from BrzVlad/pushless
authorRodrigo Kumpera <kumpera@gmail.com>
Sat, 7 Jun 2014 23:10:50 +0000 (19:10 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Sat, 7 Jun 2014 23:10:50 +0000 (19:10 -0400)
[x86] Arguments to calls are passed via moves, instead of pushes.

1  2 
mono/mini/mini-gc.c

diff --combined mono/mini/mini-gc.c
index 4934f49beaaeee4a9ec4de258360c9ed28f8c340,41ca382a0bce51e8d0fe140f32ea6ea2fe8ec1c6..1566cb0d8741a3473f18e0329270b1c4bb7c6bd4
@@@ -598,15 -598,13 +598,15 @@@ thread_suspend_func (gpointer user_data
  
        if (tls->tid != GetCurrentThreadId ()) {
                /* Happens on osx because threads are not suspended using signals */
 +#ifndef TARGET_WIN32
                gboolean res;
 +#endif
  
                g_assert (tls->info);
  #ifdef TARGET_WIN32
                return;
  #else
 -              res = mono_thread_state_init_from_handle (&tls->unwind_state, (MonoNativeThreadId)tls->tid, tls->info->native_handle);
 +              res = mono_thread_state_init_from_handle (&tls->unwind_state, tls->info);
  #endif
        } else {
                tls->unwind_state.unwind_data [MONO_UNWIND_DATA_LMF] = mono_get_lmf ();
@@@ -1871,7 -1869,11 +1871,11 @@@ sp_offset_to_fp_offset (MonoCompile *cf
  #elif defined(TARGET_X86)
        /* The offset is computed from the sp at the start of the call sequence */
        g_assert (cfg->frame_reg == X86_EBP);
+ #ifdef MONO_X86_NO_PUSHES
+       return (- cfg->arch.sp_fp_offset + sp_offset);
+ #else
        return (- cfg->arch.sp_fp_offset - sp_offset);  
+ #endif
  #else
        NOT_IMPLEMENTED;
        return -1;
@@@ -2058,7 -2060,11 +2062,11 @@@ compute_frame_size (MonoCompile *cfg
  #ifdef TARGET_AMD64
        min_offset = MIN (min_offset, -cfg->arch.sp_fp_offset);
  #elif defined(TARGET_X86)
+ #ifdef MONO_X86_NO_PUSHES
+       min_offset = MIN (min_offset, -cfg->arch.sp_fp_offset);
+ #else
        min_offset = MIN (min_offset, - (cfg->arch.sp_fp_offset + cfg->arch.param_area_size));
+ #endif
  #elif defined(TARGET_ARM)
        // FIXME:
  #elif defined(TARGET_s390X)