Am 18.01.2020 um 18:52 schrieb J. Gareth Moreton:

I think more than anything I would like to see a degree of "ease of use" for the SIMD intrinsics, since modifying __m128 data in C/C++ is not that straightforward.  Just as a straightforward example, what might be the best way to ensure these following record types are compatible with the __m128 data types?

*type *TVector4 = *record*
  X, Y, Z, W: Single;
*end*; // compatible with __m128f

*type *TComplex = *record*
  Re, Im: Double;
*end*; // compatible with __m128d

Programmers on their own projects, whether it be a game or a mathematical program, would much rather work with those constructs if it can be helped... or at least I would.

The compiler currently considers corresponding arrays as compatible, like "array[0..3] of Single" or "array[0..1] of Double". In theory nothing would stop us from implementing similar compatibility with the records you mentioned.

Though to be really useable it would need to be flexible enough to handle for the following for example as well:

=== code begin ===

type
  TVector3 = record
    X, Y, Z: Single;
  end;

  TVector4 = record
    P: TVector3;
    W: Single;
  end;

=== code end ===

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

Reply via email to