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

--- Comment #18 from Jeffrey A. Law <law at redhat dot com> ---
In reference to c#10 and c#14, we get from the trunk:

   0:   ff 65 08                jmpq   *0x8(%rbp)
   3:   66 66 66 66 2e 0f 1f    data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
   a:   84 00 00 00 00 00 

0000000000000010 <unmodified_input_arg_is_copied>:
  10:   4c 8b 55 08             mov    0x8(%rbp),%r10
  14:   48 8d 6d 08             lea    0x8(%rbp),%rbp
  18:   41 ff e2                jmpq   *%r10
  1b:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

0000000000000020 <unmodified_input_arg_is_copied_alt>:
  20:   48 8b 45 08             mov    0x8(%rbp),%rax
  24:   48 83 c5 08             add    $0x8,%rbp
  28:   ff e0                   jmpq   *%rax
  2a:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

0000000000000030 <unmodified_input_arg_is_copied_alt2>:
  30:   48 8b 45 08             mov    0x8(%rbp),%rax
  34:   48 83 c5 08             add    $0x8,%rbp
  38:   ff e0                   jmpq   *%rax

Which is better than the code reference in c#14 and c#10 in each case.  This
was probably Kai's code to improve our indirect jump support in the backend.

We also still get the desired code for push_flag_into_local_var.   The only
issue left is the poor code for push_flag_into_global_reg_var.

Reply via email to