[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; 
   Result := pxBuffer;

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,


  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]
  08000970   SUB.W          R0, R11, #0x30
  08000974   LDRB           R2, [R11, #-0x34]
  08000978   LDR            R1, [R11, #-0x38]
  0800097C   BL             SYSTEM_$$_FILLCHAR$formal$LONGINT$BYTE ; 
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