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

            Bug ID: 118166
           Summary: simple bit operations for __int128 do not use vector
                    operations/registers
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gero.peterhoff at gmx dot net
  Target Milestone: ---

Example
__int128   bit_blend(const __int128 if_false, const __int128 if_true, const
__int128 mask)
{
    return ((if_false ^ if_true) & mask) ^ if_false;
}

generated (-std=gnu++23 -msse2 (or better) -O3)
bit_blend(__int128, __int128, __int128):
        xchg    rdi, rsi
        mov     rax, rdx
        mov     rdx, rcx
        xor     rax, rsi
        xor     rdx, rdi
        and     rax, r8
        and     rdx, r9
        xor     rax, rsi
        xor     rdx, rdi
        ret

Reply via email to