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

--- Comment #2 from Jan Engelhardt <jengelh at inai dot de> ---
== New input ==
$ cat x.cpp
struct S {
        char b[16];
#if __cplusplus >= 202000L
        bool operator==(const S &) const = default;
#else
        inline bool operator==(const S &o) const { return __builtin_memcmp(b,
o.b, sizeof(b)); }
#endif
};
bool fff(const S &a, const S &b) { return a == b; }

== Observed ==
$ ./xgcc -B. -c /dev/shm/x.cpp -O2 && objdump -d x.o
0000000000000000 <_Z3fffRK1SS1_>: C++17
   0:   48 8b 17                mov    (%rdi),%rdx
   3:   48 8b 47 08             mov    0x8(%rdi),%rax
   7:   48 33 16                xor    (%rsi),%rdx
   a:   48 33 46 08             xor    0x8(%rsi),%rax
   e:   48 09 d0                or     %rdx,%rax
  11:   0f 95 c0                setne  %al
  14:   c3                      ret

0000000000000000 <_Z3fffRK1SS1_>: C++20
   0:   31 c0                   xor    %eax,%eax
   2:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
   8:   0f b6 14 06             movzbl (%rsi,%rax,1),%edx
   c:   38 14 07                cmp    %dl,(%rdi,%rax,1)
   f:   75 17                   jne    28 <_Z3fffRK1SS1_+0x28>
  11:   48 83 c0 01             add    $0x1,%rax
  15:   48 83 f8 10             cmp    $0x10,%rax
  19:   75 ed                   jne    8 <_Z3fffRK1SS1_+0x8>
  1b:   b8 01 00 00 00          mov    $0x1,%eax
  20:   c3                      ret    
  21:   0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  28:   31 c0                   xor    %eax,%eax
  2a:   c3                      ret

Reply via email to