[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).