3.18.57 Параметры Xtensa
Эти параметры поддерживаются для целей Xtensa:
-mconst16-mno-const16-
Включить или выключить использование инструкций
CONST16для загрузки константных значений. ИнструкцияCONST16в настоящее время не является стандартным параметром Tensilica. При включении инструкцииCONST16всегда используются вместо стандартных инструкцийL32R. ИспользованиеCONST16включено по умолчанию только в том случае, если инструкцияL32Rнедоступна. -mfused-madd-mno-fused-madd-
Включить или выключить использование инструкций сложения/умножения слиянием (fused multiply/add) и вычитания/умножения в варианте с плавающей точкой. Это не влияет, если вариант с плавающей точкой также не включён. Отключение инструкций сложения/умножения слиянием и вычитания/умножения заставляет компилятор использовать отдельные инструкции для умножения и сложения/вычитания. Это может быть желательно в некоторых случаях, когда требуются строгие результаты, соответствующие стандарту 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, которое помещает литералы в отдельный раздел в выходном файле. Это позволяет поместить пул литералов в оперативную память/ROM данных, а также позволяет компоновщику объединять пулы литералов из отдельных файлов объектов для устранения избыточных литералов и улучшения размера кода. С помощью -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-6.5.0/gcc/Xtensa-Options.html