[fpc-devel] Issue with Compiler output for shr on Cortex-M4

Michael Ring mail at michael-ring.org
Wed Feb 6 09:29:22 CET 2019


Your patch did the trick, assembler Code is looking good now:

    pByte(@DR)^ := (aWord shr 8);
      0800 187E  LDR          R0, [R11, #-0x38]
      0800 1882  ADD.W        R1, R0, #0xC
      0800 1886  LDRH         R0, [R11, #-0x30]
      0800 188A  UXTB         R0, R0, ROR #8
      0800 188E  STRB         R0, [R1]

and my application also works fine now.


This is a small demo of the issue:

program shlissue;
var
   MemoryAddress : pointer;
   aWord : word;
begin
   aWord := $1000;
   pByte(MemoryAddress)^ := aWord shr 8;
end.

This compiles fine with your patch, shows the issue when compiled with 
unpatched fpc trunk

Strange that you could not see the issue with -O1

I have also included an lpi file. When I open the lpi file in Lazarus it 
shows me optimizations set as O1. When I call lazbuild with --verbose 
then I get:

CmdLine="/usr/local/bin/fpc  -Tembedded -Parm -MObjFPC -Scgi -Ch8192 
-Cs8192 -O1 -gw2 -l -vewnhibq -Fi/Users/ring/devel/mbf/Source 
-Fi/Users/ring/devel/mbf/Samples/shlissue/lib/arm-embedded 
-Fu/Users/ring/devel/mbf/Source 
-Fu/Users/ring/devel/mbf/Samples/shlissue/ 
-FU/Users/ring/devel/mbf/Samples/shlissue/lib/arm-embedded/ 
-FE/Users/ring/devel/mbf/Samples/shlissue/ 
-o/Users/ring/devel/mbf/Samples/shlissue/shlissue -Cparmv7em 
-XParm-none-eabi- -Wpnucleof401re -dnucleof401re shlissue.lpr"


Thany you (again and again) for your help!


Michael


Am 05.02.19 um 21:09 schrieb Jeppe Johansen:
> I can only reproduce this with peephole optimization turned on (O2). 
> Can you share more code that reproduces it?
>
> Either way here's a patch that might fix it?
>
> Best Regards,
> Jeppe
>
> On 2/3/19 5:31 PM, Michael Ring wrote:
>
>> Forgot to mention I am using Trunk compiler from today revision 41187 
>> ond optimization level was -O1
>>
>> Michael
>>
>> Am 03.02.19 um 17:20 schrieb Michael Ring:
>>> I think I found another issue with Code generation, this time on 
>>> Cortex-M4:
>>>
>>> I need to write Byte Aligned to the Data Register of the SPI 
>>> Interface of a STM32 Chip....
>>>
>>> so what I (try) to do is:
>>>
>>> using pByte(@DR)^ to force a single byte transfer and I succeed with 
>>> the byte alignment.......
>>>
>>> BUT
>>>
>>> please check the generated assembler, the requirred LSRS (SHR) is 
>>> not done by the compiler.
>>>
>>> Just for fun I removed the byte alignment and the LSRS shows up...
>>>
>>> @Jeppe, can this have to do with the fix for Cortex-M0 you provided 
>>> to me a few days ago or is this just another issue?
>>>
>>>     pByte(@DR)^ := aWord shr 8;
>>>      0800 185A  LDR          R0, [R11, #-0x38]
>>>      0800 185E  ADD.W        R1, R0, #0xC
>>>      0800 1862  LDRH         R0, [R11, #-0x30]
>>>      0800 1866  STRB         R0, [R1]
>>>
>>>     DR := aWord shr 8;
>>>      0800 1868  LDRH         R0, [R11, #-0x30]
>>>      0800 186C  LSRS         R1, R0, #8
>>>      0800 186E  LDR          R0, [R11, #-0x38]
>>>      0800 1872  STR          R1, [R0, #0xC]
>>>
>>> Thank you,
>>>
>>>
>>> Michael
>>>
>>> _______________________________________________
>>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>>
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://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/20190206/c958368f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: shlissue-nucleof401re.lpi
Type: text/xml
Size: 1259 bytes
Desc: not available
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190206/c958368f/attachment.xml>


More information about the fpc-devel mailing list