Hi Richard,

here is my new proposal, it addresses your objections and generates
"better" code for this test case:

main:
.LFB0:
    .cfi_startproc
    pushq    %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    global+1(%rip), %eax
    orl    $2147483647, %eax
    movl    %eax, global+1(%rip)
    movl    global+1(%rip), %eax
    andl    $2147483647, %eax
    cmpl    $2147483647, %eax
    je    .L2
    call    abort
.L2:
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc


I also tried to fix the comments.

Reg-tested on x86_64 successfully and ARM is still running.

Is it OK for trunk?



Thanks
Bernd.
                                          
gcc:
2015-03-06  Bernd Edlinger  <bernd.edlin...@hotmail.de>

        * expmed.c (strict_volatile_bitfield_p): For STRICT_ALIGNMENT
        check that MEM_ALIGN (op0) allows a MODESIZE access.
        (store_bit_field, extract_bit_field): For !STRICT_ALIGNMENT explicitly
        generate an unaligned access if the field crosses a word boundary.

testsuite:
2015-03-06  Bernd Edlinger  <bernd.edlin...@hotmail.de>

        * gcc.dg/20150306-1.c: New test.

Attachment: patch-volatile-bitfields-1.diff
Description: Binary data

Reply via email to