Skip to content

Commit

Permalink
[release/7.0] [ppc64le] Implementation of mono_arch_get_delegate_virt…
Browse files Browse the repository at this point in the history
…ual_invoke_impl method for ppc64le architecture (#77788)

* Fixed FSharp crash issue

* [ppc64le] Implementation of mono_arch_get_delegate_virtual_invoke_impl method for ppc64le architecture

Co-authored-by: Alhad Deshpande <[email protected]>
  • Loading branch information
github-actions[bot] and alhad-deshpande authored Nov 10, 2022
1 parent 9d890f4 commit b1e678f
Showing 1 changed file with 45 additions and 1 deletion.
46 changes: 45 additions & 1 deletion src/mono/mono/mini/mini-ppc.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,10 +470,54 @@ mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_targe
return start;
}

/**
*
* @brief Architecture-specific delegation virtual trampoline processing
*
* @param[in] @sig - Method signature
* @param[in] @method - Method
* @param[in] @offset - Offset into vtable
* @param[in] @load_imt_reg - Whether to load the LMT register
* @returns Trampoline
*
* Return a pointer to a delegation virtual trampoline
*/

gpointer
mono_arch_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *method, int offset, gboolean load_imt_reg)
{
return NULL;
guint8 *code, *start;
int size = 32;

start = code = (guint8 *) mono_global_codeman_reserve (size);

/*
* Replace the "this" argument with the target
*/
ppc_mr (code, ppc_r12, ppc_r3);
ppc_ldptr (code, ppc_r3, MONO_STRUCT_OFFSET(MonoDelegate, target), ppc_r12);

/*
* Load the IMT register, if needed
*/
if (load_imt_reg) {
ppc_ldptr (code, MONO_ARCH_IMT_REG, MONO_STRUCT_OFFSET(MonoDelegate, method), ppc_r12);
}

/*
* Load the vTable
*/
ppc_ldptr (code, ppc_r12, MONO_STRUCT_OFFSET(MonoObject, vtable), ppc_r3);
if (!ppc_is_imm16(offset))
ppc_addis (code, ppc_r12, ppc_r12, ppc_ha(offset));
ppc_ldptr (code, ppc_r12, offset, ppc_r12);
ppc_mtctr (code, ppc_r12);
ppc_bcctr (code, PPC_BR_ALWAYS, 0);

mono_arch_flush_icache (start, code - start);
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL));

return(start);
}

gpointer
Expand Down

0 comments on commit b1e678f

Please sign in to comment.