|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.09.2016, 18:27 | #11 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Человек_Борща, вот написал я сейчас
Код:
___________________________________ ______________________ А вот почему нельзя сделать inline с асмом я всё равно не понимаю. Ну вот пишу я, например: Код:
Код:
Код:
Хорошо, давайте усложним процедуру, добавим параметры: Код:
Код:
Код:
Если я сделаю в Sum какую-то недопустимую операцию, например, изменю ebx, esi, edi или ebp (без push-pop), то будет ли эта функция inline или вызываться через call - разницы нет, всё равно будет нарушение. А если не буду изменять, то ничего плохого не произойдёт ни в том случае, ни в другом... И я так и не понял: этот запрет с 2005 или позже появился?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
Последний раз редактировалось 7in; 28.09.2016 в 18:44. |
28.09.2016, 19:02 | #12 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
в первом примере N-скорее всего итак уже лежит в eax(fastcall). так же многие переменные могут лежать в регистрах, вы же в асме этого не учитываете. компиляция таких вещей станет сложнее в разы. Цитата:
а причем тут стандарт языка С++ я вообще не понял, учитывая что это фича своего компилятора, а не итогового бинарника. и да, можете указать где в стандарте С++ явный запрет на реализацию компиляторами такого инлайна? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 28.09.2016 в 19:05. |
||
28.09.2016, 19:14 | #13 | ||
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Цитата:
(Хотя Pavia говорит, что "Вначале код переводится в IR-ассемблер, а позже оптимизируется"). Цитата:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
||
28.09.2016, 19:19 | #14 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
28.09.2016, 20:00 | #15 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Да но за это должен отвечать программист, а не компилятор вы так не думаете?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
28.09.2016, 20:14 | #16 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
ибо такое скомпилируется, но вот отладить где ошибка не выйдет толком. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
28.09.2016, 20:19 | #17 | |||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Есть разные уровни оптимизации O1, O2, O3. Цитата:
Речь шла про то, что до внедрения в Delphi кодогенератора LLVM не было оптимизации O3 при внедрении формально она появилась, но в самом LLVM его не было да и много чего не было. Потом LLVM сильно изменилась. А вот странные запреты остались. На тот момент они были актуальными с точки зрения бизнеса. Дешевле было запретить и купить готовый компонент чем сделать свой с бекджеком и девшками. Цитата:
Но оптимизаторы всё ещё глупее человека, они могут и ошибаться.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 28.09.2016 в 20:29. |
|||
29.09.2016, 08:36 | #18 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Да как же не запрещают, когда при компиляции inline-процедуры с asm-вставками (или полностью на asm) выдаётся ошибка!
Почему он может сломать, я не понимаю? Я привёл пару примеров. Код вставляется "как есть" из процедуры. Что там может поломаться? И "как есть" до вызова inline-процедуры и после (как будто вызов идёт через call/ret, но без этого).
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
29.09.2016, 10:35 | #19 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
рассмотрите сложнее. как я говорил смешанный анализ отсутствует. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
inline c gcc O3 медленее чем без inline | LynXzp | Общие вопросы C/C++ | 4 | 27.12.2012 20:54 |
Inline assembler C++ функция swap(). | nartov55 | Помощь студентам | 7 | 04.04.2012 14:28 |
inline assembler qt | lem | Qt и кроссплатформенное программирование С/С++ | 5 | 15.08.2011 12:08 |
gcc inline assembler - обнуление переменной | gvf | Помощь студентам | 1 | 13.06.2010 19:33 |
inline??? | пыхта4ог | Общие вопросы C/C++ | 2 | 09.11.2007 17:54 |