Op 2019-11-12 om 20:46 schreef J. Gareth Moreton:
The Microsoft ABI is a bit restrictive when it comes to record types;
as described here
<https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2019>,
"Structs and unions of size 8, 16, 32, or 64 bits, and __m64 types,
are passed as if they were integers of the same size." So
unfortunately, a single-precision complex number is treated as a
64-bit structure and passed as an integer. The System V ABI, on the
other hand, would pass the two entries through the lower 64 bits of
XMM0. Vectorcall, theoretically, should put the two components into
XMM0 and XMM1, because the complex type would be considered a
"homogeneous vector aggregate" (with floats as 1-dimensional vectors).
I've found refs like
https://devblogs.microsoft.com/cppblog/introducing-vector-calling-convention/#comments
so the question is if partial vectors (and specially 2 single 8-byte,
since there are various special SSE opcodes to deal with them) are one
register or not. The references I found usually talk about "vector types
like _m128 and _m256), but don't really specify an exhaustive list.
I guess that means testing with VS?
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel