/* Tail prefix / tail call optimization */
/* FIXME: Enabling TAILC breaks some inlining/stack trace/etc tests */
- if (ARCH_HAVE_OP_TAIL_CALL) {
- if (cmethod && (ins_flag & MONO_INST_TAILCALL) && !cfg->gsharedvt && is_supported_tail_call (cfg, method, cmethod, fsig, call_opcode))
- supported_tail_call = TRUE;
- } else {
- if (cmethod && (ins_flag & MONO_INST_TAILCALL) &&
+ /* FIXME: runtime generic context pointer for jumps? */
+ /* FIXME: handle this for generic sharing eventually */
+ if (cmethod && (ins_flag & MONO_INST_TAILCALL) &&
!vtable_arg && !cfg->generic_sharing_context && is_supported_tail_call (cfg, method, cmethod, fsig, call_opcode))
- supported_tail_call = TRUE;
- }
+ supported_tail_call = TRUE;
if (supported_tail_call) {
MonoCallInst *call;
vtable_slot = NULL;
generic_shared = TRUE;
- if (!ARCH_HAVE_OP_TAIL_CALL)
- /* Tail calls can be made from gshared code */
- g_assert (code);
+ g_assert (code);
if (m->is_inflated && mono_method_get_context (m)->method_inst) {
#ifdef MONO_ARCH_RGCTX_REG