Spec-Zone.ru › GCC 14

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.

-mstrict-align
-mno-strict-align

Избегать или разрешать генерирование обращений к памяти, которые могут не быть выровнены на границе естественного объекта, как описано в спецификации архитектуры. По умолчанию используется -mno-strict-align для ядер, которые поддерживают и невыровненные загрузки и сохранения в аппаратном обеспечении, и -mstrict-align для всех остальных ядер.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Xtensa-Options.html

Spec-Zone.ru

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