3.20.2 Параметры Adapteva Epiphany
Для Adapteva Epiphany определены следующие параметры «-m»:
-
-mhalf-reg-file -
Не выделять регистры из диапазона
r32…r63. Это позволяет запускать код на вариантах аппаратного обеспечения, в которых отсутствуют эти регистры. -
-mprefer-short-insn-regs -
Отдавать предпочтение выделению регистров, позволяющих генерировать короткие инструкции. Это может увеличить количество инструкций, поэтому общий размер кода может как уменьшиться, так и увеличиться.
-
-mbranch-cost=num -
Задать стоимость переходов примерно равной num «простым» инструкциям. Эта стоимость является лишь эвристической и не гарантирует получения стабильных результатов в разных выпусках.
-
-mcmove -
Включить генерацию условных перемещений.
-
-mnops=num -
Выводить num инструкций NOP перед каждой второй генерируемой инструкцией.
-
-mno-soft-cmpsf -
При сравнении чисел с плавающей точкой одинарной точности выводить инструкцию
fsubи проверять флаги. Это быстрее программного сравнения, но может давать неверные результаты при наличии NaN или при сравнении двух разных малых чисел, разность которых вычисляется как ноль. По умолчанию используется -msoft-cmpsf, который выполняет более медленные, но соответствующие стандарту IEEE программные сравнения. -
-mstack-offset=num -
Задать смещение между вершиной стека и указателем стека. Например, значение 8 означает, что восемь байтов в диапазоне
sp+0…sp+7могут использоваться листовыми функциями без выделения места в стеке. Значения, отличные от «8» или «16», не проверялись и, скорее всего, работать не будут. Обратите также внимание, что этот параметр изменяет ABI; компиляция программы со смещением стека, отличным от использованного при компиляции библиотек, обычно не работает. Этот параметр может быть полезен, если вы хотите оценить, позволит ли другое смещение стека получить более качественный код. Однако для сборки работоспособных программ с другим смещением стека рекомендуется настроить цепочку инструментов с соответствующим параметром --with-stack-offset=num. -
-mno-round-nearest -
Предположить при планировании, что режим округления установлен на усечение. По умолчанию используется -mround-nearest.
-
-mlong-calls -
Если иное не задано атрибутом, предполагать, что все вызовы могут выходить за пределы диапазона смещений инструкций
b/bl, и поэтому перед выполнением (в остальном прямого) вызова загружать адрес функции в регистр. Это поведение используется по умолчанию. -
-mshort-calls -
Если иное не задано атрибутом, предполагать, что все прямые вызовы находятся в диапазоне инструкций
b/bl, и использовать эти инструкции для прямых вызовов. По умолчанию используется -mlong-calls. -
-msmall16 -
Предполагать, что адреса можно загружать как 16-разрядные беззнаковые значения. Это не относится к адресам функций, для которых действуют семантики -mlong-calls.
-
-mfp-mode=mode -
Задать преобладающий режим модуля операций с плавающей точкой. Он определяет режим операций с плавающей точкой, который предоставляется и ожидается при вызове и возврате из функции. Если этот режим совпадает с режимом, который чаще всего требуется в начале функции, программы могут стать меньше и работать быстрее за счёт исключения ненужных переключений режимов.
Для mode можно задать одно из следующих значений:
- «caller»
-
При входе в функцию допустим любой режим; он сохраняется или восстанавливается при возврате из функции и при вызове других функций. Этот режим полезен при компиляции библиотек и других единиц трансляции, которые могут включаться в разные программы с различными преобладающими режимами FPU. Возможность использовать один объектный файл может быть важнее дополнительных затрат на размер и быстродействие из-за переключения режимов, которое может потребоваться по сравнению с более конкретным выбором преобладающего режима FPU.
- «truncate»
-
Этот режим используется для вычислений с плавающей точкой с округлением усечением (то есть к нулю). Сюда также относится преобразование чисел с плавающей точкой в целые числа.
- «round-nearest»
-
Этот режим используется для вычислений с плавающей точкой с округлением до ближайшего чётного.
- «int»
Этот режим используется для целочисленных вычислений в FPU, например умножения целых чисел или умножения с накоплением целых чисел.
По умолчанию используется -mfp-mode=caller
-
-mno-split-lohi -mno-postinc-mno-postmodify-
Параметры генерации кода, отключающие соответственно разделение 32-разрядных загрузок, генерацию адресов с постинкрементом и генерацию адресов с постмодификацией. По умолчанию используются msplit-lohi, -mpost-inc и -mpost-modify.
-
-mnovect-double -
Изменить предпочтительный режим SIMD на SImode. По умолчанию используется -mvect-double, задающий DImode в качестве предпочтительного режима SIMD.
-
-max-vect-align=num -
Максимальное выравнивание типов векторного режима SIMD. Значение num может быть 4 или 8. По умолчанию используется 8. Обратите внимание, что это изменяет ABI, хотя интерфейсы многих библиотечных функций остаются без изменений, если в них не используются векторные режимы SIMD, влияющие на размер и/или выравнивание соответствующих типов.
-
-msplit-vecmove-early -
Разбивать перемещения векторов на перемещения отдельных слов до этапа распределения регистров. Теоретически это может улучшить распределение регистров, однако пока, как правило, наблюдается обратный эффект.
-
-m1reg-reg -
Указать регистр для хранения константы −1, что ускоряет загрузку небольших отрицательных констант и некоторых битовых масок. Допустимые значения для reg — «r43» и «r63», указывающие на использование соответствующего регистра в качестве фиксированного, а также «none», означающее, что для этой цели не используется ни один регистр. По умолчанию используется -m1reg-none.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Adapteva-Epiphany-Options.html