Dies steht in Zusammenhang mit this question.Was sind Kodierungskonventionen für die Verwendung von Gleitkomma in Linux-Gerätetreibern?
Ich bin kein Experte für Linux-Gerätetreiber oder Kernel-Module, aber ich habe gelesen "Linux Device Drivers" [O'Reilly] von Rubin & Corbet und eine Reihe von Online-Quellen, aber ich habe nicht konnte zu diesem speziellen Thema noch nichts finden.
Wann darf ein Kernel oder Treibermodul Gleitkommaregister verwenden?
Wenn ja, wer ist verantwortlich für die Speicherung und Wiederherstellung ihrer Inhalte?
(Angenommen x86-64-Architektur)
Wenn ich richtig verstehe, wann immer ein KM ausgeführt wird, wird eine Hardware-Kontext (oder Hardware-Thread oder eingestellt registrieren - was auch immer Sie es nennen wollen) verwenden, die vorbelegt wurde von einem Anwendungs-Thread. Wenn Sie Ihr KM in c schreiben, stellt der Compiler korrekt sicher, dass die Allzweckregister ordnungsgemäß gespeichert und wiederhergestellt werden (ähnlich wie in einer Anwendung), aber dies geschieht nicht automatisch bei Gleitkommaregistern. Viele KMs können nicht einmal davon ausgehen, dass der Prozessor über Fließkomma-Funktionen verfügt.
Bin ich richtig, wenn ich rate, dass ein KM, der Gleitkommazahlen verwenden will, den Gleitkommazustand sorgfältig speichern und wiederherstellen muss? Gibt es dafür Standard-Kernel-Funktionen?
Sind die Kodierungskonventionen dafür irgendwo ausgeschrieben?
Sind sie unterschiedlich für SMP-nicht SMP-Treiber?
Sind sie für ältere nicht preemptive Kernel und neuere preemptive Kernel anders?