Преобразование встроенного ASM во встроенный

Мне дали задание преобразовать небольшой фрагмент ассемблера во встроенный, чтобы проверить производительность. Я никогда не разрабатывал код ни для того, ни для другого, но я понимаю asm и c и читаю внутренний синтаксис. Но я не могу найти информацию о том, как встроенный доступ к регистрам. я нашел 2 функции:

получитьРег() и установитьРег()

getReg() поставляется с таблицей различных таблиц регистров и их идентификаторами/номерами: -Общие целочисленные регистры -Регистры приложений -Регистры управления -Косвенные регистры Но ни один из них не соответствует ассемблерным регистрам, таким как rax,rdi и т.д.

Как я могу адресовать регистры, например, rcx, rdi и т. д., во встроенной системе? Или, другими словами, как я могу преобразовать это:

мов %0, %rcx

к внутреннему эквиваленту?


person GoTTimw    schedule 03.10.2011    source источник


Ответы (2)


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

person Paul R    schedule 03.10.2011
comment
Большое спасибо, я беспокоился о производительности, поскольку и встроенный, и asm будут тестироваться, чтобы увидеть, как они работают. - person GoTTimw; 04.10.2011
comment
Код, написанный с помощью встроенных функций, в целом должен быть таким же быстрым, как raw asm, а в некоторых случаях может быть и быстрее, поскольку компилятор часто может лучше выполнять работу по планированию инструкций и распределению регистров, чем человек. - person Paul R; 04.10.2011

Посмотрите, можете ли вы использовать что-либо из этого:
GCC: Встроенные функции X86
MSVC++: Алфавитный список встроенных функций

person Alexey Frunze    schedule 03.10.2011