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

            Bug ID: 81551
           Summary: [ARM] Incorrect STRD to misaligned address.
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: belagod at gcc dot gnu.org
  Target Milestone: ---

For this piece of code:

void foo ()
{
  *((long long*)0x2000213F) = 0;
}

when compiled with

$ arm-none-eabi-gcc -S -march=armv7-a /tmp/strd.c -O0 -marm -o -

It generates an STRD to a misaligned address

        .type   foo, %function
foo:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 1, uses_anonymous_args = 0
        @ link register save eliminated.
        str     fp, [sp, #-4]!
        add     fp, sp, #0
        movw    r3, #8511
        movt    r3, 8192
        mov     r0, #0
        mov     r1, #0
        strd    r0, [r3]
        nop
        add     sp, fp, #0
        @ sp needed
        ldr     fp, [sp], #4
        bx      lr
        .size   foo, .-foo

but for -O1 and above:

foo:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        mov     r3, #8448
        movt    r3, 8192
        mov     r2, #0
        strb    r2, [r3, #63]
        strb    r2, [r3, #64]
        strb    r2, [r3, #65]
        strb    r2, [r3, #66]
        strb    r2, [r3, #67]
        strb    r2, [r3, #68]
        strb    r2, [r3, #69]
        strb    r2, [r3, #70]
        bx      lr

$ ./arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/data/embedded/dev-builds/trunk/install/libexec/gcc/arm-none-eabi/8.0.0/lto-wrapper
Target: arm-none-eabi
Configured with: /data/embedded/dev-builds/trunk/src/configure
--prefix=/data/embedded/dev-builds/trunk/install --target=arm-none-eabi
--enable-languages=c,c++ --with-cpu=cortex-m3 --with-mode=thumb --with-newlib
--enable-newlib-io-long-long --enable-newlib-register-fini
--enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls
--disable-multilib --with-libexpat --with-system-zlib --disable-gdbtk
--enable-plugins --disable-threads --disable-tls --disable-libgomp
--disable-libmudflap --disable-libquadmath --disable-libssp
--disable-libstdcxx-pch --disable-nls --disable-rda --disable-sid --disable-tui
--disable-utils --disable-werror --disable-fixed-point
Thread model: single
gcc version 8.0.0 20170725 (experimental) (GCC)

Reply via email to