https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120233

            Bug ID: 120233
           Summary: [16 Regression] FAIL: gcc.target/i386/pr108938-3.c
                    scan-assembler-times bswap[\t ]+ 3
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: hubicka at ucw dot cz, liuhongt at gcc dot gnu.org,
                    ubizjak at gmail dot com
  Target Milestone: ---
            Target: x86-64

On x86-64, -m32 gave me

FAIL: gcc.target/i386/pr108938-3.c scan-assembler-times bswap[\t ]+ 3

The new code looks aweful:

foo2:
.LFB1:
        .cfi_startproc
        movl    8(%esp), %edx
        movzwl  (%edx), %eax
        movzwl  2(%edx), %edx
        movl    %eax, %ecx
        sall    $16, %eax
        sarw    $8, %cx
        movzwl  %cx, %ecx
        orl     %ecx, %eax
        movd    %eax, %xmm0
        movl    %edx, %eax
        sall    $16, %edx
        sarw    $8, %ax
        movdqa  %xmm0, %xmm2
        movzwl  %ax, %eax
        orl     %eax, %edx
        movl    4(%esp), %eax
        movd    %edx, %xmm1
        punpcklbw       %xmm1, %xmm2
        punpcklbw       %xmm1, %xmm0
        pshufd  $65, %xmm2, %xmm2
        punpcklbw       %xmm2, %xmm0
        movd    %xmm0, (%eax)
        ret
        .cfi_endproc

vs the old one:

foo2:
.LFB1:
        .cfi_startproc
        movl    8(%esp), %ecx
        movl    4(%esp), %edx
        movzwl  (%ecx), %eax
        rolw    $8, %ax
        movw    %ax, (%edx)
        movzwl  2(%ecx), %eax
        rolw    $8, %ax
        movw    %ax, 2(%edx)
        ret
        .cfi_endproc

Reply via email to