https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87373

--- Comment #31 from Murat Ursavaş <murat.ursavas at gmail dot com> ---
(In reply to Murat Ursavaş from comment #28)
> 
> Here's the disassembly of a problematic part:
> 
> 4.9.3
> 
> 121           NVM_SPI->ROUTE = USART_ROUTE_TXPEN | USART_ROUTE_RXPEN |
> USART_ROUTE_CLKPEN | NVM_SPI_LOCATION;
> 00029e38:   ldr     r3,[pc,#0x4c] ; 0x29e84
> 00029e3a:   ldr     r2,[r3,#0x54]
> 00029e3c:   movs    r2,#0x0
> 00029e3e:   orr     r2,r2,#0xb
> 00029e42:   str     r2,[r3,#0x54]
> 
> 7.3.1
> 
> 121           NVM_SPI->ROUTE = USART_ROUTE_TXPEN | USART_ROUTE_RXPEN |
> USART_ROUTE_CLKPEN | NVM_SPI_LOCATION;
> 0000572e:   ldr     r3,[pc,#0x70] ; 0x579c
> 00005730:   ldrb.w  r2,[r3,#0x54]
> 00005734:   movs    r2,#0x0
> 00005736:   orr     r2,r2,#0xb
> 0000573a:   strb.w  r2,[r3,#0x54]
> 0000573e:   ldrb.w  r2,[r3,#0x55]
> 00005742:   movs    r2,#0x0
> 00005744:   strb.w  r2,[r3,#0x55]
> 00005748:   ldrb.w  r2,[r3,#0x56]
> 0000574c:   movs    r2,#0x0
> 0000574e:   strb.w  r2,[r3,#0x56]
> 00005752:   ldrb.w  r2,[r3,#0x57]
> 00005756:   movs    r2,#0x0
> 00005758:   strb.w  r2,[r3,#0x57]

My limited assembler knowledge says new one is byte by byte access and should
set the register correctly, but somehow it's not.

Could actual object code be different than what I see in the disassembly? I'll
try to verify it via inspecting the code space.

Reply via email to