3.19.35 Параметры Nios II ¶
Вот параметры, определённые для процессора Altera Nios II.
-G num-
Разместить глобальные и статические объекты размером не более num байт в секциях small data или BSS вместо обычных секций data или BSS. Значение по умолчанию для num равно 8.
-mgpopt=option-mgpopt-mno-gpopt-
Генерировать (не генерировать) доступ к GP-относительным адресам. Признаются следующие имена параметров:
- ‘none’
-
Не генерировать GP-относительные адреса.
- ‘local’
-
Генерировать GP-относительные адреса для объектов малого размера, которые не являются внешними, слабыми или неинициализированными общими символами. Также использовать GP-относительное адресование для объектов, явно помещённых в секцию малых данных с помощью атрибута
section. - ‘global’
-
Как для ‘local’, но также генерировать GP-относительные адреса для малых объектов данных, которые являются внешними, слабыми или общими. Если вы используете этот параметр, вам нужно убедиться, что все части вашей программы (включая библиотеки) скомпилированы с одинаковым значением -G.
- ‘data’
-
Генерировать GP-относительные адреса для всех объектов данных в программе. Если вы используете этот параметр, весь сегмент данных и BSS вашей программы должен уместиться в 64К памяти, и вы должны использовать соответствующий скрипт компоновщика, чтобы разместить их в адресном пространстве глобального указателя.
- ‘all’
-
Генерировать GP-относительные адреса для указателей функций, а также указателей данных. Если вы используете этот параметр, весь текст, данные и BSS вашей программы должны поместиться в 64К памяти, и вы должны использовать соответствующий скрипт компоновщика, чтобы разместить их в адресном пространстве глобального указателя.
-mgpopt эквивалентно -mgpopt=local, а -mno-gpopt эквивалентно -mgpopt=none.
Значение по умолчанию — -mgpopt, за исключением случаев, когда заданы -fpic или -fPIC для генерации позиционно-независимого кода. Обратите внимание, что Nios II ABI не допускает GP-относительных обращений из разделяемых библиотек.
Возможно, вам нужно явно указать -mno-gpopt при построении программ, содержащих большое количество данных малого размера, включая большие GOT-секции данных. В этом случае 16-битного смещения для GP-относительного адресования может быть недостаточно, чтобы обеспечить доступ ко всей секции малых данных.
-mgprel-sec=regexp-
Этот параметр указывает дополнительные имена секций, которые можно получить с помощью GP-относительного адресования. Он наиболее полезен в сочетании с атрибутами
sectionв объявлениях переменных (см. Общие атрибуты переменных) и пользовательским скриптом компоновщика. regexp — это Расширённое регулярное выражение POSIX.Этот параметр не влияет на поведение параметра -G, и указанные секции добавляются к стандартным секциям
.sdataи.sbssмалых данных, распознаваемых параметром -mgpopt. -mr0rel-sec=regexp-
Этот параметр указывает имена секций, которые могут быть получены с помощью 16-битного смещения от
r0; то есть в низких 32К или высоких 32К 32-битного адресного пространства. Он наиболее полезен в сочетании с атрибутамиsectionв объявлениях переменных (см. Общие атрибуты переменных) и пользовательским скриптом компоновщика. regexp — это Расширённое регулярное выражение POSIX.В отличие от использования GP-относительного адресования для малых данных, нулевое адресование по умолчанию никогда не генерируется, и в стандартных скриптах компоновщика нет стандартных имён секций для секций в низких или высоких областях памяти.
-mel-meb-
Генерировать код с малой (по умолчанию) или большой (экспериментальная версия) эндианностью, соответственно.
-march=arch-
Это указывает имя целевой архитектуры Nios II. GCC использует это имя, чтобы определить, какие инструкции могут быть выпущены при генерации кода ассемблера. Допустимые имена: ‘r1’, ‘r2’.
Препроцессорная макрос
__nios2_arch__доступна программам со значением 1 или 2, указывающим целевой уровень ISA. -mbypass-cache-mno-bypass-cache-
Принудительно заставлять все инструкции загрузки и сохранения всегда обходить кэш, используя варианты инструкций ввода/вывода. По умолчанию кэш не обходится.
-mno-cache-volatile-mcache-volatile-
Доступ к переменной памяти, которая не может использовать кэш, используя варианты инструкций загрузки и сохранения ввода/вывода. По умолчанию кэш не обходится.
-mno-fast-sw-div-mfast-sw-div-
Не использовать таблично-основанное быстрое деление для малых чисел. По умолчанию используется быстрое деление при -O3 и выше.
-mno-hw-mul-mhw-mul-mno-hw-mulx-mhw-mulx-mno-hw-div-mhw-div-
Включить или отключить вывод
mul,mulxиdivсемейств инструкций компилятором. По умолчанию выводитсяmul, и не выводятсяdivиmulx. -mbmx-mno-bmx-mcdx-mno-cdx-
Включить или отключить генерацию инструкций Nios II R2 BMX (манипулирование битами) и CDX (плотность кода). Включение этих инструкций также требует -march=r2. Поскольку эти инструкции являются необязательными расширениями архитектуры R2, по умолчанию они не выводятся.
-mcustom-insn=N-mno-custom-insn
-
Каждый параметр -mcustom-insn=N позволяет использовать пользовательскую инструкцию с кодировкой N при генерации кода, использующего insn. Например, -mcustom-fadds=253 генерирует пользовательскую инструкцию 253 для операций сложения с плавающей точкой одинарной точности вместо стандартного поведения использования вызова библиотеки.
Поддерживаются следующие значения insn. За исключением случаев, указанных отдельно, операции с плавающей точкой должны быть реализованы с использованием стандартной семантики IEEE 754 и соответствовать непосредственно операторам C или эквивалентным встроенным функциям GCC (см. Другие встроенные функции, предоставляемые GCC).
Плавающая точка одинарной точности:
- ‘fadds’, ‘fsubs’, ‘fdivs’, ‘fmuls’
-
Двоичные арифметические операции.
- ‘fnegs’
-
Унарное отрицание.
- ‘fabss’
-
Унарная операция абсолютного значения.
- ‘fcmpeqs’, ‘fcmpges’, ‘fcmpgts’, ‘fcmples’, ‘fcmplts’, ‘fcmpnes’
-
Операции сравнения.
- ‘fmins’, ‘fmaxs’
-
Минимальное и максимальное значения с плавающей точкой. Эти инструкции генерируются только если указан параметр -ffinite-math-only.
- ‘fsqrts’
-
Унарная операция квадратного корня.
- ‘fcoss’, ‘fsins’, ‘ftans’, ‘fatans’, ‘fexps’, ‘flogs’
-
Тригонометрические и экспоненциальные функции с плавающей точкой. Эти инструкции генерируются только если также указан параметр -funsafe-math-optimizations.
Плавающая точка двойной точности:
- ‘faddd’, ‘fsubd’, ‘fdivd’, ‘fmuld’
-
Двоичные арифметические операции.
- ‘fnegd’
-
Унарное отрицание.
- ‘fabsd’
-
Унарная операция абсолютного значения.
- ‘fcmpeqd’, ‘fcmpged’, ‘fcmpgtd’, ‘fcmpled’, ‘fcmpltd’, ‘fcmpned’
-
Операции сравнения.
- ‘fmind’, ‘fmaxd’
-
Минимальное и максимальное значения с плавающей точкой двойной точности. Эти инструкции генерируются только если указан параметр -ffinite-math-only.
- ‘fsqrtd’
-
Унарная операция квадратного корня.
- ‘fcosd’, ‘fsind’, ‘ftand’, ‘fatand’, ‘fexpd’, ‘flogd’
-
Тригонометрические и экспоненциальные функции с плавающей точкой двойной точности. Эти инструкции генерируются только если также указан параметр -funsafe-math-optimizations.
Преобразования:
- ‘fextsd’
-
Преобразование из одинарной точности в двойную.
- ‘ftruncds’
-
Преобразование из двойной точности в одинарную.
- ‘fixsi’, ‘fixsu’, ‘fixdi’, ‘fixdu’
-
Преобразование из плавающей точки в целые со знаком или без знака с усечением к нулю.
- ‘round’
-
Преобразование из плавающей точки одинарной точности в целые со знаком, округляя до ближайшего целого и при равном расстоянии отбрасывая к нулю. Соответствует функции
__builtin_lroundf, когда используется -fno-math-errno. - ‘floatis’, ‘floatus’, ‘floatid’, ‘floatud’
-
Преобразование из целых со знаком или без знака в типы с плавающей точкой.
Кроме того, для использования любых инструкций с плавающей точкой двойной точности должны быть предоставлены все следующие инструкции передачи для внутренних регистров X и Y. Пользовательские инструкции, принимающие два операнда с плавающей точкой двойной точности, ожидают первый операнд в 64-битном регистре X. Другой операнд (или единственный операнд унарной операции) предоставляется пользовательской арифметической инструкции с наименее значимым полубайтом в исходном регистре src1 и наиболее значимым полубайтом в src2. Пользовательская инструкция, возвращающая результат двойной точности, возвращает наиболее значимые 32 бита в регистре назначения и другую половину в 32-битном регистре Y. GCC автоматически генерирует необходимые последовательности кода для записи в регистр X и/или чтения из регистра Y при использовании инструкций с плавающей точкой двойной точности.
- ‘fwrx’
-
Записать src1 в наименее значимую половину X и src2 в наиболее значимую половину X.
- ‘fwry’
-
Записать src1 в Y.
- ‘frdxhi’, ‘frdxlo’
-
Прочитать наиболее или наименее (соответственно) значимую половину X и сохранить её в dest.
- ‘frdy’
Прочитать значение Y и сохранить его в dest.
Обратите внимание, что вы можете получить больший локальный контроль над генерацией пользовательских инструкций Nios II, используя атрибуты функций
target("custom-insn=N")иtarget("no-custom-insn")(см. Объявление атрибутов функций) или директивы (см. Директивы для опций, специфичных для функций). -mcustom-fpu-cfg=name-
Этот параметр включает предопределённый, именованный набор кодировок пользовательских инструкций (см. -mcustom-insn выше). В настоящее время определены следующие наборы:
-mcustom-fpu-cfg=60-1 эквивалентен:
-mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-precision-constant
-mcustom-fpu-cfg=60-2 эквивалентен:
-mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precision-constant
-mcustom-fpu-cfg=72-3 эквивалентен:
-mcustom-floatus=243 -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246 -mcustom-fcmples=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precision-constant
-mcustom-fpu-cfg=fph2 эквивалентен:
-mcustom-fabss=224 -mcustom-fnegs=225 -mcustom-fcmpnes=226 -mcustom-fcmpeqs=227 -mcustom-fcmpges=228 -mcustom-fcmpgts=229 -mcustom-fcmples=230 -mcustom-fcmplts=231 -mcustom-fmaxs=232 -mcustom-fmins=233 -mcustom-round=248 -mcustom-fixsi=249 -mcustom-floatis=250 -mcustom-fsqrts=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255
Назначения пользовательских инструкций, задаваемые отдельными параметрами -mcustom-insn=, переопределяют те, которые заданы -mcustom-fpu-cfg=, независимо от порядка параметров в командной строке.
Обратите внимание, что вы можете получить больший локальный контроль над выбором конфигурации FPU, используя атрибут функции
target("custom-fpu-cfg=name")(см. Объявление атрибутов функций) или директиву (см. Директивы для опций, специфичных для функций).Имя fph2 является сокращением для компонента Nios II Floating Point Hardware 2. Обратите внимание, что пользовательские инструкции, включенные параметрами -mcustom-fmins=233 и -mcustom-fmaxs=234, генерируются только если указан параметр -ffinite-math-only. Пользовательская инструкция, включенная параметром -mcustom-round=248, генерируется только если указан параметр -fno-math-errno. В отличие от других конфигураций, -fsingle-precision-constant не устанавливается.
Эти дополнительные параметры ‘-m’ доступны для целевой системы Altera Nios II ELF (bare-metal):
-mhal-
Связь с HAL BSP. Это подавляет связывание с предоставленным GCC начальным и завершающим кодом C-runtime, и обычно используется в сочетании с -msys-crt0= для указания расположения альтернативного стартового кода, предоставляемого HAL BSP.
-msmallc-
Связь с ограниченной версией библиотеки C, -lsmallc, вместо Newlib.
-msys-crt0=startfile-
startfile — имя файла startfile (crt0) для использования при линковке. Этот параметр полезен только в сочетании с -mhal.
-msys-lib=systemlib-
systemlib — имя библиотеки, предоставляющей системные вызовы низкого уровня, необходимые библиотеке C, например,
readиwrite. Этот параметр обычно используется для связи с библиотекой, предоставляемой HAL BSP.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Nios-II-Options.html