Hi,

I wondered if it is possible to add support for using sse2 packed doubles in 
fpc.

I tried to create a sse2doubles type and define a operator + on it. Eventually I want to move this type and all operators on it to a separate sse2 unit, so that the user of this type doesn't need to see the assembler. The following program works, but not as efficiently as I had hoped, because the operator is not inlined, probably because of the assembler code.

Is it possible to create this purely in RTL /units or is compiler support needed? Does it make sense to create a 'feature request'bug tracker item for this? Compiler hacking is out of my league.

program optsse2;

{$mode objfpc}{$H+}{$ASMMODE ATT}
{$FPUTYPE SSE2}

type
  sse2doubles = record
                 d1, d2: double;
               end;

operator + (d1, d2: sse2doubles) : sse2doubles; assembler; inline;
{begin
  result.d1 := d1.d1 + d2.d1;
  result.d2 := d1.d2 + d2.d2;
end;}
asm
  movupd (%eax), %xmm0
  addpd (%edx), %xmm0
  movupd %xmm0, (%ecx)
end;

procedure test;
var
  sd1, sd2, sd3: sse2doubles;
begin
  sd1.d1 := 1;
  sd1.d2 := 2;
  sd2.d1 := 3;
  sd2.d2 := 4;
  sd3 := sd1 + sd2;
  writeln(sd3.d1);
  writeln(sd3.d2);
end;

begin
  test;
end.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to