Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> G++: Компиляция __builtin_ функций. Перевод в intel-asm форму. 
V
    Опции темы
JackYF
Дата 26.10.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Доброго времени суток, форумчане.
Проблема следующая.

Использую среду Code::Blocks сборка 23102006, компилятор MinGW G++ из поставки CodeBlocks 1.0 RC2.

Мне требуется делать в коде С++ ассемблерные вставки. По умолчанию компилятор разпознает и использует AT&T синтаксис.
Включение Intel - синтаксиса, как выяснилось, делается путем добавления к опциям компилятора "-masm=intel".

Все бы хорошо, но:
Многие из математических функций определяются напрямую в MinGW-библиотеках как __builtin_, то есть непосредственно транслируемые в ассемблер. И при использованию опции компилятора "-masm=intel" и одновременно вызове функций типа

std::log10 и т.д.

Компилятор пишет сообщения об ошибке типа:
"Не могу скомпилировать ассемблерную инструкцию < и далее идут ассемблерные инструкции в AT&T синтаксисе >.

Вопрос: как с этим можно бороться? smile 

Использовать вставки на AT&T Ассемблере не предлагать.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 26.10.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Использовать вставки на AT&T Ассемблере не предлагать.

AT&T синтаксис - true, зря не хотите использовать
Варианты решения
1. Использовать вместо стандартных функций чего-нибудь непривязанное к ассемблеру
2. Переписать нужные функции в Intel-синтаксисе  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 26.10.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(MAKCim @  26.10.2006,  17:02 Найти цитируемый пост)
AT&T синтаксис - true, зря не хотите использовать


Ага, всюду и везде читал и учил Intel - синтаксис, а теперь переходить на AT&T - забавно...
Если честно, мне он очень не нравится... Но это все личное...

Переписывать сии функции - значит переписать половину MinGW'шного <cmath>. По-моему, не выход.
Все-таки мне странно, что компилятор поступает подобным образом.


Ладно, допустим, я решу попробовать AT&T синтаксис...
MAKCim, посоветуй электронные буки по сабжу.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 26.10.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Все-таки мне странно, что компилятор поступает подобным образом.

действительно, только что проверил - все работает (правда под Linux)
Цитата

MAKCim, посоветуй электронные буки по сабжу. 

Кратко но по делу у Зубкова: "Assembler для DOS, Windows, UNIX"
здесь


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 27.10.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



MAKCim, спасибо за буку, почитаю.
Странно, сколько искал книжки по программированию и Ассемблеру в частности, на этот сайт не натыкался...

Если будут еще интересные предложения ( например, все-таки укротить G++, пишите... ). 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
JackYF
Дата 27.10.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Дополнительный вопрос по этой же теме:

Есть С++-функция, которой передали несколько целочисленных параметров.

Как в ассемблерной вставки к этим именам обращаться?

Имя, ПодчеркиваниеИмя - не помогло. Компилятор и среда - см. в первом посте.
В книге Зубкова: "Assembler для DOS, Windows, UNIX" - нету. Там только краткий обзор... И не рассматривается взаимодействие с внешними языками.

Если можно, пример или ссылку на пример.  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 27.10.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Как в ассемблерной вставки к этим именам обращаться?

Advanced Linux Programming
Если кратко, сложение a=a+b;
Код

void F(int a, int b) {
    __asm__(
        "addl %1, %0" :   /* собственно команды, разделяются ; или \n */
        "=r" (a) :              /* выходные операнд (могут быть операнды, разделяются ,) (в данном примере в a записывается значение из регистра %0) */
        "r"   (a), "r" (b)   /* входные операнды (считаются слева-направо, т. е %0 -> a, %1 -> b) */
    );
}

в скобках стоит "r" и "=r"
знак = означает выходной операнд
буква r означает любой регистр, вместо r можно писать идентификаторы конкретных регистров: "a", "b", "c"
конкретно про asm-вставки в gcc

Это сообщение отредактировал(а) MAKCim - 27.10.2006, 19:40


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 30.10.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Приблизительно начинаю понимать... Хотя после Intel - овского синтаксиса выглядит просто жуть.
Но что-то в этом есть.


MAKCim, еще раз спасибо и респект.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 30.10.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Хотя после Intel - овского синтаксиса выглядит просто жуть.

У AT&T синтаксиса куча преимуществ по сравнению с Intel-овским
все дело в привычке, после M$ на *NIX тоже тяжело приходится


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 30.10.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Да уж, привычка - вторая натура.
Тема закрыта.


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

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

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




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


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

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