<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>I have the following code in a unit (I need to provide a memset
      function to be able to link to freertos):<br>
    </p>
    <p>function memset(pxBuffer:pointer; value : byte; count :
      Tsize):pointer; cdecl;<br>
      begin<br>
        FillChar(pxBuffer,count,value);<br>
        Result := pxBuffer;<br>
      end;<br>
    </p>
    <p><br>
    </p>
    <p>When I look at the assembler code generated by latest Trunk fpc
      something is very odd @08000970, I'd expect to see <br>
    </p>
    <p>LDR           R0, [R11, #-0x30]</p>
    <p>but in fact I see:</p>
    <p> 08000970   SUB.W          R0, R11, #0x30</p>
    <p>which makes no sense to me and later the code crashes inside of
      the FillChar routine.</p>
    <p>Compiler Bug? Or me overlooking something? I tried to compile
      with -O- and -O1, with -O2 the generated code is a little
      different but there the SP is loaded to R0 which I do not
      understand, I'd expect R0 to be set to address of pxBuffer. (this
      is for armv7em, for armv6 also looks odd.<br>
    </p>
    <p><br>
    </p>
    <p>Thank you for your help,</p>
    <p>Michael<br>
    </p>
    <p>FREERTOS_$$_MEMSET$POINTER$BYTE$LONGWORD$$POINTER<br>
      DEBUGSTART_$FREERTOS<br>
      memset<br>
      $Thumb<br>
      begin<br>
       08000958   MOV            R12, SP<br>
       0800095A   PUSH.W         {R11, LR}<br>
       0800095E   SUB.W          R11, R12, #4<br>
       08000962   SUB            SP, SP, #0x48<br>
       08000964   STR            R0, [R11, #-0x30]<br>
       08000968   STRB           R1, [R11, #-0x34]<br>
       0800096C   STR            R2, [R11, #-0x38]<br>
      FillChar(pxBuffer,count,value);<br>
       08000970   SUB.W          R0, R11, #0x30<br>
       08000974   LDRB           R2, [R11, #-0x34]<br>
       08000978   LDR            R1, [R11, #-0x38]<br>
       0800097C   BL             SYSTEM_$$_FILLCHAR$formal$LONGINT$BYTE 
      ; 0x080002<br>
      Result := pxBuffer;<br>
       08000980   LDR            R0, [R11, #-0x30]<br>
       08000984   STR            R0, [R11, #-0x3C]<br>
    </p>
    <div class="moz-cite-prefix">Am 21.04.20 um 23:07 schrieb Joao
      Schuler:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAJbKcepuS1bp4hcB+pOFAJLfttkoPpmeUz0E0+wbJ8sbW0SWMA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">just as point for consideration, I'm not sure if
        data alignment will improve speed on future processors:
        <div><a
href="https://lemire.me/blog/2012/05/31/data-alignment-for-speed-myth-or-reality/"
            moz-do-not-send="true">https://lemire.me/blog/2012/05/31/data-alignment-for-speed-myth-or-reality/</a> </div>
        <div><br>
        </div>
        <div>Food for thought: imagine if we had single (32 bits
          floating point) values dynamic arrays with 1 million values
          each: a b and c. I would love to have something like this:</div>
        <div>a := b + c;</div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
fpc-devel maillist  -  <a class="moz-txt-link-abbreviated" href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a>
</pre>
    </blockquote>
  </body>
</html>