<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>