[fpc-devel] Question on updating FPC packages

Marco van de Voort fpc at pascalprogramming.org
Tue Oct 29 13:49:20 CET 2019

Op 2019-10-29 om 12:23 schreef J. Gareth Moreton:
> When it comes to testing vectorcall, uComplex isn't the best example 
> actually because most of the operators are inlined.  There are a 
> number of tests under "tests/test/cg" that test vectorcall and the 
> System V ABI using a Pascal implementation of the opaque __m128 type 
> (the two ABIs should behave exactly the same when dealing with simple 
> vectors).

The last time I checked it didn't vector anything at all. So only the 
native vectorizing of the record of two singles would be nice.

Last time I checked in 2017, complexadd inlined looked something like this:

     leal    32(%eax),%edx
     leal    8(%eax),%ecx
     vmovss    (%ecx),%xmm0
     vaddss    (%edx),%xmm0,%xmm0
     vmovss    %xmm0,-8(%ebp)
     vmovss    4(%ecx),%xmm0
     vaddss    4(%edx),%xmm0,%xmm0
     vmovss    %xmm0,-4(%ebp)

And I realize quite some rearrangements must be done.

> If anything though, the example function you gave (I'll need to 
> double-check what ComplexScl does though, if it isn't a simple 
> multiplication) 

It is simple multiplication of both real and imaginary with a scalar (as 
opposed to complex*complex which has more terms).

> would be a pretty solid and heavy-duty test of the compiler attempting 
> to vectorise the code - in an ideal world, individual calls to 
> ComplexAdd and ComplexSub (which are simple + and - operations in 
> uComplex) will compile into a single line of assembly language (ADDPD 
> and SUBPD respectively).  Nevertheless, one could disable the inlining 
> to see how well the compiler handles the function chaining, since with 
> aligned data, the result from XMM0 should be easily transposed in one 
> go to another XMM register if not just left alone as parameter data 
> for the next function.
Yes, it is just a somewhat realworld codebase to play with. It is MPL even.

More information about the fpc-devel mailing list