• サぺルOPM
    link
    fedilink
    Polski
    arrow-up
    1
    ·
    12 days ago

    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.

    • naur
      link
      fedilink
      arrow-up
      1
      ·
      12 days ago

      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.

      • サぺルOPM
        link
        fedilink
        Polski
        arrow-up
        1
        ·
        12 days ago

        Tylko automatyczne generowanie takich fragmentów jak widać się nie sprawdza. Lepsze wydaje się oznaczanie jaki fragment algorytmu wygenerować w różnych wersjach.