This is an LLVM bug: rustc is generating LLVM IR with the intended semantics
This is about Rust, but might translate to Julia (and more) since both use LLVM?!
Both have tier 1 support for 32-bit on Windows, and them on Linux too (we tier 2). [And they are now ahead with tier 1 support for ARM64 on Windows too, us tier 2 only, tier 1 for macOS though, and this is off-topic. I suppose all ARM just work for floating point.]
32-bit x86 uses floating point stack, at least for Rust, if I recall implicated. I think 64-bit doesn’t usse it (but could), neither for us, do we use it for 32-bit?
This doesn’t answer your question about floats, but I wonder how many 32-bit systems are actually used for Julia in general. As far as I can tell, the package CpuId.jl has no effect for 32-bit systems, at least since 2022. It took more than two years before an issue was opened. If many users had 32-bit, that would have happened faster for a package with 180k downloads/month (according to JuliaHub).
…and I guess this is a case of “the ABI sucks”. My understanding is that msvc has the same issue/behavior as clang/llvm. (per godbolt)
And I would guess that the most important remaining x82-32 use is “need to interface with some niche legacy DLL from the windows XP era (potentially to interface with some scientific instrument), actually either in a VM or with wine on x64-linux” – so “don’t be worse than msvc” should be good enough?