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