You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When compiling AArch64 targets without hard-float support e.g., -march=armv8-a+nofp+nosimd -mgeneral-regs-only, LLVM generates invalid assembly for C variadic functions when passed floating-point values.
When passing a floating-point value to a variadic function, it passes it as an integer register, and saves it to the integer register block. When fetching the value, it fetches it from the floating register block, which is uninitialized.
It looks like the problem is in the method AArch64ABIInfo::EmitAAPCSVAArg, the check to see if a register is floating or integer only looks at the base type. The check also needs to take into account additional target information such as general-regs-only being enabled.