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 <[email protected]> * 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 <[email protected]> * gcc.dg/20150306-1.c: New test.
patch-volatile-bitfields-1.diff
Description: Binary data
