https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87317
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hjl.tools at gmail dot com --- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> --- Try this: https://github.com/hjl-tools/gcc/commit/a5e6fd272554f58136ba45bbdf9fd48553a72324 I got [hjl@gnu-tools-1 gcc]$ cat x.c #include <immintrin.h> int f(void *ptr) { __m128i data = _mm_loadl_epi64((__m128i *)ptr); data = _mm_cvtepu8_epi16(data); return _mm_cvtsi128_si32(data); } [hjl@gnu-tools-1 gcc]$ ./xgcc -B./ -O2 -march=haswell x.c -S cat [hjl@gnu-tools-1 gcc]$ cat x.s .file "x.c" .text .p2align 4 .globl f .type f, @function f: .LFB5178: .cfi_startproc vpmovzxbw (%rdi), %xmm0 vmovd %xmm0, %eax ret .cfi_endproc .LFE5178: .size f, .-f .ident "GCC: (GNU) 9.0.0 20180916 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tools-1 gcc]$ cat y.c #include <immintrin.h> void f(void *dst, void *ptr) { __m128i data = _mm_cvtsi32_si128(*(int*)ptr); data = _mm_cvtepu8_epi32(data); _mm_storeu_si128((__m128i*)dst, data); } [hjl@gnu-tools-1 gcc]$ ./xgcc -B./ -O2 -march=haswell y.c -S c[hjl@gnu-tools-1 gcc]$ cat y.s .file "y.c" .text .p2align 4 .globl f .type f, @function f: .LFB5178: .cfi_startproc vpmovzxbd (%rsi), %xmm0 vmovups %xmm0, (%rdi) ret .cfi_endproc .LFE5178: .size f, .-f .ident "GCC: (GNU) 9.0.0 20180916 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tools-1 gcc]$