Spec-Zone.ru › GCC 10

Далее: Параметры zSeries, Предыдущее: Параметры Xstormy16, Наверх: Параметры, зависящие от машины [Оглавление][Индекс]

3.19.62 Параметры 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 ассемблерный код всё ещё показывает прямые инструкции вызова — посмотрите на дизассемблированный объектный код, чтобы увидеть фактические инструкции. Обратите внимание, что ассемблер использует косвенный вызов для каждого межфайлового вызова, а не только тех, которые действительно находятся вне диапазона.

Далее: Параметры zSeries, Предыдущее: Параметры Xstormy16, Наверх: Параметры, зависящие от машины [Оглавление][Индекс]

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

Spec-Zone.ru

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