__asm в x64 всё?
От: SWW Россия  
Дата: 21.01.12 05:28
Оценка:
Попытался скомпилировать один из старых проектов в x64 и получил: '__asm' keyword not supported on this architecture. Это как понять? Совсем отменили ассемблерные вставки? Или все-таки что-то можно сделать?

22.01.12 20:19: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: __asm в x64 всё?
От: Аноним  
Дата: 21.01.12 07:02
Оценка: +1
Здравствуйте, SWW, Вы писали:

SWW>Попытался скомпилировать один из старых проектов в x64 и получил: '__asm' keyword not supported on this architecture. Это как понять? Совсем отменили ассемблерные вставки? Или все-таки что-то можно сделать?


В студии совсем отменили. Но мы для этого пользуем Intel Compiler — там все это работает при чем кросплатформенно (то есть синтаксис асм вставок одинаковый для всех платформ).

Если нет возможности перети на интел — надо задуматся а так ли нужны вам асм вставки? Оптимизаторы нынче очень хорощи, а для векторных операций есть intrinsic functions (правда под msvc только до SSE2 — может информация уже устарела так как я все еще на 2008 студии)
Re[2]: __asm в x64 всё?
От: dudkin  
Дата: 21.01.12 07:17
Оценка: :))) :))
Здравствуйте, Аноним, Вы писали:


А>Если нет возможности перети на интел — надо задуматся а так ли нужны вам асм вставки? Оптимизаторы нынче очень хорощи,


так бывает так что алгоритм уже на асме — таким уж из декомпилера вышел
Re[3]: __asm в x64 всё?
От: SWW Россия  
Дата: 21.01.12 07:40
Оценка:
Здравствуйте, dudkin, Вы писали:

А>>Если нет возможности перети на интел — надо задуматся а так ли нужны вам асм вставки? Оптимизаторы нынче очень хорощи,


D>так бывает так что алгоритм уже на асме — таким уж из декомпилера вышел


Не поверите — но таки да, бывает что алгоритм сразу на асме. В первую очередь те, в которых активно используется перенос — вычисление различных CRC, скремблеры. У меня на асме написана функция преобразования числа с плавающей точкой из старых форматов (IBM, VAX) в IEEE — они отличаются лишь положением мантиссы и значением порядка, поэтому проще передвинуть ее на новое место, чем извлекать отдельно мантиссу и порядок, а потом вычислять из них double. Наконец, поменять байты проще на асме, прямо на месте, командами xchg или bswap чем вызывать hton* из отдельной библиотеки — если файл записан в big-endian, а файлы бывают в несколько гигов, то выигрыш по времени оказывается весьма существенным.
Re[4]: __asm в x64 всё?
От: dudkin  
Дата: 21.01.12 07:48
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Не поверите — но таки да, бывает что алгоритм сразу на асме. В первую очередь те, в которых активно используется перенос — вычисление различных CRC, скремблеры. У меня на асме написана функция преобразования числа с плавающей точкой из старых форматов (IBM, VAX) в IEEE — они отличаются лишь положением мантиссы и значением порядка, поэтому проще передвинуть ее на новое место, чем извлекать отдельно мантиссу и порядок, а потом вычислять из них double. Наконец, поменять байты проще на асме, прямо на месте, командами xchg или bswap чем вызывать hton* из отдельной библиотеки — если файл записан в big-endian, а файлы бывают в несколько гигов, то выигрыш по времени оказывается весьма существенным.


чего же не поверить! сам балуюсь иногда с detours и thunking или имею дело чужими имплементациями у которых сырц-кода нету
Re[3]: __asm в x64 всё?
От: Banned by IT  
Дата: 21.01.12 07:49
Оценка:
Здравствуйте, dudkin, Вы писали:

А>>Если нет возможности перети на интел — надо задуматся а так ли нужны вам асм вставки? Оптимизаторы нынче очень хорощи,

D>так бывает так что алгоритм уже на асме — таким уж из декомпилера вышел
Мнэээ. И вы из декомпилера его назад в компилер и в продакшен? И не стрёмно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: __asm в x64 всё?
От: dudkin  
Дата: 21.01.12 07:51
Оценка: :)
Здравствуйте, Banned by IT, Вы писали:

BBI>Мнэээ. И вы из декомпилера его назад в компилер и в продакшен? И не стрёмно?


было дело всю ночь потом не спал боялся.
Re[4]: __asm в x64 всё?
От: Banned by IT  
Дата: 21.01.12 08:11
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Не поверите — но таки да, бывает что алгоритм сразу на асме. В первую очередь те, в которых активно используется перенос — вычисление различных CRC, скремблеры.

У меня когда то были асм вставки в коде для длинной математики. Как раз сложение, вычитание, сдвиг. На момент написания был солидный выигрыш по скорости. Не так давно выкинул, оказалось что сегодняшний компилер сгенерил код, по скорости отличающийся от асма на величину, крайне близкую к погрешности измерений.

SWW> У меня на асме написана функция преобразования числа с плавающей точкой из старых форматов (IBM, VAX) в IEEE — они отличаются лишь положением мантиссы и значением порядка, поэтому проще передвинуть ее на новое место, чем извлекать отдельно мантиссу и порядок, а потом вычислять из них double.

Дык асм для этого не нужен. Битовые операции и сдвиги есть и в С. Ну а потом кастануть память в double.

SWW>Наконец, поменять байты проще на асме, прямо на месте, командами xchg или bswap чем вызывать hton* из отдельной библиотеки — если файл записан в big-endian, а файлы бывают в несколько гигов, то выигрыш по времени оказывается весьма существенным.

Давно уже есть интринсики. В том же ICC есть _bswap
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: __asm в x64 всё?
От: Аноним  
Дата: 21.01.12 19:44
Оценка:
Выносите асм код в отдельные асм файлы в виде функций, добавляете их в проект и компилируете с ml64 (входит в студию). На мой взгляд так даже лучше чем мешанина на двух ЯП в одном файле
Re[4]: __asm в x64 всё?
От: Аноним  
Дата: 21.01.12 19:50
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Здравствуйте, dudkin, Вы писали:


А>>>Если нет возможности перети на интел — надо задуматся а так ли нужны вам асм вставки? Оптимизаторы нынче очень хорощи,


D>>так бывает так что алгоритм уже на асме — таким уж из декомпилера вышел


SWW>Не поверите — но таки да, бывает что алгоритм сразу на асме. В первую очередь те, в которых активно используется перенос — вычисление различных CRC, скремблеры. У меня на асме написана функция преобразования числа с плавающей точкой из старых форматов (IBM, VAX) в IEEE — они отличаются лишь положением мантиссы и значением порядка, поэтому проще передвинуть ее на новое место, чем извлекать отдельно мантиссу и порядок, а потом вычислять из них double. Наконец, поменять байты проще на асме, прямо на месте, командами xchg или bswap чем вызывать hton* из отдельной библиотеки — если файл записан в big-endian, а файлы бывают в несколько гигов, то выигрыш по времени оказывается весьма существенным.
Re[4]: __asm в x64 всё?
От: Аноним  
Дата: 21.01.12 19:58
Оценка:
Х64 асм другой, так что даже еслиб __asm была бы -пришлось бы все переписывать
Re[5]: __asm в x64 всё?
От: Banned by IT  
Дата: 21.01.12 22:42
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Х64 асм другой, так что даже еслиб __asm была бы -пришлось бы все переписывать

Какой ещё другой?
Команды те же, 32битные регистры всё ещё доступны. Мой 32битный код собрался и даже заработал без проблем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: __asm в x64 всё?
От: okman Беларусь https://searchinform.ru/
Дата: 22.01.12 09:10
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Попытался скомпилировать один из старых проектов в x64 и получил: '__asm' keyword not supported on this architecture. Это как понять? Совсем отменили ассемблерные вставки? Или все-таки что-то можно сделать?


Вот эту тему почитать — http://www.rsdn.ru/forum/cpp/4410023.flat.aspx#4410023
Автор:
Дата: 06.09.11
Re: __asm в x64 всё?
От: fdn721  
Дата: 23.01.12 02:05
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Попытался скомпилировать один из старых проектов в x64 и получил: '__asm' keyword not supported on this architecture. Это как понять? Совсем отменили ассемблерные вставки? Или все-таки что-то можно сделать?


Теперь в MSVC нужно писать asm функции целиком, а не вставками.
Re[2]: __asm в x64 всё?
От: ReFlexer  
Дата: 23.01.12 07:01
Оценка:
Здравствуйте, fdn721, Вы писали:

F>Здравствуйте, SWW, Вы писали:


SWW>>Попытался скомпилировать один из старых проектов в x64 и получил: '__asm' keyword not supported on this architecture. Это как понять? Совсем отменили ассемблерные вставки? Или все-таки что-то можно сделать?


F>Теперь в MSVC нужно писать asm функции целиком, а не вставками.


Их и раньше можно было писать целиком х) Раньше было удобно вставить в релиз breakpoint по int 3 и ловить отладчиком х) Хотя в студии вроде есть для этих целей механизмы.
Re[2]: __asm в x64 всё?
От: Erop Россия  
Дата: 23.01.12 07:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если нет возможности перети на интел — надо задуматся а так ли нужны вам асм вставки? Оптимизаторы нынче очень хорощи, а для векторных операций есть intrinsic functions (правда под msvc только до SSE2 — может информация уже устарела так как я все еще на 2008 студии)


Ну, например, если у вас в программе есть элементы JIT-кодогенерации, то вставки часто всё-таки нужны, так как хочется как-то понятно записать те кусочки, из которых JIT-кодогенератор будет собирать код...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.