Farid Zaripov wrote:
-----Original Message-----
From: Martin Sebor [mailto:[EMAIL PROTECTED] On Behalf Of Martin Sebor
Sent: Wednesday, April 02, 2008 8:38 PM
To: [email protected]
Subject: Re: svn commit: r643964 - /stdcxx/trunk/include/rw/_traits.h

Farid Zaripov wrote:
  From ICC help:
I've read the Intel C++ manuals. They don't mention __builtin_memcpy either but the compiler seems to understand it just fine. In fact, the latest compiler understands all the gcc intrinsics with the exception of __builtin_memmove. So perhaps disabling just that one builtin would be enough.

  Ok, but why we need to use __builtin_xxx() functions instead of
corresponding std::xxx()
functions while both set of these functions are intrinsics on icc? :)

That's a good question. Intel C++ 10 generates different code
for each, so we should probably do some benchmarking before we
switch from one to the other.

For this program:

  #include <string.h>

  void foo (char *s, size_t n) { memset (s, 0, n); }
  void bar (char *s, size_t n) { __builtin_memset (s, 0, n); }

Intel C++ 10.1 generates this code at -O2:

foo:
        pushl     8(%esp)
        pushl     $0
        pushl     12(%esp)
        call      _intel_fast_memset
        addl      $12, %esp
        ret
bar:
        pushl     %edi
        pushl     %esi
        xorl      %eax, %eax
        movl      12(%esp), %edi
        movl      16(%esp), %ecx
        andl      $65535, %eax
        movb      %al, %ah
        movl      %ecx, %esi
        movl      %eax, %edx
        shll      $16, %eax
        shrl      $2, %ecx
        orl       %edx, %eax
        rep
        stosl
        movl      %esi, %ecx
        andl      $3, %ecx
        rep
        stosb
        popl      %esi
        popl      %edi
        ret

Martin

Reply via email to