3.19.63 Опции 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__определяется.
Далее: Опции zSeries, Предыдущее: Опции Xstormy16, Вверх: Опции подмодели [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Xtensa-Options.html