forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Синтаксис: at&t vs intel (http://forum.boolean.name/showthread.php?t=17201)

impersonalis 19.08.2012 22:55

Синтаксис: at&t vs intel
 
Какой синтаксис для asm-вставки в плюсы тебе нравится больше?

Примеры at&t (не дают полного представления об особенностях синтаксиса) [GCC]:
Код:

xorl %eax,%eax
Код:

movb $0x0b,%al
Код:

int $0x80
Примеры intel [Visual]:
Код:

add edi,2
Код:

mov eax,edi
Код:

mov eax,-1
Дополнительный вопрос в тред: существуют ли конвертеры между синтаксисами?

ОПРОС ОТКРЫТЫЙ

Platon 19.08.2012 23:41

Ответ: Синтаксис: at&t vs intel
 
Цитата:

Какой синтаксис для asm-вставки в плюсы тебе нравится больше?
А зачем вообще в крестах асм использовать?:)

ЗЫ
проголосовал за intel. Выглядит приятнее конечно, но, если не ошибаюсь, у at&t более навороченый синтаксис.

impersonalis 20.08.2012 00:21

Ответ: Синтаксис: at&t vs intel
 
Цитата:

Сообщение от Platon (Сообщение 236729)
А зачем вообще в крестах асм использовать?:)

Скажу про себя: оптимизация сверхкритичных участков кода.

Mr_F_ 20.08.2012 00:39

Ответ: Синтаксис: at&t vs intel
 

раз уж такая тема, Импер, расскажи, какие приходилось оптимизировать асмом места? в смысле, если ты работал над чем-то типичным для игр/других реалтайм приложений, и нашёл интересные оптимизации для вещей типа куллинга/поиска объектов/чего-то ещё интересного, было бы клёво узнать какие-нибудь оптимизации.
если оптимизировал что-то очень специфичное - тогда наверное нет.
я за всю жизнь юзал только какой-то асмовый sincos, чтобы считать разом sin и cos, и то для SSE данных он малополезен.

jimon 20.08.2012 01:06

Ответ: Синтаксис: at&t vs intel
 
Цитата:

Сообщение от Mr_F_ (Сообщение 236734)

и то для SSE данных он малополезен.

скорость интринсиков может отличатся от прямых асм команд (потому что компилятор-дебил, да)

HolyDel 20.08.2012 17:11

Ответ: Синтаксис: at&t vs intel
 
Цитата:

я за всю жизнь юзал только какой-то асмовый sincos, чтобы считать разом sin и cos
та же фигня

impersonalis 20.08.2012 20:55

Ответ: Синтаксис: at&t vs intel
 
Цитата:

Сообщение от Mr_F_ (Сообщение 236734)

если ты работал над чем-то типичным для игр/других реалтайм приложений, и нашёл интересные оптимизации для вещей типа куллинга/поиска объектов/чего-то ещё интересного, было бы клёво узнать какие-нибудь оптимизации.
если оптимизировал что-то очень специфичное - тогда наверное нет.

2-ое

impersonalis 23.08.2012 18:20

Ответ: Синтаксис: at&t vs intel
 
Всё-таки отыскал на вики статьи:
at&t
Intel

Существуют ли конвертеры между синтаксисами?

Samodelkin 01.04.2014 20:32

Ответ: Синтаксис: at&t vs intel
 
В gcc/g++ можно использовать оба синтаксиса, переключая ключом -masm=intel|att.
Оба синтаксиса в gcc сохраняют контроль над отношением регистров и локальных переменных (входящие/выходящие параметры), в msvs насколько я знаю такого нет.
Меняется сразу и инлайн и выходной асм код (который по ключу -S можно вывести).

Более того мы можем указать компилятору не оптимизировать вставку:
Код:

asm volatile ( ... );
asm volatile ( ... );

Тогда они будут выполняться друг за другом, без всяких перестановок.

Точно также можно поступить с переменными обозная их квалификатором volatile, хотя по идее компилятор должен и без него определять как используется переменная, volatile нужен скорей в тех случаях когда переменная может измениться внешнем для приложения образом, например в случае мапирования портов или внешних устройств.

Я предпочитаю intel, и где можно переключаю на него, хотя некоторые программы (дебагеры, отладчики памяти и прочие) дают инфу в att полюбому, так что на практике приходится работать сразу с двумя синтаксисами.

В инлайн вставках лучше использовать управляемые как гцц конструкции где можно указать входящие/выходящие регистры.
Если же создаешь объектный файл целиком в асме то лучше взять какойнибудь fasm и писать в нём - там синтаксис лучше всего отшлифован.

Конверторы не встречал, но теоретически где то во вселенной они могут существовать.

impersonalis 01.04.2014 21:33

Ответ: Синтаксис: at&t vs intel
 
Цитата:

Сообщение от Samodelkin (Сообщение 278111)
Точно также можно поступить с переменными обозная их квалификатором volatile, хотя по идее компилятор должен и без него определять как используется переменная, volatile нужен скорей в тех случаях когда переменная может измениться внешнем для приложения образом, например в случае мапирования портов или внешних устройств.

Или если переменная играет роль флага при многопоточном взаимодействии. Что, вообще-то, не очень чисто (для этого можно использовать объекты ядра со всеми вытекающими минусами и плюсами), но может быть оправдано.

Samodelkin 01.04.2014 22:34

Ответ: Синтаксис: at&t vs intel
 
Цитата:

Сообщение от impersonalis (Сообщение 278116)
Или если переменная играет роль флага при многопоточном взаимодействии. Что, вообще-то, не очень чисто (для этого можно использовать объекты ядра со всеми вытекающими минусами и плюсами), но может быть оправдано.

Только если гарантируется атомарность операции. Обычно volatile для мп считается не верным решением, потому что атомарность не прописана в стандарте, а является техособенностью конкретной платформы/компилятора.

impersonalis 01.04.2014 23:24

Ответ: Синтаксис: at&t vs intel
 
Для некоторых решений атомарность не принципиальна. Например: не блокируемый цикл, условием выхода из которого является гарантированно однократная смена состояния флага. При этом цикл не обязательно спинблок в чистом виде (например, есть полезная нагрузка с требованием постоянного выполнения). Данный подход может быть оправдан при выполнении цикла на гарантированно отдельном ядре (а не за счёт разделения ресурсов одного ядра). Т.о. мы уверены, что спинблок не повлияет критично на поток, занимающийся управлением флагом.
Если же это спинблок, то требования к быстродействию (нет времени на переключение в режим ядра и адекватный сон) и/или малая вероятность захвата флага другим синхронизированным потоком, могут опять-таки оправдать использование обычного флага с volatile как примитива синхронизации. Правда, для последнего существуют (как обёртка) критические секции, которые (в отличие от семафоров) как раз первично* в режиме пользователя работают. Даже готовый метод есть - InitializeCriticalSectionAndSpinCount, и не менее удобный TryEnterCriticalSection (который на мьютексах делается костылём в виде ожидания в 0 мс).

А чо-чо в новом стандарте, вроде, какие-то подвижки по поводу стандартизации работы с мп были, не?

Samodelkin 01.04.2014 23:52

Ответ: Синтаксис: at&t vs intel
 
__
Цитата:

Сообщение от impersonalis (Сообщение 278120)
А чо-чо в новом стандарте, вроде, какие-то подвижки по поводу стандартизации работы с мп были, не?

Цитата:

The volatile keyword in C++11 ISO Standard code is to be used only for hardware access; do not use it for inter-thread communication. For inter-thread communication, use mechanisms such as std::atomic<T> from the C++ Standard Template Library.


Часовой пояс GMT +4, время: 08:12.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot