Pokud budu mít CPU s podporou 3DNow! a aplikaci toto využívající a jádro, které to nepodporuje, bude to fungovat? Pokud si vzpomínám dobře, Windows 3.11 nepodporovaly MMX. MMX využíval DivX codec. Pokud se používal jen v jednom procesu, bylo vše vpořádku. Pokud ale byly dva (řekněme kódování videa a přehrávání zárověň), tak obě aplikace zhavarovaly, protože si navzájem pošlapaly MMX registry, protože je jádro neumělo přepínat. Nebude to tady něco podobného?
Pominu-li to, že je otázka spíš hypotetická, tak:
- 3DNow sdílí registry s FPU87, takže pokud OS podporuje FPU87, tak automaticky podporuje i 3DNow. To byl jeden z hlavních cílů 3DNow, aby se nemusely upravovat OS.
- Teoreticky, Windows 3.11 neměly preemptivní multitasking a ABI tehdejších aplikací nepodporovalo uchovávání FPU87 registrů, takže ani na úrovni OS prakticky nebylo třeba FPU87 uchovávat. Snad jedině kontrolní registr by měl nějaký smysl (nastavení zaokrouhlování), ale ani tam nedává persistentní nastavení pro celý proces příliš smysl. ... prakticky bych řekl, že zachovávat stav FPU87 Windows 3.11 uměly.
OS musí podporovat přepínání x87 registrů (nezbytné pro přepnutí kontextu, pokud aplikace používají x87/MMX/3DNow!), jinak je to otevřený postranní kanál / budou kolabovat aplikace.
Windows 3.0 odstranilo podporu pro 8086 a vyžadovalo 286+ a běh v chráněném režimu. Aplikace běžely pak buď v p-mode nebo V86, takže už teoreticky mohly používat preemptivní multitasking, ale nedělaly to. Důvod, proč nedávalo smysl, aby se OS staral o přepínání kontextu v širším kontextu než obnovení SS:(E)SP, byl právě kooperativní multitasking. Má aplikace potřebu používat x87/MMX/3DNow? Tak ať si ho přepne. Kdyby tam byl preemptivní multitasking, musel by to nezbytně implementovat systém, protože aplikace pak nemá teoreticky jak zachytit, jestli neproběhlo během výpočtů přepnutí úloh, aniž by se o tom ujišťovalo před každou FPU instrukcí. Problém je v tom, že se musí zkontrolovat, jestli zrovna neprobíhá nějaká matematická operace a pokud ano, tak počkat na její dokončení a až pak přepnout na další úlohu, což chvíli trvá.
Jo bude to fungovat. Pořád tam máš MMX, které taky funguje. 3dNow bylo vlastně jen rozšíření MMX o pár 2xFloat32 operací.
Tady na rootu se z toho dělá strašná novinka, ale přitom se jen odstranil kód, který stejně nikdo nepoužíval (ani nekompiloval).
Jinak btw když se na ten odstraněný kód někdo podívá, tak zjistí, že se odstranil hlavně MMX kód, z 3dNow tam toho bylo minimum (a nepoužívalo se vůbec na FPU operace).
20. 12. 2021, 21:28 editováno autorem komentáře