https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111657
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |ubizjak at gmail dot com Status|NEW |ASSIGNED --- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> --- Created attachment 56030 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56030&action=edit Propsed patch Proposed patch declares libcall algorithm unavailable to non-default address spaces and falls back to a loop if everything else fails. The following testcase: --cut here-- struct a { long arr[30]; }; __thread struct a t; void foo (struct a *dst) { *dst = t; } __seg_gs struct a s; void bar (struct a *dst) { *dst = s; } --cut here-- now compiles (-O2 -mno-sse) to: foo: movq %fs:0, %rdx movl $30, %ecx leaq t@tpoff(%rdx), %rsi rep movsq ret bar: xorl %eax, %eax .L4: movl %eax, %edx addl $8, %eax movq %gs:s(%rdx), %rcx movq %rcx, (%rdi,%rdx) cmpl $240, %eax jb .L4 ret (rep movsq copies only from the default ds: address space)