GCC ifunc!
Par eau le mercredi 15 septembre 2010, 10:36 - geeking - Lien permanent
Pendant ma petite pause lecture du matin, je suis tombé sur ce post concernant les nouvelles updates de la GNU toolchain, et en particulier un nouvel attribut: "ifunc"
Ca permet de définir dynamiquement une fonction qui va "résoudre" vers la fonction de votre choix en fonction de critères que vous pouvez définir, le monsieur @ http://nickclifton.livejournal.com/6612.html donne un exemple très simple et très clair (plus clair que mes explications foireuses) que je reproduirais ici :
void *slow_memcpy (void *dst, const void *src, size_t len)
{
char *d = dst; char *s = src;
while (len--)
*d++ = *s++;
return dst;
}
void *fast_memcpy (void *dst, const void *src, size_t len)
{
__asm("foo %0 %1 %2" : "=m" (dst) : "m" (src), "r" (len) : memory);
return dst;
}
static void (* resolve_memcpy (void)) (void)
{
return __cpu_has_foo () ? fast_memcpy : slow_memcpy;
}
void *memcpy (void *, const void *, size_t) __attribute__ ((ifunc ("resolve_memcpy")));
Les details chez http://nickclifton.livejournal.com/6612.html
