<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Am 18.01.2020 um 18:52 schrieb J.
      Gareth Moreton:<br>
    </div>
    <blockquote type="cite"
      cite="mid:1ffc576a-752d-99fc-19d6-648e94f90ad1@moreton-family.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>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?</p>
      <p><tt><b>type </b>TVector4 = <b>record</b></tt><tt><br>
        </tt><tt>  X, Y, Z, W: Single;</tt><tt><br>
        </tt><tt><b>end</b>; // compatible with __m128f</tt></p>
      <p><tt><b>type </b>TComplex = <b>record</b></tt><tt><br>
        </tt><tt>  Re, Im: Double;</tt><tt><br>
        </tt><tt><b>end</b>; // compatible with __m128d</tt></p>
      <p>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.</p>
    </blockquote>
    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.<br>
    <br>
    Though to be really useable it would need to be flexible enough to
    handle for the following for example as well:<br>
    <br>
    === code begin ===<br>
    <br>
    type<br>
      TVector3 = record<br>
        X, Y, Z: Single;<br>
      end;<br>
    <br>
      TVector4 = record<br>
        P: TVector3;<br>
        W: Single;<br>
      end;<br>
    <br>
    === code end ===<br>
    <br>
    Regards,<br>
    Sven<br>
  </body>
</html>