<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
Can you run gdb on there? When you break inside memset does the pxBuffer pointer make sense (not 0x0)? Do the other two variables come in correctly?</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
<br>
</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
Do you call memset or does an api in the OS call it? Perhaps it's a pointer to a pointer on accident?</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
<br>
</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
If you are required to provide memset are you also providing other memory functions, for example to allocate? Is it passing a valid pointer back (one that eventually gets to memset)?</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
<br>
</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255); text-align: left;" dir="auto">
Just a bit of a brainstorm.. sorry if I've oversimplified or missed the mark entirely :)</div>
<div id="ms-outlook-mobile-signature">
<div><br>
</div>
--<br>
Alexander Grotewohl<br>
<a href="https://dcclost.com" target="_blank">https://dcclost.com</a></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> fpc-devel <fpc-devel-bounces@lists.freepascal.org> on behalf of Michael Ring via fpc-devel <fpc-devel@lists.freepascal.org><br>
<b>Sent:</b> Tuesday, April 21, 2020 6:09:57 PM<br>
<b>To:</b> fpc-devel@lists.freepascal.org <fpc-devel@lists.freepascal.org><br>
<b>Cc:</b> Michael Ring <mail@michael-ring.org><br>
<b>Subject:</b> [fpc-devel] Possible error in generated code for arm?</font>
<div> </div>
</div>
<div>
<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="x_moz-cite-prefix">Am 21.04.20 um 23:07 schrieb Joao Schuler:<br>
</div>
<blockquote type="cite">
<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/">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="x_mimeAttachmentHeader"></fieldset>
<pre class="x_moz-quote-pre">_______________________________________________
fpc-devel maillist  -  <a class="x_moz-txt-link-abbreviated" href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>
<a class="x_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>
</div>
</body>
</html>