Spec-Zone.ru › GCC 4

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.b opcode для __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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API