Bug 286769 - replace __intel_new_memcpy with valgrind's memcpy
Summary: replace __intel_new_memcpy with valgrind's memcpy
Status: REPORTED
Alias: None
Product: valgrind
Classification: Developer tools
Component: memcheck (other bugs)
Version First Reported In: 3.7 SVN
Platform: Unlisted Binaries Linux
: NOR normal
Target Milestone: ---
Assignee: Julian Seward
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-16 10:20 UTC by Nuno Lopes
Modified: 2011-12-27 17:23 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nuno Lopes 2011-11-16 10:20:31 UTC
Version:           3.7 SVN
OS:                Linux

Memcheck should replace __intel_new_memcpy() with its own memcpy (./memcheck/mc_replace_strmem.c).

Reproducible: Didn't try

Steps to Reproduce:
.


Expected Results:  
.
Comment 1 Florian Krohm 2011-12-24 21:50:05 UTC
Can you get a list of all such functions? I'm sure there will be others for string related functions, memset, and so on.
Comment 2 Nuno Lopes 2011-12-26 16:20:58 UTC
Here is the list I could extract from a few libraries compiled with ICC:

_intel_atan_fixup
__intel_cpu_dispatch_fail
__intel_cpu_indicator
__intel_cpu_indicator_init
__intel_dgcopyan_em64t
__intel_dgcopyat_em64t
__intel_dgcopybn_psc
__intel_dgcopybt_psc
__intel_dinner_em64t
__intel_dinnerz_roll_em64t
_intel_fast_memcmp
_intel_fast_memcpy
_intel_fast_memcpy.A
_intel_fast_memcpy.J
_intel_fast_memset
_intel_fast_memset.A
_intel_fast_memset.J
__intel_get_memcpy_largest_cachelinesize
__intel_get_memcpy_largest_cache_size
__intel_get_mem_ops_method
__intel_get_new_mem_ops_cpuid
__intel_get_new_mem_ops_cpuid4
__intel_init_mem_ops_method
__intel_memcpy_largest_cachelinesize
__intel_memcpy_largest_cache_size
__intel_memcpy_mem_ops_method
__intel_new_memcmp
__intel_new_memcpy
__intel_new_memmove
__intel_new_memset
__intel_new_proc_init
__intel_new_proc_init.A
__intel_new_proc_init_B
__intel_new_proc_init_B.A
__intel_new_proc_init_B.J
__intel_new_proc_init_B.K
__intel_new_proc_init_B.L
__intel_new_proc_init_H
__intel_new_proc_init.H
__intel_new_proc_init_H.A
__intel_new_proc_init_H.P
__intel_new_proc_init_N
__intel_new_proc_init_N.A
__intel_new_proc_init_N.J
__intel_new_proc_init_N.K
__intel_new_proc_init_N.L
__intel_new_proc_init_P
__intel_new_proc_init_P.A
__intel_new_proc_init_P.L
__intel_new_proc_init_S
__intel_new_proc_init_S.A
__intel_new_proc_init_S.N
__intel_new_proc_init_T
__intel_new_proc_init_T.A
__intel_new_proc_init_T.M
__intel_new_strlen
_intel_order_fixup
__intel_override_mem_ops_method
_intel_pow_fixup
__intel_proc_init
__intel_proc_init.A
__intel_proc_init_B
__intel_proc_init_B.A
__intel_proc_init_B.J
__intel_proc_init_B.K
__intel_proc_init_B.L
__intel_proc_init.H
__intel_proc_init_N
__intel_proc_init_N.A
__intel_proc_init_N.J
__intel_proc_init_N.K
__intel_proc_init_N.L
__intel_proc_init_P
__intel_proc_init_P.A
__intel_proc_init_P.L
__intel_proc_init_T
__intel_proc_init_T.A
__intel_proc_init_T.M
__intel_rtc_uninit_use
__intel_security_check_cookie
__intel_security_cookie
__intel_security_init_cookie
__intel_set_memcpy_largest_cachelinesize
__intel_set_memcpy_largest_cache_size
__intel_VEC_memcpy
__intel_VEC_memset
__intel_VEC_memzero
Comment 3 Florian Krohm 2011-12-26 17:23:12 UTC
(In reply to comment #2)
> Here is the list I could extract from a few libraries compiled with ICC:

From the list there are interesting:

_intel_fast_memcmp
_intel_fast_memcpy
_intel_fast_memset
__intel_new_memcmp
__intel_new_memcpy
__intel_new_memmove
__intel_new_memset
__intel_new_strlen
__intel_VEC_memcpy
__intel_VEC_memset
__intel_VEC_memzero

It is curious, that there is only one function to deal with strings..

What do you know about the __intel_VEC_... functions? E.g. What is the
difference between __intel_new_memcpy and __intel_VEC_memcpy?
Perhaps browsing header files sheds some light on how they are used.
Comment 4 Nuno Lopes 2011-12-27 17:23:38 UTC
I have no clue. I'm just linking with a library compiled with ICC.
The assembly of the intel_VEC_* functions is pretty confusing. They use the rdtsc instruction multiple times, in addition to what you would expect (e.g., movdqa and movntdq).