What is vfpv3-d32?
Windows only supports ARM variants that have VFPv3-D32 coprocessor support. It means floating-point registers are always present and can be relied on for parameter passing. And, the full set of 32 registers is available for use. The VFP registers and their usage are summarized in this table: Volatile?
Why VFP registers are not used for variadic functions?
The VFP registers aren’t used for variadic functions, and Stage C rules 1 and 2 are ignored. It means that a variadic function can begin with an optional push {r0-r3} to prepend the register arguments to any additional arguments passed by the caller, and then access the entire argument list directly from the stack.
What is an unallocated VFP?
The VFP registers are marked as unallocated. The Next Stacked Argument Address (NSAA) is set to the current SP. If a function that returns a result in memory is called, then the address for the result is placed in r0 and the NCRN is set to r1. For each argument in the list, the first matching rule from the following list is applied:
Is it possible to run floating point operations on non-VFP hardware?
The Windows runtime doesn’t support emulation of floating-point to enable running on non-VFP hardware. Advanced SIMD Extensions (NEON) support, including both integer and floating-point operations, must also be present in hardware. No run-time support for emulation is provided. Integer divide support (UDIV/SDIV) is recommended but not required.