Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jul 17, 2019 3:45 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 16 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Sat May 12, 2012 10:57 pm 
Offline
User avatar

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


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


Top
   
PostPosted: Sat May 12, 2012 11:08 pm 
Offline
User avatar

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


Top
   
PostPosted: Sun May 13, 2012 1:46 am 
Насколько я знаю Serge делал какие то доработки относительно сохранения MMX/SSE при переключении задач.


Top
   
PostPosted: Sun May 13, 2012 2:00 pm 
Offline
Kernel Developer

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


Top
   
PostPosted: Sun May 13, 2012 4:20 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 794
Я так думаю надо еще отладочный вызов отдельно для FPU, отдельно для MMX+SSE, отдельно для AVX? Если для FPU более-менее понятно, то для MMX/SSE/AVX то же самое делать?


Top
   
PostPosted: Sun May 13, 2012 9:29 pm 
Offline
Kernel Developer

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


Top
   
PostPosted: Mon May 14, 2012 4:11 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Как вариант могу предложить 69.10 - получить состояние регистров FPU/SSE отлаживаемого потока.

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

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

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


Top
   
PostPosted: Mon May 14, 2012 5:14 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1619
Вроде можно добавить эту функциональность в 69.1/69.2, разве нет? Там выделен один из параметров под размер контекста.

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


Top
   
PostPosted: Mon May 14, 2012 6:35 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
CleverMouse
Это нарушает обратную совместимость.


Top
   
PostPosted: Mon May 14, 2012 6:40 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1619
Serge, разве что новый клиент не будет работать со старым ядром, но так в любом случае будет.

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


Top
   
PostPosted: Mon May 14, 2012 7:08 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
В принципе можно. Просто я обожаю обратную совместимость. Но область сохранения FPU обязательно надо выравнивать.


Top
   
PostPosted: Mon May 14, 2012 7:22 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 794
Совместимость, так совместимость. Будем пилить 69.10


Top
   
PostPosted: Mon May 14, 2012 7:23 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1619
Так есть же совместимость. Старый клиент просто не заметит изменений в 69.1/69.2, потому что не знает, что их можно вызывать с edx != sizeof(контекст cpu).

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


Top
   
PostPosted: Mon May 14, 2012 7:57 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Согласен, согласен на .1 .2
Убедили :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 16 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited