Spec-Zone.ru › GCC 12

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API