http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49168
Summary: [4.7 Regression] Aligned store used with unaligned address Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassig...@gcc.gnu.org ReportedBy: hjl.to...@gmail.com CC: rgue...@gcc.gnu.org On Linux/x86-64, revision 174223 gave [hjl@gnu-6 gcc]$ cat /tmp/x.c #include <stdarg.h> void flt128_va (void *mem, va_list *ap) { __float128 d = va_arg (*ap, __float128); __builtin_memcpy (mem, &d, sizeof (d)); } [hjl@gnu-6 gcc]$ ./xgcc -B./ -O2 -S /tmp/x.c [hjl@gnu-6 gcc]$ cat x.s .file "x.c" .text .p2align 4,,15 .globl flt128_va .type flt128_va, @function flt128_va: .LFB0: .cfi_startproc movl 4(%rsi), %edx cmpl $176, %edx jb .L5 movq 8(%rsi), %rax addq $15, %rax andq $-16, %rax leaq 16(%rax), %rdx movq %rdx, 8(%rsi) movdqa (%rax), %xmm0 movdqa %xmm0, (%rdi) ret .p2align 4,,10 .p2align 3 .L5: mov %edx, %eax addq 16(%rsi), %rax addl $16, %edx movl %edx, 4(%rsi) movdqa (%rax), %xmm0 movdqa %xmm0, (%rdi) ret .cfi_endproc .LFE0: .size flt128_va, .-flt128_va It may be caused by revision 174206: http://gcc.gnu.org/ml/gcc-cvs/2011-05/msg00987.html