[fpc-devel] Possible error in generated code for arm?
Michael Ring
mail at michael-ring.org
Wed Apr 22 00:09:57 CEST 2020
I have the following code in a unit (I need to provide a memset function
to be able to link to freertos):
function memset(pxBuffer:pointer; value : byte; count : Tsize):pointer;
cdecl;
begin
FillChar(pxBuffer,count,value);
Result := pxBuffer;
end;
When I look at the assembler code generated by latest Trunk fpc
something is very odd @08000970, I'd expect to see
LDR R0, [R11, #-0x30]
but in fact I see:
08000970 SUB.W R0, R11, #0x30
which makes no sense to me and later the code crashes inside of the
FillChar routine.
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.
Thank you for your help,
Michael
FREERTOS_$$_MEMSET$POINTER$BYTE$LONGWORD$$POINTER
DEBUGSTART_$FREERTOS
memset
$Thumb
begin
08000958 MOV R12, SP
0800095A PUSH.W {R11, LR}
0800095E SUB.W R11, R12, #4
08000962 SUB SP, SP, #0x48
08000964 STR R0, [R11, #-0x30]
08000968 STRB R1, [R11, #-0x34]
0800096C STR R2, [R11, #-0x38]
FillChar(pxBuffer,count,value);
08000970 SUB.W R0, R11, #0x30
08000974 LDRB R2, [R11, #-0x34]
08000978 LDR R1, [R11, #-0x38]
0800097C BL SYSTEM_$$_FILLCHAR$formal$LONGINT$BYTE ;
0x080002
Result := pxBuffer;
08000980 LDR R0, [R11, #-0x30]
08000984 STR R0, [R11, #-0x3C]
Am 21.04.20 um 23:07 schrieb Joao Schuler:
> just as point for consideration, I'm not sure if data alignment will
> improve speed on future processors:
> https://lemire.me/blog/2012/05/31/data-alignment-for-speed-myth-or-reality/
>
>
> 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:
> a := b + c;
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20200422/47dd3128/attachment.html>
More information about the fpc-devel
mailing list