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

Ilya Lesokhin <ilya.lesokhin at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ilya.lesokhin at gmail dot com

--- Comment #26 from Ilya Lesokhin <ilya.lesokhin at gmail dot com> ---
Created attachment 44888
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44888&action=edit
Test case demonstrating the problem

Looks like issue still exists.

#include <array>


uint64_t test() {
  register uint64_t t0;
  register uint64_t t1;
  register uint64_t t2 ;
  register uint64_t rdx;
  register uint64_t r0 asm("rsi");
  register uint64_t r1 ;
  register uint64_t r2 ;
  register uint64_t r3 ;
  register uint64_t m3;
  register uint64_t y0;
  register uint64_t y1;
  register uint64_t y2;
  register uint64_t y3;


  asm(
     "mov %[res0],%[res0]"
      : "=&d"(rdx), [res0] "=&r"(r0), [res1] "=&r"(r1), [res2] "=&r"(r2),
[res3] "=&r"(r3),
        [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2)
      : [m3] "r"(m3), [y0] "r"(y0), [y1] "r"(y1), [y2] "r"(y2)
      : "cc");



    return r0;
}

Results in:

test():
 push   %r14
 xor    %eax,%eax
 xor    %ecx,%ecx
 push   %rbp
 xor    %esi,%esi
 xor    %edi,%edi
 push   %rbx
 mov    %r14,%r14  <--------- should be rsi.
 mov    %r14,%rax
 pop    %rbx
 pop    %rbp
 pop    %r14
 retq   


https://godbolt.org/z/RLTDbY

Reply via email to