3.19.48 Параметры SH ¶
Эти параметры «-m» определены для реализаций SH:
-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-
Компилировать код для процессора в режиме big-endian.
-ml-
Компилировать код для процессора в режиме little-endian.
-mdalign-
Выравнивать переменные типа double на 64-битовых границах. Обратите внимание, что это изменяет правила вызова функций, и поэтому некоторые функции из стандартной библиотеки C не будут работать, пока вы не перекомпилируете их с помощью -mdalign.
-mrelax-
Укорачивать некоторые ссылки на адреса во время линковки, когда это возможно; использует опцию линковщика -relax.
-mbigtable-
Использовать 32-битовые смещения в таблицах
switch. По умолчанию используются 16-битовые смещения. -mbitops-
Включить использование инструкций по обработке битов на SH2A.
-mfmovd-
Включить использование инструкции
fmovd. См. -mdalign для ограничений выравнивания. -mrenesas-
Соблюдать правила вызова, определённые Renesas.
-mno-renesas-
Соблюдать правила вызова, определённые для GCC до появления правил Renesas. Эта опция по умолчанию для всех целей SH toolchain.
-mnomacsave-
Отметить регистр
MACкак call-clobbered, даже если задана опция -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-
Эта опция устарела. Она выравнивает структуры до кратных четырём байтам, что несовместимо с SH ABI.
-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-
При генерации позиционно-независимого кода вызывать функции, используя таблицу глобальных смещений (Global Offset Table) вместо таблицы связывания процедур (Procedure Linkage Table).
-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-
Установите имя функции библиотеки, используемой для 32-битного знакового деления, на name. Это влияет только на имя, используемое в стратегиях деления ‘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-11.4.0/gcc/SH-Options.html