3.17.42 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. -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 toolchain.
-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
- Устанавливает модель атомных операций и дополнительные параметры в виде списка, разделённого запятыми. Подробнее об атомных встроенных функциях см. в __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.bopcode для__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 - Установить стратегию деления, используемую для операций целочисленного деления. Для SHmedia strategy может быть одним из:
- ‘
fp’ - Выполняет операцию с плавающей точкой. Это очень низкоэффективная, но требует только нескольких инструкций, поэтому может быть хорошим выбором, если ваш код имеет достаточно легко используемых ILP (Instruction-Level Parallelism), чтобы компилятор мог распланировать инструкции с плавающей точкой вместе с другими инструкциями. Деление на ноль вызывает исключение с плавающей точкой.
- ‘
inv’ - Использует целочисленные операции для вычисления обратного значения делителя, а затем умножает делимое на обратное значение. Эта стратегия позволяет CSE (Common Subexpression Elimination) и подъёму вычисления обратного значения. Деление на ноль вычисляет неопределённый результат, но не вызывает ошибку.
- ‘
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. -
-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.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/SH-Options.html