OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 18:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: компилятор CP2 и регистры ESI, EDI
СообщениеДобавлено: Воскресенье, 05 Март, 2023 13:21 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
кто-нибудь знает, зачем CP2 сохраняет и восстанавливает ESI и EDI во всех экспортированых процедурах? в смысле: они же, вроде бы, внутри самого компилятора не имеют никакого особого значения.

я так понимаю, это для X86 ABI, где EBX, ESI и EDI являются call-preserved. но в самом CP2 только EBX (вроде бы) имеет особое значение, и то только для вложеных функций. не есть ли смысл слелать специальный флаг `[callback]` (который вроде бы есть, но делает не совсем то сейчас), и оставить такие сохранения только если он установлен?

идея такая, что помечать как `[callback]` надо процедуры, которые передаются во внешние библиотеки как колбэки.

кстати, для `[ccall]` такое сейчас не делается, а должно: они-то как раз могут быть использованы как колбэки без экспорта. по-моему, это баг. надо починить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: компилятор CP2 и регистры ESI, EDI
СообщениеДобавлено: Воскресенье, 05 Март, 2023 14:40 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
дополню, что я сделал вышеописаное в Lament Configuration. затаив дыхание ожидаю рандомных падений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: компилятор CP2 и регистры ESI, EDI
СообщениеДобавлено: Воскресенье, 05 Март, 2023 16:27 

Зарегистрирован: Суббота, 04 Май, 2019 10:21
Сообщения: 29
According to the x86 ABI, EBX, ESI, EDI, and EBP are callee-save registers and EAX, ECX and EDX are caller-save registers.
Since EBX, ESI, EDI, and EBP are callee-save registers, functions have to restore the values to the original for any of those they modify, before returning.

In BB, a public procedure may be exported by a dll that can be called by other languages, so it is necessary to follow this convention.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: компилятор CP2 и регистры ESI, EDI
СообщениеДобавлено: Воскресенье, 05 Март, 2023 18:26 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
luowy писал(а):
In BB, a public procedure may be exported by a dll that can be called by other languages, so it is necessary to follow this convention.
hm. that's someting i didn't thought about (linking BlackBox as a dynamic library). still, i believe that such exported procedures should be explicitly marked as `[callback]` or `[ccall]`, and for such procedures the compiler will generate save/restore code. so it's a matter of placing the right calling convention at the right place — again, something the programmer should do anyway. there are no checks if calling conventions are right (because it is impossible), so i'm willing to accept this tradeoff for dynamic exports too.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: компилятор CP2 и регистры ESI, EDI
СообщениеДобавлено: Четверг, 23 Март, 2023 09:35 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
как выяснилось после анализа — не сохранять ESI и EDI в экспортированых процедурах нельзя: кодоген считает, что они сохраняются, и после вызова экспортированой процедуры не изменились. исправлять кодоген в этом плане можно, но я не хочу пока (время не пришло), поэтому просто вернул всем экспортированым процедурам обратно флажок callback. я потом это переделаю, но пока пусть всё будет как было.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB