[sgen] Integrate sgen_qsort() unit test in Makefile.
[corlib] DebuggerTypeProxyAttribute.ProxyName needs to return an assembly qualified type name. Fixes #16527
[linq] Enumerable.Join and GroupJoin needs to ignore null keys. Fixes #16530
Remove the #error for the ARM_FPU_VFP_HARD case.
Add an IS_HARD_FLOAT macro to the ARM back end.

Also define correct values for IS_SOFT_FLOAT and IS_VFP for
the hardware floating point (ARM_FPU_VFP_HARD) case.
Add detection of VFP v3 variants to mono-hwcap-arm.
Adjust various FP register values for hard float in mini-arm.h.
Add a helper function to the ARM back end to determine hard float mode.
Add VFP register saving to trampolines.
Handle the MONO_ARM_FPU_VFP_HARD case in mono_arch_emit_setret ().
Implement return value passing for ARM hard float.

This is currently only for float32/float64 values. They are passed
in the d0 register. The code is a bit complicated because we only
speak float64 in the JIT, so float32 values have to be converted
to/from float64.
Print detected ARM version in configure.
Implement add_float () for hard float on ARM.
Add register assignment for double-precision args on ARM hard float.
Make sure FPRs aren't used for implicit arguments on ARM hard float.
Implement support for single-precision args on ARM hard float.

This is done with a gross hack that maintains a list of args
in the MonoCallInst and emits them as late as possible. This
is not pretty, but we have to work around the register
allocator. See the code comments for details.
Correct the VFP check in exceptions-arm.c.

This should be a runtime decision, and also should be in
effect when using the hard float ABI (ARM_FPU_VFP_HARD).
Use d14 and d15 as scratch VFP registers.

Using d0 and d1 is problematic because they're argument registers
and so can end up being clobbered by instructions inserted in the
middle of a call sequence.

d14 and d15 on the other hand are OK because they don't have any
particular meaning in the ABI, and we don't even use them in the
register allocator at the moment anyway.
Maintain max_len when emitting calls on ARM hard float.

It has to be adjusted dynamically as with OP_SWITCH since
we emit extra instructions in the various call opcodes when
the argument list contains single-precision floats.

Also, allocate extra storage space when needed (we would
potentially overflow previously).
Avoid clobbering IP when passing single-precision args on ARM hard float.