W tym przypadku podmiana dzieje się podczas kompilacji. Po przekazaniu flagi do kompilatora rozkaz SSE jest inline’owany w miejscu wywołania i call znika całkowicie.
Nawiasem mówiąc, istnieje taka sztuczka optymalizacyjna do podmiany w runtime funkcji na wersję specjalizowaną pod konkretny procesor.
Wywołania funkcji są robione poprzez wskaźnik, który początkowo wskazuje na kawałek kodu który wykrywa procesor i patchuje ten wskaźnik (żeby kolejne wywołania były szybsze).
Tak samo działa też lazy binding funkcji importowanych z ELFowych bibliotek dynamicznych.
Tylko automatyczne generowanie takich fragmentów jak widać się nie sprawdza. Lepsze wydaje się oznaczanie jaki fragment algorytmu wygenerować w różnych wersjach.
Wiem, tylko myślałem, że podmieniają adres funkcji w zależności od obsługiwanych instrukcji. Skoro to znika po wymuszeniu obsługi tych instrukcji.
W tym przypadku podmiana dzieje się podczas kompilacji. Po przekazaniu flagi do kompilatora rozkaz SSE jest inline’owany w miejscu wywołania i call znika całkowicie.
Nawiasem mówiąc, istnieje taka sztuczka optymalizacyjna do podmiany w runtime funkcji na wersję specjalizowaną pod konkretny procesor.
Wywołania funkcji są robione poprzez wskaźnik, który początkowo wskazuje na kawałek kodu który wykrywa procesor i patchuje ten wskaźnik (żeby kolejne wywołania były szybsze).
Tak samo działa też lazy binding funkcji importowanych z ELFowych bibliotek dynamicznych.
Tylko automatyczne generowanie takich fragmentów jak widać się nie sprawdza. Lepsze wydaje się oznaczanie jaki fragment algorytmu wygenerować w różnych wersjach.