------- Comment #1 from pluto at agmk dot net  2007-07-05 15:22 -------
it would be nice to see bswap variants instead of mov,mov,mov,...

<reverse(unsigned int&)>:
    mov    (%rdi),%eax
    bswap  %eax
    mov    %eax,(%rdi)
    retq

<reverse(unsigned long&)>:
    mov    (%rdi),%rax
    bswap  %rax
    mov    %rax,(%rdi)
    retq

and one more thing. the 4.2 produces better code than 4.3:

4.2:

void reverse(T&) [with T = size_t] (t)
{
  unsigned char & __b.235;
  unsigned char & __b.234;
  unsigned char & __b.233;
  unsigned char __tmp.232;
  unsigned char __tmp.231;
  unsigned char __tmp.230;
  unsigned char * bytes.226;
  unsigned char * bytes.225;
  unsigned char * bytes.224;
  unsigned char & __b;
  unsigned char __tmp;
  unsigned char * bytes;
<bb 2>:
  bytes = (unsigned char *) t;
  __b.233 = bytes + 8B - 1B;
  __tmp.230 = *bytes;
  *bytes = *__b.233;
  *__b.233 = __tmp.230;
  bytes.224 = bytes + 1B;
  __b = __b.233 - 1B;
  __tmp = *bytes.224;
  *bytes.224 = *__b;
  *__b = __tmp;
  bytes.225 = bytes.224 + 1B;
  __b.235 = __b - 1B;
  __tmp.232 = *bytes.225;
  *bytes.225 = *__b.235;
  *__b.235 = __tmp.232;
  bytes.226 = bytes.225 + 1B;
  __b.234 = __b.235 - 1B;
  __tmp.231 = *bytes.226;
  *bytes.226 = *__b.234;
  *__b.234 = __tmp.231;
  return;
}

4.3:

_ForwardIterator2 std::swap_ranges(_ForwardIterator1,
_ForwardIterator1, _ForwardIterator2)
[with _ForwardIterator1 = unsigned char*,
_ForwardIterator2 = std::reverse_iterator<unsigned char*>]
(__first1, __last1, __first2)
{
  long unsigned int D.25754;
  struct reverse_iterator D.25507;
<bb 2>:
  if (__first1 != __last1)
    goto <bb 3>;
  else
    goto <bb 4>;
<bb 3>:
  D.25507.current = __first2->current;
  iter_swap (__first1, &D.25507);
  D.25754 = (long unsigned int) __first1 + 1;
  __first1 = (unsigned char *) D.25754;
  __first2->current = __first2->current + 0xffffffffffffffffffffffffffffffff;
  if (__first1 != __last1)
    goto <bb 3>;
  else
    goto <bb 4>;
<bb 4>:
  <retval>->current = __first2->current;
  return <retval>;
}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32605

Reply via email to