On 29/10/2019 14:24, Michael Van Canneyt wrote:


On Tue, 29 Oct 2019, J. Gareth Moreton wrote:

Please note that only Marco's e-mails are making the list.  I don't see Michael's responses.

That's probably because I am not responding ;-)

Michael.

Yep, just noticed that Marco was responding to your messages from a few days ago!  Perception fail!

In regards to passing everything into XMM0, try running "tests/test/cg/tvectorcall1.pp" on Linux.  It's a bit of a weird test because there's a lot of Win64 stuff that's not compiled since it tests aggregates, something that only vectorcall takes advantage of.

Nevertheless, if you get an error such as 'FAIL: HorizontalAddSingle(HVA) has the vector in the wrong register.', then the System V ABI is not passing the __m128 type properly. The way it tests this is via a pair of functions, one in Pascal and one in assembler:

function HorizontalAddSingle(V: TM128): Single; vectorcall;
begin
  HorizontalAddSingle := V.M128_F32[0] + V.M128_F32[1] + V.M128_F32[2] + V.M128_F32[3];
end;

function HorizontalAddSingle_ASM(V: TM128): Single; vectorcall; assembler; nostackframe;
asm
  HADDPS XMM0, XMM0
  HADDPS XMM0, XMM0
end;

If the results are not equal, then the entire vector isn't in XMM0.  I haven't tested it on Linux as much as I would like because I have to boot into a virtual machine to do so, and I'm still a bit of a Linux novice.  I'm curious to know what the assembler dump is though.

Gareth aka. Kit


--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to