Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт апр 28, 2017 7:35 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 16 сообщений ]  На страницу 1 2 След.
Автор Сообщение
СообщениеДобавлено: Сб май 12, 2012 10:57 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 786
Работая над кое-какими SSE программами решил добавить поддержку отображения этих регистров в MTDBG
В отладчик поддержку добавил, но нужна поддержка со стороны ядра.
Изучив механизм сохранения контекста в ядре (debug.inc) я узнал, что контекст берется из команды pushad в конце
каждого обработчика прерывания. Надо сохранять и MMX регистры, к примеру. Ставить сохранение MMX регистров в конце каждого прерывания мне кажется не очень красиво. Есть какие-либо идеи, как лучше оганизовать сохранение MMX/SSE/AVX регистров?


Вернуться к началу
СообщениеДобавлено: Сб май 12, 2012 11:04 pm 
А собственно зачем сохранять? Я понимаю, когда обработчик прерывания использует эти регистры, но если он не использует, то зачем нужен дополнительный перевод электрической энергии в тепло?


Вернуться к началу
   
СообщениеДобавлено: Сб май 12, 2012 11:08 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 786
Вопрос в том, как достоверно узнать, сохраняет ли обработчик их, или нет? С другой стороны, возможно добавить сохранение регистров в самом debug.inc при сохранении контекста из стека


Вернуться к началу
СообщениеДобавлено: Вс май 13, 2012 1:46 am 
Насколько я знаю Serge делал какие то доработки относительно сохранения MMX/SSE при переключении задач.


Вернуться к началу
   
СообщениеДобавлено: Вс май 13, 2012 2:00 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Контекст сохраняется в pl0 стеке потока. В моём понимании надо сделать ещё один отладочный вызов для запроса контекста FPU. В вызове сделать проверку fpu_owner. Если отлаживаемый поток не является fpu_owner скопировать контекст из pl0 стека.
Если является сделать
а) clts, fnsave в наш буфер и снова поставить флаг ts
б)команда fpu чтобы ядро сохранило контекст и так-же копировать его из pl0 стека.


Вернуться к началу
СообщениеДобавлено: Вс май 13, 2012 4:20 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 786
Я так думаю надо еще отладочный вызов отдельно для FPU, отдельно для MMX+SSE, отдельно для AVX? Если для FPU более-менее понятно, то для MMX/SSE/AVX то же самое делать?


Вернуться к началу
СообщениеДобавлено: Вс май 13, 2012 9:29 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
XVilka
Регистры MMX проецируются на регистры FPU и область сохранения у них общая. Поддержки AVX нет, так что пока хватит одного вызова. Размер области сохранения для fxsave 512 байт. Если SSE нет, контекст сохраняетя fnsave и используется только часть области.


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 4:11 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Как вариант могу предложить 69.10 - получить состояние регистров FPU/SSE отлаживаемого потока.

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

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

Реализация:
проверяем fpu_owner, если это отлаживаемый поток выполняем команду fpu для переключения контекста, копируем контекст.


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 5:14 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
Вроде можно добавить эту функциональность в 69.1/69.2, разве нет? Там выделен один из параметров под размер контекста.

_________________
Сделаем мир лучше!


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 6:35 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
CleverMouse
Это нарушает обратную совместимость.


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 6:40 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
Serge, разве что новый клиент не будет работать со старым ядром, но так в любом случае будет.

_________________
Сделаем мир лучше!


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 7:08 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
В принципе можно. Просто я обожаю обратную совместимость. Но область сохранения FPU обязательно надо выравнивать.


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 7:22 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 786
Совместимость, так совместимость. Будем пилить 69.10


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 7:23 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
Так есть же совместимость. Старый клиент просто не заметит изменений в 69.1/69.2, потому что не знает, что их можно вызывать с edx != sizeof(контекст cpu).

_________________
Сделаем мир лучше!


Вернуться к началу
СообщениеДобавлено: Пн май 14, 2012 7:57 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Согласен, согласен на .1 .2
Убедили :)


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 16 сообщений ]  На страницу 1 2 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB