Где я могу найти скрипт, который конвертирует встроенный ассемблер VC ++ в встроенные функции? - PullRequest
2 голосов
/ 02 сентября 2011

Я портирую встроенный ассемблер, который использует команды SSE для встроенных функций.Требуется много работы, чтобы найти подходящее для инструкции ассемблера.Где-то в Интернете я видел скрипт Python, который упрощает работу, но не может найти его сейчас.

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Мне не известен сценарий, который будет делать именно то, что вы просите. Во многих случаях команды, не относящиеся к SSE, чередуются в сборке, и не каждая инструкция по сборке может быть сопоставлена ​​с внутренней или примитивной операцией Си.

Полагаю, вы можете взломать его с помощью поиска и замены. (На самом деле это может быть не так уж плохо. Сколько кода вы пытаетесь перенести? Тысячи строк?)

Кроме того, VC ++ вообще не допускает встроенную сборку на 64-битной версии. Поэтому все должно быть сделано с использованием встроенных функций или полностью отдельного файла сборки.

Я не стану далеко говорить, что использование встроенных функций полностью уступает сборке (если вы знаете, что делаете), но написание хорошего встроенного кода, который хорошо компилируется и работает так же быстро, как оптимизированная сборка, - произведение искусства. самостоятельно. Но при этом сохраняются два преимущества: портативность и простота использования (нет необходимости вручную распределять регистры).

1 голос
/ 24 сентября 2011

Я создал свой собственный скрипт для преобразования встроенного ассемблера в встроенные функции. Он делает много грубой работы. https://github.com/KindDragon/Asm2Intrinsics

1 голос
/ 02 сентября 2011

Я не думаю, что вы будете довольны таким сценарием.

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

Во-вторых, я думаювы ищете что-то вроде этого, потому что вы хотите портировать часть программного обеспечения с 32-разрядного на 64-разрядный, правильно?Мой опыт подсказал мне, что вы столкнетесь с некоторыми странными ошибками из-за непредвиденных приведений типов, если не будете просматривать каждую строку кода.

В-третьих, вы говорите о Visual Studio?Есть ли другой компилятор, который поддерживает встроенные функции?У нас были некоторые странные ошибки при портировании нашего программного обеспечения с использованием встроенных функций, поскольку при использовании встроенных функций возникают некоторые ужасные ошибки компилятора, в основном из-за путаницы в стеке.У нас было много проблем с поиском этих вещей и в итоге написанием этих функций на ассемблере.

Так что я предлагаю быть осторожным с внутренностями!

...