| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > G++: Компиляция __builtin_ функций. |
| Автор: JackYF 26.10.2006, 16:28 |
| Доброго времени суток, форумчане. Проблема следующая. Использую среду Code::Blocks сборка 23102006, компилятор MinGW G++ из поставки CodeBlocks 1.0 RC2. Мне требуется делать в коде С++ ассемблерные вставки. По умолчанию компилятор разпознает и использует AT&T синтаксис. Включение Intel - синтаксиса, как выяснилось, делается путем добавления к опциям компилятора "-masm=intel". Все бы хорошо, но: Многие из математических функций определяются напрямую в MinGW-библиотеках как __builtin_, то есть непосредственно транслируемые в ассемблер. И при использованию опции компилятора "-masm=intel" и одновременно вызове функций типа std::log10 и т.д. Компилятор пишет сообщения об ошибке типа: "Не могу скомпилировать ассемблерную инструкцию < и далее идут ассемблерные инструкции в AT&T синтаксисе >. Вопрос: как с этим можно бороться? Использовать вставки на AT&T Ассемблере не предлагать. |
| Автор: MAKCim 26.10.2006, 17:02 | ||
AT&T синтаксис - true, зря не хотите использовать Варианты решения 1. Использовать вместо стандартных функций чего-нибудь непривязанное к ассемблеру 2. Переписать нужные функции в Intel-синтаксисе |
| Автор: JackYF 26.10.2006, 21:16 |
Ага, всюду и везде читал и учил Intel - синтаксис, а теперь переходить на AT&T - забавно... Если честно, мне он очень не нравится... Но это все личное... Переписывать сии функции - значит переписать половину MinGW'шного <cmath>. По-моему, не выход. Все-таки мне странно, что компилятор поступает подобным образом. Ладно, допустим, я решу попробовать AT&T синтаксис... MAKCim, посоветуй электронные буки по сабжу. |
| Автор: MAKCim 26.10.2006, 21:49 | ||||
действительно, только что проверил - все работает (правда под Linux)
Кратко но по делу у Зубкова: "Assembler для DOS, Windows, UNIX" http://openlib.org.ua/ru/books/id/11/ |
| Автор: JackYF 27.10.2006, 15:24 |
| MAKCim, спасибо за буку, почитаю. Странно, сколько искал книжки по программированию и Ассемблеру в частности, на этот сайт не натыкался... Если будут еще интересные предложения ( например, все-таки укротить G++, пишите... ). |
| Автор: JackYF 27.10.2006, 18:18 |
| Дополнительный вопрос по этой же теме: Есть С++-функция, которой передали несколько целочисленных параметров. Как в ассемблерной вставки к этим именам обращаться? Имя, ПодчеркиваниеИмя - не помогло. Компилятор и среда - см. в первом посте. В книге Зубкова: "Assembler для DOS, Windows, UNIX" - нету. Там только краткий обзор... И не рассматривается взаимодействие с внешними языками. Если можно, пример или ссылку на пример. |
| Автор: MAKCim 27.10.2006, 19:23 | ||||
http://advancedlinuxprogramming.com Если кратко, сложение a=a+b;
в скобках стоит "r" и "=r" знак = означает выходной операнд буква r означает любой регистр, вместо r можно писать идентификаторы конкретных регистров: "a", "b", "c" http://www.advancedlinuxprogramming.com/alp-folder/alp-ch09-inline-asm.pdf |
| Автор: JackYF 30.10.2006, 17:38 |
| Приблизительно начинаю понимать... Хотя после Intel - овского синтаксиса выглядит просто жуть. Но что-то в этом есть. MAKCim, еще раз спасибо и респект. |
| Автор: MAKCim 30.10.2006, 18:26 | ||
У AT&T синтаксиса куча преимуществ по сравнению с Intel-овским все дело в привычке, после M$ на *NIX тоже тяжело приходится |
| Автор: JackYF 30.10.2006, 20:18 |
| Да уж, привычка - вторая натура. Тема закрыта. |