3.18.61 Параметры 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-9.5.0/gcc/Xtensa-Options.html