Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Параметры инлайновых функций 
:(
    Опции темы
ТарасАтавин
Дата 6.9.2013, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Директива 
Код
inline
 означает встраивание тела функции по месту вместо её вызова. Соответственно инлайновые функции - это встраиваемые по месту использования функции. При наличии исходника такой функции проблемы нет, компилятор просто подставляет её текст и заменяет параметры, а уже потом генерит соотвествующий код. То есть 
Код
inline int summ(int a, int b)
{
 return a+b;
}
...
int x,y,z;
...
z=sum(x,y);
 до кодогенерации превращается в 
Код
inline int summ(int a, int b)
{
 return a+b;
}
...
int x,y,z;
...
z=x+y;
 и всёго делов. Но необходимо инлайновой сделать библиотечную писанную в опкодах не рекурсивную функцию с параметром. Как передавать параметры? Есть хоть какие то соглашения на этот счёт? Желательно, чтоб параметры-ссылки не были синтаксическими надстройками над указателями, но чтоб через них можно было возвращать данные. Может быть можно как то программно модифицировать код при встраивании и заменять адреса операндов?


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
_zorn_
Дата 6.9.2013, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(ТарасАтавин @  6.9.2013,  14:53 Найти цитируемый пост)
Но необходимо инлайновой сделать библиотечную писанную в опкодах

Писец у тебя каша в голове.
Для чего сделать ? Почему просто не вызвать ?

Хватит уже конструировать лисапед с квадратными колёсами...

Это сообщение отредактировал(а) _zorn_ - 6.9.2013, 07:01
PM MAIL   Вверх
tzirechnoy
Дата 8.9.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Никаких соглашэний на этот счёт нет. Так никто не делает в машынно-компилируемых языках как раз потому, что разработать в общем виде промежуточный формат библиотек, позволяющий столь высокий полиморфизм -- сложно.
PM MAIL   Вверх
ТарасАтавин
Дата 13.9.2013, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Ну ка где у меня хоть слово про полиморфизм?


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
ТарасАтавин
Дата 13.9.2013, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  8.9.2013,  13:30 Найти цитируемый пост)
Так никто не делает в машынно-компилируемых языках как раз потому, что разработать в общем виде промежуточный формат библиотек.
Да кто говорит о едином подходе? Есть же паскалевое соглашение о вызовах, stdcall и другие. Мне просто надо хоть что то, что можно будет взять за соглашение о вызовах инлайновых функций с запретом рекурсии всего лишь для конкретного компилятора.

Добавлено через 12 минут и 8 секунд
А можно оттолкнуться от PE с одной исполняемой секцией на каждую функцию, их и встраивать и забазировать адреса операндов на какие нибудь 0x40000000h и при каждом встраивании искать их в коде встраиваемой секции и исправлять на правильные адреса фактических операндов? Как система находит адреса при перебазировании PE файла?


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
_zorn_
Дата 13.9.2013, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Какое может быть соглашение о вызовах в инлайновых функциях ? Ты хоть их смысл понимаешь ? 
Инлайновая функция НЕ ВЫЗЫВАЕТСЯ, она встраивается. А какой код сгенерируется компилятором при встраивании совершенно не важно, главное чтобы регистры, используемые после ее "вызова" (встраивания) восстановил и стек выровнял.
PM MAIL   Вверх
ТарасАтавин
Дата 13.9.2013, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(_zorn_ @  13.9.2013,  06:28 Найти цитируемый пост)
Какое может быть соглашение о вызовах в инлайновых функциях ? Ты хоть их смысл понимаешь ? 
Понимаю. С точки зрения языка высокого уровня это вызов функции, а на низком уровне он заменяется встраиванием тела функции. Конечно, в данном случае говорить о соглашении именно о вызовах не корректно, так как в действительности вызов то как раз и исключается, я просто по привычке использовал максимально близкое известное мне понятие. Ну так как? Можно PE формат перебазировать при каждом встраивании? Или может лучше сочинить свой формат? С 64-х битными смещениями, секцией перечисления перебазирумых адресов и длинными именами секций вместо 8-ми байтных? Что будет проще: разобраться в PE, или сочинить что то своё?

Добавлено @ 07:36
Цитата(_zorn_ @  13.9.2013,  06:28 Найти цитируемый пост)
А какой код сгенерируется компилятором при встраивании совершенно не важно, главное чтобы регистры, используемые после ее "вызова" (встраивания) восстановил и стек выровнял. 
Важно. Код должен соответствовать задаче. Желательно всё таки не заворачивать во все ссылки по указателю, чтоб не притормаживать на косвенном доступе. Это остаётся на крайний случай: предать параметры в обратном через стек, через него же вернуть значение, а параметры ссылочных типов передать по адресам. В случае вызываемых функций другого способа реализовать изменяемые параметры нет, поэтому там в ссылки будут завёрнуты указатели. А для инлайновых желательно всё таки от этого избавиться, так как именно ради прямого обращения сразу к данным вызывающей подпрограммы инлайн и задуман.


Это сообщение отредактировал(а) ТарасАтавин - 13.9.2013, 07:40


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1548 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.