Bug 3342

Summary: Wrong CPU capabilities detection
Product: Sisyphus Reporter: Sir Raorn <raorn>
Component: libSDLAssignee: Anton Farygin <rider>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: blocker    
Priority: P1 CC: mike
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
"Заплатка" для корректного определения capabilities (works for me, как говорится) none

Description Sir Raorn 2003-12-03 15:41:32 MSK
Неправильно определяются возможности процессора, в частности поддержка 3DNow!,
что приводит к падениям по SIGILL на других процессорах.

В libSDL есть функция Hermes_X86_CPU(), возвращающая значение регистра EDX после
выполнения команды cpuid с EAX=1, наличие 3DNow! подразумевается, если
установлен старший бит (0x80000000).

Однако это не так. Поддержка 3DNow! определяется проверкой старшего бита
(0x80000000) в EDX после выполнения команды cpuid с EAX=0x80000001 на
процессорах, поддерживающих это.
Comment 1 Alexander Bokovoy 2003-12-03 16:04:27 MSK
По-хорошему, для целей дистрибутива нужно вообще выкинуть эти самописные
определения из libSDL и использовать то, что возвращает ядро в /proc/cpu. Да,
этот патч будет не принят в libSDL, но ядро у нас гарантированно более корректно
определяет возможности процессора, чем libSDL.
Comment 2 Anton Farygin 2003-12-03 16:24:27 MSK
да. Более того - у меня есть код (C/C++), который корректно определяет поддержку
MMX/SSE в CPU.

Можно его вытащить в библиотечку и слинковать с libSDL.
а можно это делать и через proc.

В общем - займусь на следующей неделе... может быть раньше.
Comment 3 Sir Raorn 2003-12-03 16:33:31 MSK
Created attachment 318 [details]
"Заплатка" для корректного определения capabilities (works for me, как говорится)
Comment 4 Anton Farygin 2003-12-15 13:17:55 MSK
fixed (SDL-1.2.6-alt3)

патч сработал и проверен.

Просьба проверить на машинах с AMD процессором ;-)