Он использует инструкцию CPUID, чтобы получить марку процессора, семейство, номер модели и степпинг. Это легкая часть. Зная, что делать с номером модели является сложной частью. Я не смог найти какую-либо таблицу семьи, степпинг для процессоров. Я должен был идти различными случайными сообщениями, которые я видел.
Вот что я закончил с:
Код:
// Нам нужен Intel Nehalem или AMD K10 или лучше 128bit SSE2
// Nehalem = i3 / i5 / i7 и некоторые Xeon
// К10 = Opterons с 4-мя или более ядер, Phenom, Phenom II, Athlon II
// Intel Core i5 семейство 6, модель 26 или 30
// Intel Core i7 семья 6, модель 26 или 30
// Intel Core i3 семейство 6, модель 37
// семейство AMD Phenom 16, модель 10
BOOL fUseSSE2 = ((FINTEL && nFamily * 10000 + nModel >= 60026) ||
(FAMD && nFamily * 10000 + nModel >= 160010));
// Nehalem = i3 / i5 / i7 и некоторые Xeon
// К10 = Opterons с 4-мя или более ядер, Phenom, Phenom II, Athlon II
// Intel Core i5 семейство 6, модель 26 или 30
// Intel Core i7 семья 6, модель 26 или 30
// Intel Core i3 семейство 6, модель 37
// семейство AMD Phenom 16, модель 10
BOOL fUseSSE2 = ((FINTEL && nFamily * 10000 + nModel >= 60026) ||
(FAMD && nFamily * 10000 + nModel >= 160010));
Я видел некоторые спорадические непоследовательные номера модели для процессоров AMD, так что я не уверен, если это будет ловить все, способное AMDS.
Если это не так, вы можете изменить его с помощью -4way или -4way = 0.
Он печатает то, что он находит в debug.log. Поиск по CPUID.
Это возможно только тогда, когда построен с GCC.