------- Comment #1 from gilles dot chanteperdrix at xenomai dot org  2009-01-12 
18:03 -------
The following code:

__thread long tl = 42;

long f(void)
{
        long *l = &tl;
        register long r0 __asm__ ("r0");
        register long *r1 __asm__ ("r1");
        r0 = 23;
        r1 = l;
        __asm__ __volatile__ ("": "+r"(r0) : "r"(r1));
        return r0;
}

When compiled with -O2, gives the followin assembly code:

f:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        ldr     r1, .L3
        str     lr, [sp, #-4]!
        bl      __aeabi_read_tp @ load_tp_soft
        add     r1, r0, r1
        ldr     pc, [sp], #4

Where we see that the r0 register is never loaded with 23 as it should.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38815

Reply via email to