Pass small FP values in GPRs or stack memory according the the normal
convention. This is what gcc -mno-sse does on Win64.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
- Build Status
Buildable 41204 Build 41385: arc lint + arc unit
Event Timeline
Well, specifically for the MSVC side of things, they don't implement a -mno-sse mode:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/da46257b-4d92-402f-b320-b727341f6d30/disabling-ssesse2-code-generation-in-64bit-builds?forum=vcgeneral
So, we have to make up our own rules anway.
I suppose we might as well follow GCC, then. I see they pass in GPRs in this case. Let's do that.
I'm not opposed to supporting a soft-float ABI. But I don't think -mno-sse is a strong enough signal that the user actually understands what they're asking for, as opposed to being an accidental leftover from a 32-bit project. I'd prefer to print an error.
Well, -mno-sse seems to be enough to get GCC to do a soft-floatish thing, so I'm really just trying to follow them here. I think what we're finding in practice is that simply implementing the functionality we didn't intend to support is actually easier than nailing down the corner cases under which we should emit an error and recovering correctly.
You're right, it was. Now it converts to i32/i64, which goes via RCX/RDX/etc then stack memory.
Unit tests: pass. 61176 tests passed, 0 failed and 729 were skipped.
clang-tidy: pass.
clang-format: pass.
Build artifacts: diff.json, clang-tidy.txt, clang-format.patch, CMakeCache.txt, console-log.txt, test-results.xml