Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Ассемблерные вставки в GCC (комментарии) (3 стр)

Ассемблерные вставки в GCC (комментарии) (3 стр)

Страницы: 1 2 3
FordPerfectПостоялецwww30 апр. 201822:33#30
foxes
Один пример приводится в статье:
https://bootlin.com/blog/how-we-found-that-the-linux-nios2-memset… on-had-a-bug/

Ну и я вообще больше не о самом асме, а об интеграции его с кодом, который снаружи.
Если делать "naked функции", то там взаимодействия меньше, но нужно быть уверенным что оно вызовется ровно с тем calling conventions, которого ты ожидаешь.

Если речь о самом асме - ну бывает изредка мискомпиляция. Ну и иногда gas вместо детектирования ошибки программиста - генерирует хрень.

foxesПостоялецwww30 апр. 201822:44#31
FordPerfect
> Один пример приводится в статье:
Ну это вообще особенности процессора от альтеры. Ну и в остальном вопрос опытности. Есть еще возможность писать чисто асм и его линковать в код с++, это подходит для x64, так как там вставки замочили, по сути тот же naked. А вот на эльбрусе его нету - беда печаль.

Правка: 30 апр. 2018 22:47

FordPerfectПостоялецwww30 апр. 201822:59#32
foxes
Больше примеров:
https://godbolt.org/g/TiMmpy

Оба из статьи, кстати.

foxesПостоялецwww30 апр. 201823:18#33
FordPerfect
А дошло вычисления посередине инициализации данных, но это треш с++ из за инлайна. Я тоже могу привести пример без всякого asm где баланс стека восстановление/сохранение ломается.
В таком виде асм вставками лучше не пользоваться. Naked и через динамический указатель - для совместимости с разными платформами, ну в крайнем случае not_inline организовать.

Во, с этим атрибутом сразу все на свои места встает "__attribute__((noinline))". В общем с ассемблером в обоих случаях все как раз впоряде, как написано так и работает.

Правка: 1 мая 2018 0:06

Страницы: 1 2 3

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр