https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68924
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |FIXED Target Milestone|--- |9.0 --- Comment #6 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Peter Cordes from comment #3) > For the reverse, we get: > > long long extract(__m128i v) { > return ((__v2di)v)[0]; > } > > subl $28, %esp > vmovq %xmm0, 8(%esp) > movl 8(%esp), %eax > movl 12(%esp), %edx > addl $28, %esp > ret > > MOVD / PEXTRD might be better, but gcc does handle it. It's all using > syntax that's available in 32-bit mode, not a special built-in. Please report this problem in the another PR (it is the case of missing v->r alternative in *vec_extractv2di_0_sse pattern for SSE4+, where we can split directly to movd/pextrd). The original problem is fixed for gcc-9.