X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Ftramp-amd64-gsharedvt.c;h=17a6849ed2564315e2f81d0b93601fcac42e779f;hb=9a46a6d946d3d69437dcad86932ba2f52e279e1c;hp=eb1d59340f03843479ae60fe992854a6c7a2be11;hpb=6ac36d6c40a2dd0ab2800c23d08894856b193c2f;p=mono.git diff --git a/mono/mini/tramp-amd64-gsharedvt.c b/mono/mini/tramp-amd64-gsharedvt.c index eb1d59340f0..17a6849ed25 100644 --- a/mono/mini/tramp-amd64-gsharedvt.c +++ b/mono/mini/tramp-amd64-gsharedvt.c @@ -90,6 +90,28 @@ mono_amd64_start_gsharedvt_call (GSharedVtCallInfo *info, gpointer *caller, gpoi DEBUG_AMD64_GSHAREDVT_PRINT ("[%d] <- [%d] (%d words) (%p) <- (%p)\n", dest_reg, source_reg, slot_count, &callee [dest_reg], &caller [source_reg]); break; } + case GSHAREDVT_ARG_BYREF_TO_BYVAL_U1: { + guint8 *addr = caller [source_reg]; + + callee [dest_reg] = (gpointer)(mgreg_t)*addr; + DEBUG_AMD64_GSHAREDVT_PRINT ("[%d] <- (u1) [%d] (%p) <- (%p)\n", dest_reg, source_reg, &callee [dest_reg], &caller [source_reg]); + break; + } + case GSHAREDVT_ARG_BYREF_TO_BYVAL_U2: { + guint16 *addr = caller [source_reg]; + + callee [dest_reg] = (gpointer)(mgreg_t)*addr; + DEBUG_AMD64_GSHAREDVT_PRINT ("[%d] <- (u2) [%d] (%p) <- (%p)\n", dest_reg, source_reg, &callee [dest_reg], &caller [source_reg]); + break; + } + case GSHAREDVT_ARG_BYREF_TO_BYVAL_U4: { + guint32 *addr = caller [source_reg]; + + callee [dest_reg] = (gpointer)(mgreg_t)*addr; + DEBUG_AMD64_GSHAREDVT_PRINT ("[%d] <- (u4) [%d] (%p) <- (%p)\n", dest_reg, source_reg, &callee [dest_reg], &caller [source_reg]); + break; + } + default: g_error ("cant handle arg marshal %d\n", arg_marshal); } @@ -140,7 +162,7 @@ mono_arch_get_gsharedvt_arg_trampoline (MonoDomain *domain, gpointer arg, gpoint g_assert ((code - start) < buf_len); mono_arch_flush_icache (start, code - start); - mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL); + MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL)); mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), domain);