3.20.45 Параметры SH
Для реализаций SH определены следующие параметры «-m»:
-
-m1 -
Генерировать код для SH1.
-
-m2 -
Генерировать код для SH2.
-m2e-
Генерировать код для SH2e.
-
-m2a-nofpu -
Генерировать код для SH2a без FPU или для SH2a-FPU так, чтобы блок операций с плавающей точкой не использовался.
-
-m2a-single-only -
Генерировать код для SH2a-FPU так, чтобы операции с плавающей точкой двойной точности не использовались.
-
-m2a-single -
Генерировать код для SH2a-FPU, предполагая, что блок операций с плавающей точкой по умолчанию работает в режиме одинарной точности.
-
-m2a -
Генерировать код для SH2a-FPU, предполагая, что блок операций с плавающей точкой по умолчанию работает в режиме двойной точности.
-
-m3 -
Генерировать код для SH3.
-
-m3e -
Генерировать код для SH3e.
-
-m4-nofpu -
Генерировать код для SH4 без блока операций с плавающей точкой.
-
-m4-single-only -
Генерировать код для SH4 с блоком операций с плавающей точкой, поддерживающим только арифметику одинарной точности.
-
-m4-single -
Генерировать код для SH4, предполагая, что блок операций с плавающей точкой по умолчанию работает в режиме одинарной точности.
-
-m4 -
Генерировать код для SH4.
-
-m4-100 -
Генерировать код для SH4-100.
-
-m4-100-nofpu -
Генерировать код для SH4-100 так, чтобы блок операций с плавающей точкой не использовался.
-
-m4-100-single -
Генерировать код для SH4-100, предполагая, что блок операций с плавающей точкой по умолчанию работает в режиме одинарной точности.
-
-m4-100-single-only -
Генерировать код для SH4-100 так, чтобы операции с плавающей точкой двойной точности не использовались.
-
-m4-200 -
Генерировать код для SH4-200.
-
-m4-200-nofpu -
Генерировать код для SH4-200 так, чтобы блок операций с плавающей точкой не использовался.
-
-m4-200-single -
Генерировать код для SH4-200, предполагая, что блок операций с плавающей точкой по умолчанию работает в режиме одинарной точности.
-
-m4-200-single-only -
Генерировать код для SH4-200 так, чтобы операции с плавающей точкой двойной точности не использовались.
-
-m4-300 -
Генерировать код для SH4-300.
-
-m4-300-nofpu -
Генерировать код для SH4-300 так, чтобы блок операций с плавающей точкой не использовался.
-
-m4-300-single -
Генерировать код для SH4-300 так, чтобы операции с плавающей точкой двойной точности не использовались.
-
-m4-300-single-only -
Генерировать код для SH4-300 так, чтобы операции с плавающей точкой двойной точности не использовались.
-
-m4-340 -
Генерировать код для SH4-340 (без MMU и FPU).
-
-m4-500 -
Генерировать код для SH4-500 (без FPU). Передавать ассемблеру параметр -isa=sh4-nofpu.
-
-m4a-nofpu -
Генерировать код для SH4al-dsp или для SH4a так, чтобы блок операций с плавающей точкой не использовался.
-
-m4a-single-only -
Генерировать код для SH4a так, чтобы операции с плавающей точкой двойной точности не использовались.
-
-m4a-single -
Генерировать код для SH4a, предполагая, что блок операций с плавающей точкой по умолчанию работает в режиме одинарной точности.
-
-m4a -
Генерировать код для SH4a.
-
-m4al -
То же, что и -m4a-nofpu, но дополнительно неявно передаёт ассемблеру параметр -dsp. В настоящее время GCC не генерирует инструкции DSP.
-
-mb -
Компилировать код для процессора в режиме прямого порядка байтов.
-
-ml -
Компилировать код для процессора в режиме обратного порядка байтов.
-
-mdalign -
Выравнивать значения double по 64-битным границам. Обратите внимание, что это изменяет соглашения о вызовах, поэтому некоторые функции стандартной библиотеки C не будут работать, пока вы предварительно не перекомпилируете её с параметром -mdalign.
-
-mrelax -
По возможности сокращать некоторые ссылки на адреса на этапе компоновки; для этого используется параметр компоновщика -relax.
-
-mbigtable -
Использовать 32-битные смещения в таблицах
switch. По умолчанию используются 16-битные смещения. -
-mbitops -
Разрешить использование инструкций манипуляции битами на SH2A.
-
-mfmovd -
Разрешить использование инструкции
fmovd. Ограничения на выравнивание см. в описании -mdalign. -
-mrenesas -
Соблюдать соглашения о вызовах, определённые Renesas.
-
-mno-renesas -
Соблюдать соглашения о вызовах, определённые для GCC до появления соглашений Renesas. Этот параметр используется по умолчанию для всех целевых платформ инструментальной цепочки SH.
-
-mnomacsave -
Пометить регистр
MACкак затираемый при вызове, даже если указан -mrenesas. -
-mieee -mno-ieee-
Управлять соответствием IEEE для сравнений чисел с плавающей точкой, которое влияет на обработку случаев, когда результат сравнения неупорядочен. По умолчанию -mieee включается неявно. Если включён -ffinite-math-only, неявно задаётся -mno-ieee, что ускоряет сравнения чисел с плавающей точкой «больше или равно» и «меньше или равно». Эти неявные настройки можно переопределить, указав -mieee или -mno-ieee.
-
-minline-ic_invalidate -
Встраивать код для инвалидации записей кэша инструкций после настройки трамплинов вложенных функций. Этот параметр не действует, если задан -musermode, а выбранный параметр генерации кода (например, -m4) не допускает использования инструкции
icbi. Если выбранный параметр генерации кода не допускает использования инструкцииicbiи не задан -musermode, встроенный код напрямую изменяет массив адресов кэша инструкций с помощью ассоциативной записи. Для этого требуется привилегированный режим во время выполнения, кроме того, операция завершается с ошибкой, если строка кэша была отображена через TLB, а затем отображение было удалено. -
-misize -
Выводить размер и расположение инструкций в ассемблерном коде.
-
-mpadstruct -
Этот параметр устарел. Он дополняет структуры до размера, кратного 4 байтам, что несовместимо с ABI SH.
-
-matomic-model=model -
Задаёт модель атомарных операций и дополнительные параметры в виде списка, разделённого запятыми. Сведения о встроенных атомарных функциях см. в разделе Встроенные функции для атомарных операций с учётом модели памяти. Поддерживаются следующие модели и параметры:
- «none»
-
Отключить генерируемые компилятором атомарные последовательности и использовать вызовы библиотечных функций для атомарных операций. Это значение используется по умолчанию, если целевая платформа не является
sh*-*-linux*. - «soft-gusa»
-
Генерировать совместимые с GNU/Linux программные атомарные последовательности gUSA для встроенных атомарных функций. Для сгенерированных атомарных последовательностей требуется дополнительная поддержка в коде обработки прерываний/исключений системы; они подходят только для одноядерных систем SH3* и SH4*. Этот параметр включён по умолчанию, если целевая платформа —
sh*-*-linux*и SH3* или SH4*. Для целевой платформы SH4A этот параметр также частично использует аппаратные атомарные инструкцииmovli.lиmovco.lдля генерации более эффективного кода, если не указан параметр «strict». - «soft-tcb»
-
Генерировать программные атомарные последовательности, использующие переменную в блоке управления потоком. Это вариант последовательностей gUSA, который также можно использовать на целевых платформах SH1* и SH2*. Для сгенерированных атомарных последовательностей требуется дополнительная поддержка в коде обработки прерываний/исключений системы; они подходят только для одноядерных систем. При использовании этой модели необходимо также указать параметр «gbr-offset=».
- «soft-imask»
-
Генерировать программные атомарные последовательности, временно отключающие прерывания путём установки
SR.IMASK = 1111. Эта модель работает только при выполнении программы в привилегированном режиме и подходит только для одноядерных систем. Дополнительная поддержка в коде обработки прерываний/исключений системы не требуется. Эта модель включена по умолчанию, если целевая платформа —sh*-*-linux*и SH1* или SH2*. - «hard-llcs»
-
Генерировать аппаратные атомарные последовательности, используя только инструкции
movli.lиmovco.l. Доступно только на SH4A и подходит для многоядерных систем. Поскольку аппаратные инструкции поддерживают доступ к атомарным переменным только размером 32 бита, доступ к переменным размером 8 или 16 бит эмулируется с помощью 32-битных операций. Код, скомпилированный с этим параметром, также совместим с системами обработки прерываний/исключений, использующими другие программные модели атомарных операций, если он выполняется на системе SH4A. Для этой модели дополнительная поддержка в коде обработки прерываний/исключений системы не требуется. - «gbr-offset=»
-
Этот параметр задаёт смещение в байтах переменной в структуре блока управления потоком, которая должна использоваться сгенерированными атомарными последовательностями при выборе модели «soft-tcb». Для других моделей этот параметр игнорируется. Указанное значение должно быть целым числом, кратным четырём, в диапазоне 0–1020.
- «strict»
-
Этот параметр запрещает совместное использование нескольких моделей атомарных операций, даже если они совместимы, и заставляет компилятор генерировать атомарные последовательности только указанной модели.
-
-mtas -
Генерировать код операции
tas.bдля__atomic_test_and_set. Обратите внимание, что в зависимости от конкретной конфигурации аппаратного и программного обеспечения это может снизить общую производительность из-за сброса строк кэша операндов, который подразумевается инструкциейtas.b. На многоядерных процессорах SH4A инструкциюtas.bследует использовать с осторожностью, поскольку при некоторых конфигурациях кэша она может привести к повреждению данных. -
-mprefergot -
При генерации позиционно-независимого кода выполнять вызовы функций через таблицу глобальных смещений, а не через таблицу связывания процедур.
-
-musermode -mno-usermode-
Запретить (разрешить) компилятору генерировать код привилегированного режима. Указание -musermode также подразумевает -mno-inline-ic_invalidate, если встроенный код не будет работать в пользовательском режиме. Параметр -musermode используется по умолчанию, если целевая платформа —
sh*-*-linux*. Для целевых платформ SH1* или SH2* параметр -musermode не действует, поскольку пользовательского режима нет. -
-multcost=number -
Задать предполагаемую стоимость инструкции умножения.
-
-mdiv=strategy -
Задать стратегию деления для операций целочисленного деления. strategy может принимать одно из следующих значений:
- «call-div1»
-
Вызывать библиотечную функцию, которая выполняет операцию с помощью инструкции деления с одним шагом
div1. При делении на ноль вычисляется неопределённый результат, исключение не возникает. Это значение используется по умолчанию, кроме случаев SH4, SH2A и SHcompact. - «call-fp»
-
Вызывать библиотечную функцию, которая выполняет операцию с плавающей точкой двойной точности. При делении на ноль возникает исключение с плавающей точкой. Это значение используется по умолчанию для SHcompact с FPU. Если задать его для целевых платформ без FPU двойной точности, по умолчанию будет использоваться
call-div1. - «call-table»
-
Вызывать библиотечную функцию, которая использует таблицу поиска для малых делителей и инструкцию
div1с выбором варианта для больших делителей. При делении на ноль вычисляется неопределённый результат, исключение не возникает. Это значение используется по умолчанию для SH4. Если задать его для целевых платформ без инструкций динамического сдвига, по умолчанию будет использоватьсяcall-div1.
Если стратегия деления не указана, выбирается стратегия по умолчанию для текущей целевой платформы. Для SH2A по умолчанию используются инструкции
divsиdivuвместо вызовов библиотечных функций. -
-maccumulate-outgoing-args -
Резервировать место для выходных аргументов один раз в прологе функции, а не перед каждым вызовом. Обычно это повышает производительность и уменьшает размер кода. Также это необходимо для раскрутки стека, чтобы избежать изменения кадра стека в условном коде.
-
-mdivsi3_libfunc=name -
Задать name в качестве имени библиотечной функции для деления знаковых 32-битных чисел. Это влияет только на имя, используемое в стратегиях деления «call»; компилятор по-прежнему ожидает те же наборы входных, выходных и затираемых регистров, что и без этого параметра.
-
-mfixed-range=register-range -
Генерировать код, рассматривая указанный диапазон регистров как фиксированные регистры. Фиксированный регистр — это регистр, который не может использоваться распределителем регистров. Это полезно при компиляции кода ядра. Диапазон регистров задаётся двумя регистрами, разделёнными дефисом. Можно указать несколько диапазонов регистров, разделив их запятыми.
-
-mbranch-cost=num -
Считать, что стоимость инструкции перехода равна num. Чем выше значение, тем больше компилятор старается по возможности генерировать код без переходов. Если значение не указано, оно выбирается в зависимости от типа процессора, для которого выполняется компиляция.
-
-mzdcbranch -mno-zdcbranch-
Считать (не считать), что условные инструкции перехода с нулевым смещением
btиbfявляются быстрыми. Если указан -mzdcbranch, компилятор отдаёт предпочтение последовательностям кода с переходами с нулевым смещением. Этот параметр включён по умолчанию при генерации кода для SH4 и SH4A. Его можно явно отключить, указав -mno-zdcbranch. -
-mcbranch-force-delay-slot -
Принудительно использовать слоты задержки для условных переходов, заполняя слот задержки инструкцией
nop, если не удаётся найти подходящую инструкцию. По умолчанию этот параметр отключён. Его можно включить для обхода аппаратных ошибок, подобных обнаруженным в исходной версии SH7055. -
-mfused-madd -mno-fused-madd-
Генерировать код, использующий (не использующий) инструкции умножения и накопления с плавающей точкой. Эти инструкции генерируются по умолчанию при использовании аппаратной поддержки операций с плавающей точкой. Аппаратно-зависимый параметр -mfused-madd теперь преобразуется в независимый от платформы параметр -ffp-contract=fast, а -mno-fused-madd — в -ffp-contract=off.
-
-mfsca -mno-fsca-
Разрешить или запретить компилятору генерировать инструкцию
fscaдля аппроксимации синуса и косинуса. Параметр -mfsca необходимо использовать вместе с -funsafe-math-optimizations. Он включён по умолчанию при генерации кода для SH4A. Использование -mno-fsca отключает аппроксимацию синуса и косинуса, даже если задан -funsafe-math-optimizations. -
-mfsrra -mno-fsrra-
Разрешить или запретить компилятору генерировать инструкцию
fsrraдля аппроксимации обратного квадратного корня. Параметр -mfsrra необходимо использовать вместе с -funsafe-math-optimizations и -ffinite-math-only. Он включён по умолчанию при генерации кода для SH4A. Использование -mno-fsrra отключает аппроксимацию обратного квадратного корня, даже если заданы -funsafe-math-optimizations и -ffinite-math-only. -
-mpretend-cmove -
Отдавать предпочтение условным переходам с нулевым смещением для шаблонов инструкций условного перемещения. Это может ускорить код на процессоре SH4.
-
-mfdpic -
Генерировать код с использованием ABI FDPIC.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/SH-Options.html