Spec-Zone.ru › GCC 5

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

Spec-Zone.ru

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