3.18.58 Опции 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. Для исключения инструкцийMEMWиспользуйте -mno-serialize-volatile. -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-7.5.0/gcc/Xtensa-Options.html