• Stelian Pop's avatar
    [ARM] 4264/1: ldrex/strex syntax errors with recent compilers · 0803c30c
    Stelian Pop authored
    Trying to build some code using atomic_clear_mask() on a ARM v6
    processor with a recent compiler (tried with gcc version 4.1.1
    (CodeSourcery ARM Sourcery G++ 2006q3-26), but
    all gcc > 4.1 might be affected) results in the following:
    
    /tmp/ccWKLJV8.s: Assembler messages:
    /tmp/ccWKLJV8.s:581: Error: instruction does not accept this addressing
    mode -- `ldrex r0,r3'
    /tmp/ccWKLJV8.s:583: Error: instruction does not accept this addressing
    mode -- `strex r1,r0,r3'
    
    Older gcc (like gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)) have no problem
    with this.
    
    The patch below fixes the compile error. I also verified that gcc-4.0.0 generates identical code using both forms.
    Signed-off-by: default avatarStelian Pop <stelian@popies.net>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    0803c30c
atomic.h 4.54 KB