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]$

Reply via email to