Spec-Zone.ru › GCC 15

3.20.57 Параметры Xtensa

Для целей Xtensa поддерживаются следующие параметры:

-mconst16
-mno-const16

Включает или отключает использование инструкций CONST16 для загрузки константных значений. Инструкция CONST16 в настоящее время не является стандартным параметром Tensilica. Если параметр включён, вместо стандартных инструкций L32R всегда используются инструкции CONST16. Использование 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-15.3.0/gcc/Xtensa-Options.html

Spec-Zone.ru

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