[fpc-devel] using sse2 packed doubles
Florian Klaempfl
florian at freepascal.org
Fri Oct 6 19:11:00 CEST 2006
Vincent Snijders schrieb:
> 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.
Indeed.
>
> Is it possible to create this purely in RTL /units
No.
> or is compiler
> support needed?
Yes.
> Does it make sense to create a 'feature request'bug
> tracker item for this? Compiler hacking is out of my league.
Do you think it's allowed to use in the benchmarks?
>
> 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 at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
More information about the fpc-devel
mailing list