3.19.22 Параметры LoongArch
Эти параметры командной строки определены для целей LoongArch:
-
-march=cpu-type -
Генерировать инструкции для типа машины cpu-type. В отличие от -mtune=cpu-type, который просто настраивает сгенерированный код для указанного типа cpu-type, -march=cpu-type позволяет GCC генерировать код, который может вообще не выполняться на процессорах, отличных от указанного. Указание -march=cpu-type подразумевает -mtune=cpu-type, за исключением случаев, когда указано иное.
Возможные значения для cpu-type:
- ‘native’
Выбирает процессор для генерации кода во время компиляции, определяя тип процессора компилирующей машины. Использование -march=native включает все подмножества инструкций, поддерживаемые локальной машиной (поэтому результат может не выполняться на других машинах). Использование -mtune=native создаёт код, оптимизированный для локальной машины в соответствии с ограничениями выбранного набора инструкций.
- ‘loongarch64’
Универсальный процессор с 64-битными расширениями.
- ‘la464’
Процессор LoongArch LA464 с LBT, LSX, LASX, LVZ.
-
-mtune=cpu-type -
Оптимизировать вывод для данного процессора, указанного по имени микроархитектуры.
-
-mabi=base-abi-type -
Генерировать код для указанного соглашения о вызовах. base-abi-type может быть одним из следующих:
- ‘lp64d’
Использует 64-битные регистры общего назначения и 32/64-битные регистры с плавающей точкой для передачи параметров. Модель данных — LP64, где ‘int’ — 32 бита, а ‘long int’ и указатели — 64 бита.
- ‘lp64f’
Использует 64-битные регистры общего назначения и 32-битные регистры с плавающей точкой для передачи параметров. Модель данных — LP64, где ‘int’ — 32 бита, а ‘long int’ и указатели — 64 бита.
- ‘lp64s’
Использует 64-битные регистры общего назначения и не использует регистры с плавающей точкой для передачи параметров. Модель данных — LP64, где ‘int’ — 32 бита, а ‘long int’ и указатели — 64 бита.
-
-mfpu=fpu-type -
Генерировать код для указанного типа FPU, который может быть одним из:
- ‘64’
Разрешить использование аппаратных инструкций с плавающей точкой для 32- и 64-битных операций.
- ‘32’
Разрешить использование аппаратных инструкций с плавающей точкой для 32-битных операций.
- ‘none’
- ‘0’
Запретить использование аппаратных инструкций с плавающей точкой.
-
-msoft-float -
Принудительно задать -mfpu=none и запретить использование регистров с плавающей точкой для передачи параметров. Этот параметр может изменить целевой ABI.
-
-msingle-float -
Принудительно задать -mfpu=32 и разрешить использование 32-битных регистров с плавающей точкой для передачи параметров. Этот параметр может изменить целевой ABI.
-
-mdouble-float -
Принудительно задать -mfpu=64 и разрешить использование 32/64-битных регистров с плавающей точкой для передачи параметров. Этот параметр может изменить целевой ABI.
-
-mbranch-cost=n -
Установить стоимость ветвлений примерно в n инструкций.
-
-mcheck-zero-division -mno-check-zero-divison-
Перехватить (не перехватить) при делении на ноль. По умолчанию используется -mcheck-zero-division для -O0 или -Og и -mno-check-zero-division для других уровней оптимизации.
-
-mcond-move-int -mno-cond-move-int-
Включить (выключить) условные переходы для целочисленных данных в регистрах общего назначения. По умолчанию используется -mcond-move-int.
-
-mcond-move-float -mno-cond-move-float-
Включить (выключить) условные переходы для регистров с плавающей точкой. По умолчанию используется -mcond-move-float.
-
-mmemcpy -mno-memcpy-
Принудительно использовать (не использовать)
memcpyдля блочных перемещений, отличных от тривиальных. По умолчанию используется -mno-memcpy, что позволяет GCC инлайнить большинство копий постоянного размера. Установка уровня оптимизации на -Os также принудительно используетmemcpy, но -mno-memcpy может переопределить это поведение, если оно явно указано, независимо от порядка этих параметров в командной строке. -
-mstrict-align -mno-strict-align-
Избегать или разрешать генерацию обращений к памяти, которые могут не быть выровнены на границе естественного объекта, как описано в спецификации архитектуры. По умолчанию используется -mno-strict-align.
-
-msmall-data-limit=number -
Поместить глобальные и статические данные размером меньше number байт в специальный раздел (на некоторых целях). Значение по умолчанию — 0.
-
-mmax-inline-memcpy-size=n -
Встраивать все перемещения блоков (такие как вызовы
memcpyили копии структур), меньшие или равные n байтам. Значение по умолчанию для n равно 1024. -mcmodel=code-model-
Установить модель кода на одну из:
- ‘tiny-static (Не реализовано пока)’
- ‘tiny (Не реализовано пока)’
- ‘normal’
-
Сегмент текста должен находиться в адресном пространстве до 128 МБ. Сегмент данных должен находиться в адресном пространстве до 2 ГБ.
- ‘medium’
-
Сегмент текста и сегмент данных должны находиться в адресном пространстве до 2 ГБ.
- ‘large (Не реализовано пока)’
- ‘extreme’
Этот режим не ограничивает размер сегмента кода и сегмента данных. Параметр -mcmodel=extreme несовместим с -fplt и -mno-explicit-relocs.
Модель кода по умолчанию —
normal. -
-mexplicit-relocs -mno-explicit-relocs-
Использовать или не использовать операторы перемещения ассемблера при работе со символическими адресами. Альтернатива — использовать макросы ассемблера, которые могут ограничить планирование инструкций, но позволяют релаксацию линкера. Значение по умолчанию для параметра определяется на этапе сборки GCC, исходя из возможностей ассемблера и значения
-mrelax:-mexplicit-relocsесли ассемблер поддерживает операторы перемещения, но-mrelaxне включено,-mno-explicit-relocsв противном случае. -
-mdirect-extern-access -mno-direct-extern-access-
Не использовать или использовать GOT для доступа к внешним символам. По умолчанию используется -mno-direct-extern-access: GOT используется для внешних символов с видимостью по умолчанию, но не используется для других внешних символов.
При использовании -mdirect-extern-access, GOT не используется, и все внешние символы адресуются относительно PC. Это только подходит для сред, где не выполняется динамическая ссылка, таких как прошивки, ядра ОС, исполняемые файлы, связанные с -static или -static-pie. -mdirect-extern-access несовместим с -fPIC или -fpic.
-mrelax-mno-relax-
Использовать (не использовать) возможности релаксации линкера. Если включен -mpass-mrelax-to-as, этот параметр также передаётся ассемблеру. Значение по умолчанию определяется на этапе сборки GCC, определяя поддержку соответствующего ассемблера: -mrelax, если ассемблер поддерживает параметр -mrelax и релаксацию условных ветвлений (она требуется, или
.alignдирективы и инструкции условных ветвлений в выводимом коде ассемблера GCC могут быть отклонены ассемблером из-за переполнения перемещений), -mno-relax в противном случае. -mpass-mrelax-to-as-mno-pass-mrelax-to-asПередавать (не передавать) параметр -mrelax или -mno-relax ассемблеру. Значение по умолчанию определяется на этапе сборки GCC, определяя поддержку соответствующего ассемблера: -mpass-mrelax-to-as, если ассемблер поддерживает параметр -mrelax, -mno-pass-mrelax-to-as в противном случае. Этот параметр в основном полезен для отладки или взаимодействия с ассемблерами, отличными от ассемблера времени сборки.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/LoongArch-Options.html