[Tailcall] Fill in some missing pieces: x86reg, armreg, armmembase, align x86patch...
commit1c91423be383634995b2b0a1484ec9b1b951c4f9
authorJay Krell <jay.krell@cornell.edu>
Wed, 9 May 2018 02:02:37 +0000 (8 19:02 -0700)
committerGitHub <noreply@github.com>
Wed, 9 May 2018 02:02:37 +0000 (8 19:02 -0700)
tree80545ef872f96982f513d2934f1a4ae4307e96a2
parent5a3137214b9a9b1348dcc22ee4b90e31ee356f34
[Tailcall] Fill in some missing pieces: x86reg, armreg, armmembase, align x86patch, x86aot, armhardfloat. (#8591)

* [Tailcall]  Implement x86 OP_TAILCALL_REG (https://github.com/mono/mono/issues/8582)
This should enable calli, which isn't just for cee_calli but also internal purposes.

* [Tailcall] Split x86_align_for_patch out of emit_call.

* [Tailcall] Align x86 tailcall patches, using x86_align_for_patch.

* [Tailcall] Allow x86 tailcall to be AOTed.

* [Tailcall] Make all the 'missed tailcall' cases more similar looking.

* [Tailcall] Fill in a little more tailcall support.

* [arm] emit_big_add: Handle degenerate imm == 0 and dreg == sreg.

* [arm] Split emit_call_reg into emit_call_reg and emit_jmp_reg (for reuse by tailcall).

* [arm] handle hardfloat in tailcall

* [arm] Fill in TAILCALL_MEMBASE and TAILCALL_REG (reuse emit_jmp_reg)
virtual calls should work now (but not interface)

* [Tailcall] Comment about tail.calli -- no this-type in signature, to check for byref valuetype.
(data is available on compile-time staci, and a proposal to check for ldloca/ldarg pending)

* Add some asserts.

* More detangling of vtable_arg/imt_arg (extra_arg) from tailcall_supported -- they must be set, or nullness predicted, earlier.

* [Tailcall] Capture inputs to is_supported_tailcall and assert they don't change.

* [Tailcall] ARM32 tailcall not supported if mono_class_is_interface (cmethod->klass).
mono/mini/method-to-ir.c
mono/mini/mini-arm.c
mono/mini/mini-arm.h
mono/mini/mini-x86.c
mono/mini/mini-x86.h
mono/tests/Makefile.am