#assembly #cpu-registers #intrinsics
#сборка #cpu-регистры #встроенные
Вопрос:
Мне дали задание преобразовать небольшую часть asm во встроенную, чтобы проверить производительность. Я никогда не разрабатывал никакого кода ни для одного из них, но я понимаю asm и c и изучаю встроенный синтаксис. Но я не могу найти информацию о том, как intrinsic справляется с доступом к регистрам. я нашел 2 функции:
getReg() и setReg()
getReg() поставляется с таблицей различных таблиц регистров и их идентификатором / номером: -Общие целочисленные регистры -Регистры приложений -Управляющие регистры -Косвенные регистры, но ни один из них, похоже, не соответствует регистрам asm, таким как rax, rdi и так далее.
Как я могу адресовать регистры, например, rcx, rdi и так далее, Во встроенном? Или, другими словами, как я могу преобразовать это:
mov %0, %rcx
во внутренний эквивалент?
Ответ №1:
Вы упускаете суть встроенных функций — вам не нужно беспокоиться о распределении регистров при использовании встроенных функций (за исключением, возможно, в случае доступа к специальным регистрам в некоторых случаях). Общая идея состоит в том, чтобы позволить компилятору позаботиться обо всем этом низкоуровневом ведении домашнего хозяйства за вас. Чтобы перенести необработанный asm в встроенные, вам сначала нужно перепроектировать код asm, чтобы понять, для чего он предназначен, а затем повторно реализовать эквивалентный код с использованием встроенных. Если вы опубликуете часть фактического кода, вы можете получить более конкретные предложения.
Комментарии:
1. большое спасибо, я был обеспокоен производительностью, поскольку как встроенный, так и asm будут проверены, чтобы увидеть, как они работают.
2. Код, написанный с использованием встроенных функций, должен быть таким же быстрым, как и необработанный asm в целом, а в некоторых случаях может быть быстрее, поскольку компилятор часто может лучше выполнять планирование команд и распределение регистров, чем человек.
Ответ №2:
Посмотрите, можете ли вы использовать что-либо из этого:
GCC: встроенные функции X86
MSVC : алфавитный список встроенных функций