3.19.57 Параметры 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__. -
-mextra-l32r-costs=n Указывает дополнительные затраты на доступ к инструкции ОЗУ/ПЗУ для инструкций
L32Rв тактах. Это влияет на то, стоит ли при оптимизации под скорость загружать константу из литерного пула с помощьюL32Rили синтезировать константу из небольшой с парой арифметических инструкций. Значение по умолчанию — 0.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Xtensa-Options.html