Сохранение FPU/SSE регистров в контексте.

Internal structure and you change requests/suggestions
  • А собственно зачем сохранять? Я понимаю, когда обработчик прерывания использует эти регистры, но если он не использует, то зачем нужен дополнительный перевод электрической энергии в тепло?
  • Вопрос в том, как достоверно узнать, сохраняет ли обработчик их, или нет? С другой стороны, возможно добавить сохранение регистров в самом debug.inc при сохранении контекста из стека
  • Насколько я знаю Serge делал какие то доработки относительно сохранения MMX/SSE при переключении задач.
  • Контекст сохраняется в pl0 стеке потока. В моём понимании надо сделать ещё один отладочный вызов для запроса контекста FPU. В вызове сделать проверку fpu_owner. Если отлаживаемый поток не является fpu_owner скопировать контекст из pl0 стека.
    Если является сделать
    а) clts, fnsave в наш буфер и снова поставить флаг ts
    б)команда fpu чтобы ядро сохранило контекст и так-же копировать его из pl0 стека.
  • Я так думаю надо еще отладочный вызов отдельно для FPU, отдельно для MMX+SSE, отдельно для AVX? Если для FPU более-менее понятно, то для MMX/SSE/AVX то же самое делать?
  • XVilka
    Регистры MMX проецируются на регистры FPU и область сохранения у них общая. Поддержки AVX нет, так что пока хватит одного вызова. Размер области сохранения для fxsave 512 байт. Если SSE нет, контекст сохраняетя fnsave и используется только часть области.
  • Как вариант могу предложить 69.10 - получить состояние регистров FPU/SSE отлаживаемого потока.

    Параметры:
    eax = 69 - номер функции
    ebx = 10d - номер подфункции
    ecx = идентификатор потока
    edx = указатель на область сохранения контекста размером 512 байт
    область должна быть выравнена на границу параграфа (16 байт)

    Возвращаемое значение:
    Некоторые флаги в регистре eax

    Реализация:
    проверяем fpu_owner, если это отлаживаемый поток выполняем команду fpu для переключения контекста, копируем контекст.
  • Вроде можно добавить эту функциональность в 69.1/69.2, разве нет? Там выделен один из параметров под размер контекста.
    Сделаем мир лучше!
  • CleverMouse
    Это нарушает обратную совместимость.
  • Serge, разве что новый клиент не будет работать со старым ядром, но так в любом случае будет.
    Сделаем мир лучше!
  • В принципе можно. Просто я обожаю обратную совместимость. Но область сохранения FPU обязательно надо выравнивать.
  • Совместимость, так совместимость. Будем пилить 69.10
  • Так есть же совместимость. Старый клиент просто не заметит изменений в 69.1/69.2, потому что не знает, что их можно вызывать с edx != sizeof(контекст cpu).
    Сделаем мир лучше!
  • Согласен, согласен на .1 .2
    Убедили :)
  • Who is online

    Users browsing this forum: No registered users and 8 guests