3.17.41 SH Options
These ‘-m’ options are defined for the SH implementations:
-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.
-m5-32media-
Генерировать 32-битный код для SHmedia.
-m5-32media-nofpu-
Генерировать 32-битный код для SHmedia таким образом, что блок плавающей точки не используется.
-m5-64media-
Генерировать 64-битный код для SHmedia.
-m5-64media-nofpu-
Генерировать 64-битный код для SHmedia таким образом, что блок плавающей точки не используется.
-m5-compact-
Генерировать код для SHcompact.
-m5-compact-nofpu-
Генерировать код для SHcompact таким образом, что блок плавающей точки не используется.
-mb-
Компилировать код для процессора в режиме big-endian.
-ml-
Компилировать код для процессора в режиме little-endian.
-mdalign-
Выравнивать числа с плавающей точкой двойной точности на границах 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 байтам, что несовместимо с SH ABI.
-matomic-model=model
-
Устанавливает модель атомных операций и дополнительные параметры в виде списка, разделённого запятыми. Подробную информацию об атомных встроенных функциях см. в разделе __atomic Builtins. Поддерживаются следующие модели и параметры:
- ‘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-
При генерации позиционно-независимого кода генерировать вызовы функций, используя таблицу глобальных смещений (GOT), вместо таблицы связывания процедур (PLT).
-musermode-mno-usermode-
Не разрешать (разрешить) компилятору генерировать код для привилегированного режима. Указание -musermode также подразумевает -mno-inline-ic_invalidate, если встроенный код не будет работать в пользовательском режиме. -musermode является значением по умолчанию, когда целевая платформа
sh*-*-linux*. Если целевая платформа SH1* или SH2*, -musermode не имеет эффекта, так как пользовательского режима нет. -multcost=number-
Установить стоимость, предполагаемую для инструкции умножения.
-mdiv=strategy-
Установить стратегию деления, используемую для целочисленных операций деления. Для SHmedia strategy может быть одним из следующих:
- ‘fp’
-
Выполняет операцию с плавающей точкой. Это имеет очень высокую задержку, но требует всего нескольких инструкций, поэтому это может быть хорошим выбором, если ваш код имеет достаточно легко используемого ILP, чтобы позволить компилятору планировать инструкции с плавающей точкой вместе с другими инструкциями. Деление на ноль вызывает исключение с плавающей точкой.
- ‘inv’
-
Использует целочисленные операции для вычисления обратной величины делителя, а затем умножает делимое на обратную величину. Эта стратегия позволяет CSE и перемещение вычисления обратной величины. Деление на ноль вычисляет неопределённый результат, но не вызывает ошибку.
- ‘inv:minlat’
-
Вариант ‘inv’, где, если не было найдено возможностей CSE или перемещения, или если вся операция была перенесена в то же место, последние этапы вычисления обратной величины переплетаются с окончательным умножением, чтобы уменьшить общую задержку, ценой использования нескольких дополнительных инструкций и, следовательно, предоставляя меньше возможностей планирования с другим кодом.
- ‘call’
-
Вызывает библиотечную функцию, которая обычно реализует стратегию ‘inv:minlat’. Это обеспечивает высокую плотность кода для
m5-*media-nofpuкомпиляций. - ‘call2’
-
Использует другую точку входа в той же библиотечной функции, где предполагается, что указатель на таблицу поиска уже создан, что позволяет оптимизировать загрузку указателя с помощью CSE и перемещения кода.
- ‘inv:call’
- ‘inv:call2’
- ‘inv:fp’
-
Использует алгоритм ‘inv’ для первоначальной генерации кода, но если код остаётся неоптимизированным, возвращается к стратегиям ‘call’, ‘call2’ или ‘fp’ соответственно. Обратите внимание, что потенциально вызывающий ошибку побочный эффект деления на ноль выполняется отдельной инструкцией, поэтому возможно, что все целочисленные инструкции перемещены, но метка для побочного эффекта остаётся на своём месте. Перекомпиляция в операции с плавающей точкой или вызов в этом случае невозможны.
- ‘inv20u’
- ‘inv20l’
-
Варианты стратегии ‘inv:minlat’. В случае, если вычисление обратной величины не отделено от умножения, они ускоряют деление, когда делимое помещается в 20 бит (плюс знак, если применимо), вставив проверку, чтобы пропустить ряд операций в этом случае; эта проверка замедляет случай с большими делимыми. ‘inv20u’ предполагает, что случай с таким маленьким делимым маловероятен, а ‘inv20l’ предполагает, что он вероятен.
Для платформ, отличных от SHmedia, 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’ и ‘inv:call’, и компилятор по-прежнему ожидает те же наборы регистров ввода/вывода/изменения, что и в случае, если этот параметр отсутствует.
-mfixed-range=register-range-
Генерировать код, обрабатывающий указанный диапазон регистров как фиксированные регистры. Фиксированный регистр — это регистр, который планировщик регистров не может использовать. Это полезно при компиляции кода ядра. Диапазон регистров задаётся двумя регистрами, разделёнными дефисом. Несколько диапазонов регистров могут быть указаны, разделённые запятой.
-mindexed-addressing-
Включить использование индексированного режима адресации для SHmedia32/SHcompact. Это безопасно только если аппаратное обеспечение и/или операционная система реализуют 32-битную семантику циклического обхода для индексированного режима адресации. Архитектура допускает реализацию процессоров с 64-битным MMU, которые ОС может использовать для получения 32-битного адресования, но так как ни одна текущая аппаратная реализация не поддерживает это или любой другой способ, чтобы сделать индексированный режим адресации безопасным для использования в 32-битном ABI, значение по умолчанию — -mno-indexed-addressing.
-mgettrcost=number-
Установить стоимость, предполагаемую для инструкции
gettr, на number. Значение по умолчанию — 2, если -mpt-fixed в эффекте, в противном случае — 100. -mpt-fixed
-
Предполагается, что инструкции
pt*не будут вызывать ловушку. Это, как правило, генерирует лучше расписанный код, но небезопасно на текущем оборудовании. Текущее определение архитектуры гласит, чтоptabsиptrelвызывают ловушку, когда целевой регистр побитово И с 3 даёт 3. Это непреднамеренно делает небезопасным планирование этих инструкций перед ветвлением или их вынос из цикла. Например,__do_global_ctors, часть libgcc, которая выполняет конструкторы при запуске программы, вызывает функции в списке, который ограничен значением -1. С опцией -mpt-fixed,ptabsвыполняется до проверки на -1. Это означает, что все конструкторы будут работать немного быстрее, но когда цикл доходит до конца списка, программа аварийно завершается, потому чтоptabsзагружает -1 в целевой регистр.Поскольку эта опция небезопасна для любого оборудования, реализующего текущую спецификацию архитектуры, по умолчанию установлено значение -mno-pt-fixed. Если не указано явно с помощью -mgettrcost, -mno-pt-fixed также подразумевает -mgettrcost=100; это препятствует тому, чтобы регистровый аллокатор использовал целевые регистры для хранения обычных целых чисел.
-minvalid-symbols-
Предполагается, что символы могут быть недействительными. Обычные символы функций, сгенерированные компилятором, всегда действительны для загрузки с помощью
movi/shori/ptabsилиmovi/shori/ptrel, но с помощью ассемблерных и/или линковщических ухищрений можно сгенерировать символы, которые заставляютptabsилиptrelвызывать ловушку. Эта опция имеет смысл только при использовании -mno-pt-fixed. Она предотвращает межблочное CSE, вынос и большинство планирований загрузки символов. По умолчанию установлено значение -mno-invalid-symbols. -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.
Далее: Опции Solaris 2, Предыдущее: Опции Score, Вверх: Опции подмодели [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/SH-Options.html