From: Richard Henderson <r...@redhat.com>
Date: Thu, 17 Nov 2011 11:22:53 -1000

> Full sparc64-linux testing still underway; I've pushed these two
> patches to the git branch previously mentioned.

Hey Richard, after the ICE fix you made today the only test that
fails is gcc.dg/atomic-flag.c at -O0.  Below is the assembler
generated.

That "xor" with '1' and then test using the 0xff mask looks
suspicious.

        .common a,1,1
        .section        ".text"
        .align 4
        .global main
        .type   main, #function
        .proc   04
main:
        save    %sp, -104, %sp
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g1
        stb     %g0, [%g1]
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g1
        ldub    [%g1], %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        be      %icc, .L2
         nop
        call    abort, 0
         nop
.L2:
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g2
        membar  15
        membar  15
        ldstub  [%g2], %g1
        stb     %g1, [%fp-1]
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g1
        ldub    [%g1], %g1
        xor     %g1, 1, %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        bne     %icc, .L3
         nop
        ldub    [%fp-1], %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        be      %icc, .L4
         nop
.L3:
        call    abort, 0
         nop
.L4:
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g2
        membar  15
        membar  15
        ldstub  [%g2], %g1
        stb     %g1, [%fp-1]
        ldub    [%fp-1], %g1
        xor     %g1, 1, %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        bne     %icc, .L5
         nop
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g1
        ldub    [%g1], %g1
        xor     %g1, 1, %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        be      %icc, .L6
         nop
.L5:
        call    abort, 0
         nop
.L6:
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g1
        membar  15
        stb     %g0, [%g1]
        membar  15
        sethi   %hi(a), %g1
        or      %g1, %lo(a), %g1
        ldub    [%g1], %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        be      %icc, .L7
         nop
        call    abort, 0
         nop
.L7:
        mov     0, %g1
        mov     %g1, %i0
        return  %i7+8
         nop
        .size   main, .-main
        .ident  "GCC: (GNU) 4.7.0 20111121 (experimental)"
        .section        .note.GNU-stack,"",@progbits

Reply via email to