[fpc-devel] Difficulty in specifying record alignment... and more compiler optimisation shenanigans!

Florian Klämpfl florian at freepascal.org
Sun Oct 27 09:13:01 CET 2019

Am 23.10.19 um 22:36 schrieb J. Gareth Moreton:
> So I did a bit of reading after finding the "mpx-linux64-abi.pdf" 
> document.  As I suspected, the System V ABI is like vectorcall when it 
> comes to using the XMM registers... only the types __m128, __float128 
> and __Decimal128 use the "SSEUP" class and hence use the entire 
> register.  The types are opaque, but both their size and alignment are 
> 16 bytes, so I think anything that abides by those rules can be 
> considered equivalent.
> If the complex type is unaligned, the two fields get their own XMM 
> register.  If aligned, they both go into %xmm0.  At least that is what I 
> gathered from reading the document - it's a little unclear sometimes.

I briefly tested with god bolt (https://godbolt.org/): records of two 
double are passed in two xmm registers regardless of the alignment, two 
floats (so single) are passed in one xmm register.

More information about the fpc-devel mailing list