[fpc-devel] vmul commutative optimization?

Marco van de Voort fpc at pascalprogramming.org
Wed Nov 13 17:03:22 CET 2019


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?




More information about the fpc-devel mailing list