Nie jest to obsługiwane przez format Mach-O używany przez system Mac OS X. Format umożliwia tworzenie plików binarnych dla różnych architektur. Istnieje pole podtypu, ale są tylko wartości zdefiniowane dla różnych generacji procesorów, a nie ich możliwości.
Istnieje kilka sposobów obejścia tego problemu. Jednym z nich byłoby posiadanie zarówno SSE4.2, jak i kodu dla starszych procesorów wbudowanych w ten sam plik binarny, używając różnych nazw funkcji. Twój kod określa, czy obsługiwany jest SSE4.2, a następnie wywołaj odpowiednią funkcję.
Inną opcją byłoby zbudowanie dwóch bibliotek, jednej z SSE4.2 i jednej bez, i wysłania obu z nich w pakiecie aplikacji, ale bez linków do nich. Kiedy zostanie załadowany po raz pierwszy, Twój kod określa, czy obsługiwana jest wersja SSE4.2, a następnie ładuje odpowiednią bibliotekę.
Używając pierwszej metody, nie musisz się martwić o załadowanie biblioteki i połączenie wszystkich funkcji, ale zawsze będziesz ładował dodatkowy kod, który nie zostanie wykonany, i będziesz musiał sprawdzić zmienną przed każdym tych wywołań funkcji. Za pomocą drugiej metody można po prostu wywoływać funkcje bez sprawdzania czegokolwiek za każdym razem, ale ładowanie biblioteki i łączenie wszystkich funkcji jest więcej pracy niż po prostu porównywanie zmiennej za każdym razem.
Wszystko, co musisz zrobić, to: 1) Wykryć zestaw instrukcji. 2) Rozgałęz się do wersji, którą chcesz. – Mysticial
[Moja odpowiedź tutaj pokazuje, jak wykryć zestaw instrukcji.] (Http://stackoverflow.com/a/7495023/922184) Własność '__cpuid()' jest specyficzna dla MSVC. W GCC można uzyskać do niego dostęp za pomocą wbudowanego zestawu. Nie jestem pewien, co używasz, ale powinien być sposób, aby uzyskać do niego dostęp. – Mysticial
Wolę nie zmieniać plików kodu źródłowego, ponieważ niektóre linie, które nie działają na starych procesorach, pochodzą z zewnętrznych projektów open source. –