3.19.62 Параметры Xtensa ¶
Эти параметры поддерживаются для целей Xtensa:
-mconst16-mno-const16-
Включить или отключить использование инструкций
CONST16для загрузки константных значений. ИнструкцияCONST16в настоящее время не является стандартным параметром Tensilica. При включении инструкцииCONST16всегда используются вместо стандартных инструкцийL32R. Использование инструкцийCONST16включено по умолчанию, только если инструкцияL32Rнедоступна. -mfused-madd-mno-fused-madd-
Включить или отключить использование инструкций слияния умножения/сложения и умножения/вычитания в параметре с плавающей точкой. Это не имеет эффекта, если параметр с плавающей точкой также не включен. Отключение инструкций слияния умножения/сложения и умножения/вычитания заставляет компилятор использовать отдельные инструкции для операций умножения и сложения/вычитания. Это может быть желательно в некоторых случаях, когда требуются строго совместимые с IEEE 754 результаты: инструкции слияния умножения/сложения не округляют промежуточный результат, тем самым обеспечивая результаты с *большим* количеством бит точности, чем указано в стандарте IEEE. Отключение инструкций слияния умножения/сложения также гарантирует, что выходные данные программы не зависят от способности компилятора объединять операции умножения и сложения/вычитания.
-mserialize-volatile-mno-serialize-volatile-
При включении этого параметра GCC вставляет инструкции
MEMWперед ссылками на памятьvolatileдля гарантии последовательной согласованности. По умолчанию используется -mserialize-volatile. Используйте -mno-serialize-volatile, чтобы опустить инструкцииMEMW. -mforce-no-pic-
Для целей, таких как GNU/Linux, где весь код Xtensa в режиме пользователя должен быть кодом с независимой позицией (PIC), этот параметр отключает PIC для компиляции кода ядра.
-mtext-section-literals-mno-text-section-literals-
Эти параметры управляют обработкой литеральных пулов. По умолчанию используется -mno-text-section-literals, который помещает литералы в отдельный раздел в выходном файле. Это позволяет поместить литеральный пул в оперативную память/ПЗУ данных, а также позволяет компоновщику объединить литеральные пулы из отдельных объектных файлов для устранения избыточных литералов и улучшения размера кода. С -mtext-section-literals литералы вставляются в текстовый раздел, чтобы держать их как можно ближе к их ссылкам. Это может быть необходимо для больших файлов ассемблера. Литералы для каждой функции помещаются непосредственно перед этой функцией.
-mauto-litpools-mno-auto-litpools-
Эти параметры управляют обработкой литеральных пулов. По умолчанию используется -mno-auto-litpools, который помещает литералы в отдельный раздел в выходном файле, если не используется -mtext-section-literals. С -mauto-litpools литералы вставляются в текстовый раздел ассемблером. Компилятор не генерирует явные директивы
.literalи загружает литералы в регистры с инструкциямиMOVIвместоL32R, чтобы позволить ассемблеру выполнить релаксацию и разместить литералы по мере необходимости. Этот параметр позволяет ассемблеру создавать несколько литеральных пулов на функцию и собирать очень большие функции, что может быть невозможно с -mtext-section-literals. -mtarget-align-mno-target-align-
При включении этого параметра GCC сообщает ассемблеру автоматически выравнивать инструкции для уменьшения штрафов за ветвление за счет некоторой плотности кода. Ассемблер пытается расширить инструкции плотности для выравнивания целей ветвления и инструкций, следующих за инструкциями вызова. Если нет достаточно предшествующих инструкций безопасной плотности для выравнивания цели, никакое расширение не выполняется. По умолчанию используется -mtarget-align. Эти параметры не влияют на обработку автовыровненных инструкций, таких как
LOOP, которые ассемблер всегда выравнивает, либо расширяя инструкции плотности, либо вставляя инструкции NOP. -mlongcalls-mno-longcalls-
При включении этого параметра GCC сообщает ассемблеру переводить прямые вызовы в косвенные вызовы, если он не может определить, что цель прямого вызова находится в диапазоне, разрешенном инструкцией вызова. Этот перевод обычно выполняется для вызовов функций в других исходных файлах. В частности, ассемблер переводит прямую инструкцию
CALLвL32R, за которой следует инструкцияCALLX. По умолчанию используется -mno-longcalls. Этот параметр следует использовать в программах, где цель вызова потенциально может находиться вне диапазона. Этот параметр реализован в ассемблере, а не в компиляторе, поэтому сгенерированный GCC ассемблерный код по-прежнему показывает прямые инструкции вызова — посмотрите на дизассемблированный объектный код, чтобы увидеть фактические инструкции. Обратите внимание, что ассемблер использует косвенный вызов для каждого межфайлового вызова, а не только для тех, которые действительно находятся вне диапазона. -mabi=name-
Сгенерировать код для указанного ABI. Допустимые значения: ‘call0’, ‘windowed’. Значение ABI по умолчанию выбирается конфигурацией ядра Xtensa.
-mabi=call0-
При включении этого параметра параметры функции передаются в регистрах
a2черезa7, регистрыa12черезa15являются сохраняемыми вызывающей стороной, и регистрa15может использоваться как указатель стека. При включении этой версии ABI символ препроцессора C__XTENSA_CALL0_ABI__определен. -mabi=windowed-
При включении этого параметра параметры функции передаются в регистрах
a10черезa15, а вызываемая функция поворачивает окно регистров на 8 регистров при входе, так что ее аргументы находятся в регистрахa2черезa7. Регистрa7может использоваться как указатель стека. Окно регистров поворачивается на 8 регистров назад при возвращении. При включении этой версии ABI символ препроцессора C__XTENSA_WINDOWED_ABI__определен.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Xtensa-Options.html