Hi everyone,

So I've almost finished implementing Microsoft's 'vectorcall' calling 
convention into Free Pascal - the final 
sticking point are Homogeneous Float Aggregates (HFA's), since the 
documentation isn't tremendously clear on 
their internal alignment - vectorcall allows the passing and returning of a 
record type that contains between 1 
and 4 fields (or an array) of the same type out of float (Single), Double, or 
an aligned vector (M128, M256 or 
M512).

I'm not certain if my definition of 'aggregate' is correct, but must the fields 
be packed like an array to be a 
valid HFA? I'm not certain if they should be packed or each field aligned to a 
16-byte boundary like with 
Homogeneous Vector Aggregates (with M128 fields).  Since the examples given on 
the Microsoft pages have array-
like fields, I'm assuming packed (and naturally aligned to 4-byte boundaries 
for Singles and 8 bytes for 
Doubles).

Can anyone confirm this? I don't want to end up programming the implementation 
incorrectly, as this will cause 
compatibility problems with any external libraries that use vectorcall.

Gareth aka. Kit
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to