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@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
  <ProjectOptions>
    <General>
      <UseAppBundle Value="False"/>
    </General>
    <BuildModes Count="1">
      <Item1 Name="default" Default="True"/>
    </BuildModes>
    <Units Count="1">
      <Unit0>
        <Filename Value="shlissue.lpr"/>
        <IsPartOfProject Value="True"/>
        <IsVisibleTab Value="True"/>
        <Loaded Value="True"/>
      </Unit0>
    </Units>
  </ProjectOptions>
  <CompilerOptions>
    <Target>
      <Filename Value="shlissue"/>
    </Target>
    <SearchPaths>
      <IncludeFiles Value="../../Source;$(ProjOutDir)"/>
      <OtherUnitFiles Value="../../Source"/>
      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
    </SearchPaths>
    <CodeGeneration>
      <HeapSize Value="8192"/>
      <StackSize Value="8192"/>
      <TargetCPU Value="arm"/>
      <TargetOS Value="embedded"/>
    </CodeGeneration>
    <Linking>
      <Debugging>
        <GenerateDebugInfo Value="True"/>
        <DebugInfoType Value="dsDwarf2"/>
        <UseLineInfoUnit Value="False"/>
      </Debugging>
    </Linking>
    <Other>
      <CustomOptions Value="-Cparmv7em
-XParm-none-eabi-
-Wpnucleof401re
-dnucleof401re
      "/>
    </Other>
  </CompilerOptions>
</CONFIG>
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to