https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127020
Bug ID: 127020
Summary: Should int128 ^ operation always be vectorized?
Product: gcc
Version: 16.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: liuhongt at gcc dot gnu.org
Target Milestone: ---
Target: x86-64
[hjl@gnu-tgl-3 gcc]$ cat /tmp/x.c
extern __int128 a, b, c, z;
__int128 foo_inout(__int128 x)
{
return (x ^ a ^ b ^ c ^ z);
}
[hjl@gnu-tgl-3 gcc]$ ./xgcc -B./ -mtune=znver4 -O2 /tmp/x.c -S
[hjl@gnu-tgl-3 gcc]$ cat x.s
.file "x.c"
.text
.p2align 4
.globl foo_inout
.type foo_inout, @function
foo_inout:
.LFB0:
.cfi_startproc
movdqa a(%rip), %xmm0
pxor b(%rip), %xmm0
movdqa c(%rip), %xmm1
movq %rdi, %xmm2
pxor z(%rip), %xmm1
movq %rsi, %xmm3
punpcklqdq %xmm3, %xmm2
pxor %xmm2, %xmm0
pxor %xmm1, %xmm0
movhlps %xmm0, %xmm4
movq %xmm0, %rax
movq %xmm4, %rdx
ret
.cfi_endproc
.LFE0:
.size foo_inout, .-foo_inout
.ident "GCC: (GNU) 17.0.0 20260823 (experimental)"
.section .note.GNU-stack,"",@progbits
[hjl@gnu-tgl-3 gcc]$ ./xgcc -B./ -O2 /tmp/x.c -S
[hjl@gnu-tgl-3 gcc]$ cat x.s
.file "x.c"
.text
.p2align 4
.globl foo_inout
.type foo_inout, @function
foo_inout:
.LFB0:
.cfi_startproc
xchgq %rdi, %rsi
movq a(%rip), %rax
movq a+8(%rip), %rdx
xorq b(%rip), %rax
xorq b+8(%rip), %rdx
xorq c(%rip), %rax
xorq c+8(%rip), %rdx
xorq z(%rip), %rax
xorq z+8(%rip), %rdx
xorq %rsi, %rax
xorq %rdi, %rdx
ret
.cfi_endproc
.LFE0:
.size foo_inout, .-foo_inout
.ident "GCC: (GNU) 17.0.0 20260823 (experimental)"
.section .note.GNU-stack,"",@progbits
[hjl@gnu-tgl-3 gcc]$