Ответ 1
Да, вы можете. Explicit Reg Vars рассказывает о синтаксисе, который вам нужен, чтобы привязать переменную к определенному регистру.
Я пишу некоторый код и пытаюсь ускорить его с помощью SIMD intrinsics SSE2/3. Мой код имеет такой характер, что мне нужно загрузить некоторые данные в регистр XMM и действовать на него много раз. Когда я смотрю на генерируемый код ассемблера, кажется, что GCC продолжает промывать данные обратно в память, чтобы перезагрузить что-то еще в XMM0 и XMM1. Я компилирую для x86-64, поэтому у меня есть 15 регистров. Почему GCC использует только два и что я могу сделать, чтобы попросить его использовать больше? Есть ли способ, которым я могу "привязать" значение в регистре? Я добавил ключевое слово "register" в мое определение переменной, но сгенерированный ассемблерный код идентичен.
Да, вы можете. Explicit Reg Vars рассказывает о синтаксисе, который вам нужен, чтобы привязать переменную к определенному регистру.
Если вы добираетесь до точки, в которой вы указываете отдельные регистры для каждого внутреннего, вы можете просто написать каталог сборки, особенно учитывая, что gcc неприятная привычка пессимизировать внутренности без необходимости во многих случаях.