Spec-Zone.ru › GCC 11

Следующий: Blackfin Options, Предыдущий: ARM Options, Вверх: Варианты для конкретных платформ [Оглавление][Индекс]

3.19.6 AVR Options ¶

Эти параметры определены для реализаций AVR:

-mmcu=mcu

Укажите архитектуры набора команд Atmel AVR (ISA) или тип микроконтроллера.

По умолчанию для этого параметра установлено значение ‘avr2’.

GCC поддерживает следующие устройства и ISA AVR:

avr2

«Классические» устройства с программой памяти до 8 Кбайт. mcu = attiny22, attiny26, at90s2313, at90s2323, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90c8534, at90s8515, at90s8535.

avr25

«Классические» устройства с программой памяти до 8 Кбайт и с инструкцией MOVW. mcu = attiny13, attiny13a, attiny24, attiny24a, attiny25, attiny261, attiny261a, attiny2313, attiny2313a, attiny43u, attiny44, attiny44a, attiny45, attiny48, attiny441, attiny461, attiny461a, attiny4313, attiny84, attiny84a, attiny85, attiny87, attiny88, attiny828, attiny841, attiny861, attiny861a, ata5272, ata6616c, at86rf401.

avr3

«Классические» устройства с программой памяти от 16 Кбайт до 64 Кбайт. mcu = at76c711, at43usb355.

avr31

«Классические» устройства с программой памяти 128 Кбайт. mcu = atmega103, at43usb320.

avr35

«Классические» устройства с программой памяти от 16 Кбайт до 64 Кбайт и с инструкцией MOVW. mcu = attiny167, attiny1634, atmega8u2, atmega16u2, atmega32u2, ata5505, ata6617c, ata664251, at90usb82, at90usb162.

avr4

«Улучшенные» устройства с программой памяти до 8 Кбайт. mcu = atmega48, atmega48a, atmega48p, atmega48pa, atmega48pb, atmega8, atmega8a, atmega8hva, atmega88, atmega88a, atmega88p, atmega88pa, atmega88pb, atmega8515, atmega8535, ata6285, ata6286, ata6289, ata6612c, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81.

avr5

«Улучшенные» устройства с программой памяти от 16 Кбайт до 64 Кбайт. mcu = atmega16, atmega16a, atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb, atmega16m1, atmega16u4, atmega161, atmega162, atmega163, atmega164a, atmega164p, atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa, atmega168, atmega168a, atmega168p, atmega168pa, atmega168pb, atmega169, atmega169a, atmega169p, atmega169pa, atmega32, atmega32a, atmega32c1, atmega32hvb, atmega32hvbrevb, atmega32m1, atmega32u4, atmega32u6, atmega323, atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, atmega325p, atmega325pa, atmega328, atmega328p, atmega328pb, atmega329, atmega329a, atmega329p, atmega329pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, atmega3290, atmega3290a, atmega3290p, atmega3290pa, atmega406, atmega64, atmega64a, atmega64c1, atmega64hve, atmega64hve2, atmega64m1, atmega64rfr2, atmega640, atmega644, atmega644a, atmega644p, atmega644pa, atmega644rfr2, atmega645, atmega645a, atmega645p, atmega649, atmega649a, atmega649p, atmega6450, atmega6450a, atmega6450p, atmega6490, atmega6490a, atmega6490p, ata5795, ata5790, ata5790n, ata5791, ata6613c, ata6614q, ata5782, ata5831, ata8210, ata8510, ata5702m322, at90pwm161, at90pwm216, at90pwm316, at90can32, at90can64, at90scr100, at90usb646, at90usb647, at94k, m3000.

avr51

«Улучшенные» устройства с программой памяти 128 Кбайт. mcu = atmega128, atmega128a, atmega128rfa1, atmega128rfr2, atmega1280, atmega1281, atmega1284, atmega1284p, atmega1284rfr2, at90can128, at90usb1286, at90usb1287.

avr6

«Улучшенные» устройства с 3-байтовым PC, т.е. с более чем 128 Кбайт программы памяти. mcu = atmega256rfr2, atmega2560, atmega2561, atmega2564rfr2.

avrxmega2

Устройства «XMEGA» с программой памяти более 8 Кбайт и до 64 Кбайт. mcu = atxmega8e5, atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16e5, atxmega32a4, atxmega32a4u, atxmega32c3, atxmega32c4, atxmega32d3, atxmega32d4, atxmega32e5.

avrxmega3

«XMEGA» устройства с до 64 Кбайт объединённой программы памяти и ОЗУ, и с программой памяти, отображённой в адресном пространстве ОЗУ. mcu = attiny202, attiny204, attiny212, attiny214, attiny402, attiny404, attiny406, attiny412, attiny414, attiny416, attiny417, attiny804, attiny806, attiny807, attiny814, attiny816, attiny817, attiny1604, attiny1606, attiny1607, attiny1614, attiny1616, attiny1617, attiny3214, attiny3216, attiny3217, atmega808, atmega809, atmega1608, atmega1609, atmega3208, atmega3209, atmega4808, atmega4809.

avrxmega4

«XMEGA» устройства с программой памяти от 64 Кбайт до 128 Кбайт. mcu = atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, atxmega64c3, atxmega64d3, atxmega64d4.

avrxmega5

«XMEGA» устройства с программой памяти от 64 Кбайт до 128 Кбайт и ОЗУ более 64 Кбайт. mcu = atxmega64a1, atxmega64a1u.

avrxmega6

«XMEGA» устройства с программой памяти более 128 Кбайт. mcu = atxmega128a3, atxmega128a3u, atxmega128b1, atxmega128b3, atxmega128c3, atxmega128d3, atxmega128d4, atxmega192a3, atxmega192a3u, atxmega192c3, atxmega192d3, atxmega256a3, atxmega256a3b, atxmega256a3bu, atxmega256a3u, atxmega256c3, atxmega256d3, atxmega384c3, atxmega384d3.

avrxmega7

«XMEGA» устройства с программой памяти более 128 Кбайт и ОЗУ более 64 Кбайт. mcu = atxmega128a1, atxmega128a1u, atxmega128a4u.

avrtiny

«TINY» устройства Tiny core с программой памяти от 512 байт до 4 Кбайт. mcu = attiny4, attiny5, attiny9, attiny10, attiny20, attiny40.

avr1

Эта ISA реализуется минимальным ядром AVR и поддерживается только для ассемблера. mcu = attiny11, attiny12, attiny15, attiny28, at90s1200.

-mabsdata

Предполагается, что к данным в статической памяти можно получить доступ с помощью инструкций LDS / STS. Этот параметр действует только на устройства Tiny, такие как ATtiny40. См. также absdata атрибут переменной.

-maccumulate-args

Накопление аргументов выходящих функций и получение/освобождение необходимого стекового пространства для аргументов выходящих функций один раз в преамбуле/эпилоге функции. Без этого параметра аргументы выходящих функций помещаются в стек перед вызовом функции и извлекаются после него.

Извлечение аргументов после вызова функции может быть дорогостоящим для AVR, поэтому накопление стекового пространства может привести к более компактным исполняемым файлам, так как аргументы не должны быть удалены из стека после такого вызова функции.

Этот параметр может привести к уменьшению размера кода для функций, выполняющих несколько вызовов функций, получающих свои аргументы в стеке, таких как вызовы функций типа printf.

-mbranch-cost=cost

Установите стоимость ветвления для инструкций условного ветвления на cost. Разумные значения для cost — это небольшие целые числа без знака. Стоимость ветвления по умолчанию — 0.

-mcall-prologues

Преамбулы/эпилоги функций расширяются как вызовы соответствующих подпрограмм. Размер кода меньше.

-mdouble=bits
-mlong-double=bits

Установите размер (в битах) типа double или long double соответственно. Возможные значения для bits — 32 и 64. Разрешение конкретного значения bits зависит от --with-double= и --with-long-double= параметров конфигурации, и то же самое относится к значениям параметров по умолчанию.

-mgas-isr-prologues

Подпрограммы обработки прерываний (ISR) могут использовать псевдоинструкцию __gcc_isr, поддерживаемую GNU Binutils. Если этот параметр включён, функция может быть отключена для отдельных ISR с помощью атрибута функции no_gccisr. Эта функция по умолчанию активируется, если включена оптимизация (но не с -Og, см. Параметры, контролирующие оптимизацию), и если GNU Binutils поддерживает PR21683.

-mint8

Предполагается, что int является 8-битовым целым числом. Это влияет на размеры всех типов: char — 1 байт, int — 1 байт, long — 2 байта, и long long — 4 байта. Обратите внимание, что этот параметр не соответствует стандартам C, но приводит к меньшему размеру кода.

-mmain-is-OS_task

Не сохранять регистры в main. Эффект аналогичен прикреплению атрибута OS_task к main. Он активирован по умолчанию, если включена оптимизация.

-mn-flash=num

Предполагается, что размер памяти флэш-памяти составляет num раз по 64 КБ.

-mno-interrupts

Сгенерированный код не совместим с аппаратными прерываниями. Размер кода меньше.

-mrelax

Попытаться заменить CALL и JMP инструкцией RCALL и RJMP соответственно, если это возможно. Установка параметра -mrelax просто добавляет параметр --mlink-relax в командную строку ассемблера и параметр --relax в командную строку линкера.

Расслабление переходов выполняется линком, поскольку смещения переходов неизвестны до размещения кода. Поэтому код ассемблера, сгенерированный компилятором, остается неизменным, но инструкции в исполняемом файле могут отличаться от инструкций в коде ассемблера.

Расслабление должно быть включено, если нужны заглушки линкера, см. раздел о EIND и заглушках линкера ниже.

-mrmw

Предполагается, что устройство поддерживает инструкции Read-Modify-Write XCH, LAC, LAS и LAT.

-mshort-calls

Предполагается, что RJMP и RCALL могут быть применены ко всей памяти программы.

Этот параметр используется внутри для выбора многоязыковой библиотеки. Это не параметр оптимизации, и вам не нужно устанавливать его вручную.

-msp8

Обращаться к регистру указателя стека как к 8-битному регистру, то есть предполагать, что старший байт указателя стека равен нулю. В целом, вам не нужно устанавливать этот параметр вручную.

Этот параметр используется внутри компилятором для выбора и построения многоязыковых библиотек для архитектур avr2 и avr25. Эти архитектуры смешивают устройства с и без SPH. Для любого значения, кроме -mmcu=avr2 или -mmcu=avr25, драйвер компилятора добавляет или удаляет этот параметр в командную строку собственно компилятора, потому что компилятор тогда знает, имеет ли устройство или архитектура 8-битный указатель стека и, следовательно, регистр SPH или нет.

-mstrict-X

Использовать регистр адреса X так, как предложено аппаратным обеспечением. Это означает, что X используется только в косвенной, пост-инкрементной или пре-декрементной адресации.

Без этого параметра регистр X может использоваться так же, как Y или Z, что затем эмулируется дополнительными инструкциями. Например, загрузка значения с использованием адресации X+const с небольшим неотрицательным const < 64 в регистр Rn выполняется как

adiw r26, const   ; X += const
ld   Rn, X        ; Rn = *X
sbiw r26, const   ; X -= const
-mtiny-stack

Изменять только младшие 8 бит указателя стека.

-mfract-convert-truncate

Разрешить использовать усечение вместо округления к нулю для типов дробных фиксированной точки.

-nodevicelib

Не связывать с устройственно-специфической библиотекой AVR-LibC lib<mcu>.a.

-nodevicespecs

Не добавлять -specs=device-specs/specs-mcu в командную строку драйвера компилятора. Пользователь несет ответственность за предоставление подпроцессам (например, собственно компилятору, ассемблеру и линковщику) соответствующих параметров командной строки. Это означает, что пользователь должен предоставить свой собственный файл спецификаций устройства с помощью -specs=path-to-specs-file. Больше нет необходимости в параметре -mmcu=mcu.

Этот параметр также может служить заменой более старому способу задания пользовательских файлов спецификаций устройств, который требовал -B some-path для указания директории, содержащей папку с именем device-specs, которая содержит файл спецификаций с именем specs-mcu, где mcu указывался с помощью -mmcu=mcu.

-Waddr-space-convert

Выводить предупреждение о преобразованиях между адресными пространствами в случае, если результирующее адресное пространство не содержится в исходном адресном пространстве.

-Wmisspelled-isr

Предупреждать о неправильном написании ISR (т.е. без префикса __vector). Включено по умолчанию.

  • EIND и устройства с более чем 128 Кбайт флэш-памяти
  • Обработка RAMPD, RAMPX, RAMPY и RAMPZ специальных регистров
  • Встроенные макросы AVR

3.19.6.1 EIND и устройства с более чем 128 Кбайт флэш-памяти ¶

Указатели в реализации имеют ширину 16 бит. Адрес функции или метки представлен как адрес слова, чтобы косвенные переходы и вызовы могли обращаться к любому адресу кода в диапазоне 64 К слов.

Для облегчения косвенных переходов на устройствах с более чем 128 Кбайт памяти программы существует специальный регистр EIND, который служит старшей частью целевого адреса при использовании инструкций EICALL или EIJMP.

Косвенные переходы и вызовы на этих устройствах обрабатываются компилятором следующим образом и имеют некоторые ограничения:

  • Компилятор никогда не устанавливает EIND.
  • Компилятор использует EIND неявно в инструкциях EICALL/EIJMP или может читать EIND напрямую, чтобы эмулировать косвенный вызов/переход с помощью инструкции RET.
  • Компилятор предполагает, что EIND никогда не меняется во время кода запуска или во время работы приложения. В частности, EIND не сохраняется/восстанавливается в преамбуле/эпилоге функции или обработчика прерывания.
  • Для косвенных вызовов функций и вычислений goto линкер генерирует заглушки. Заглушки иногда также называются трамплинами. Таким образом, косвенный вызов/переход переходит к такой заглушке. Заглушка содержит прямой переход к нужному адресу.
  • Необходимо включить расслабление линкера, чтобы линкер генерировал заглушки корректно во всех ситуациях. См. параметр компилятора -mrelax и параметр линкера --relax. Есть крайние случаи, когда линкер должен генерировать заглушки, но завершается без расслабления и без полезного сообщения об ошибке.
  • Стандартный скрипт линкера предназначен для кода с EIND = 0. Если код должен работать для настройки с EIND != 0, необходимо использовать пользовательский скрипт линкера, чтобы поместить секции, имена которых начинаются с .trampolines в сегмент, к которому указывает EIND.
  • Код запуска из libgcc никогда не устанавливает EIND. Обратите внимание, что код запуска представляет собой сочетание кода из libgcc и AVR-LibC. Для влияния AVR-LibC на EIND, см. руководство пользователя AVR-LibC.
  • Для пользовательского кода запуска допустимо установить EIND в самом начале, например, с помощью кода инициализации, расположенного в секции .init3. Такой код выполняется до общего кода запуска, который инициализирует ОЗУ и вызывает конструкторы, но после части кода запуска от AVR-LibC, которая устанавливает EIND в сегмент, где находится таблица векторов.
    #include <avr/io.h>
    
    static void
    __attribute__((section(".init3"),naked,used,no_instrument_function))
    init3_set_eind (void)
    {
      __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
                      "out %i0,r24" :: "n" (&EIND) : "r24","memory");
    }

    Символ __trampolines_start определён в скрипте линкера.

  • Заглушки генерируются автоматически линком, если выполнены следующие два условия:
    • Адрес метки принимается с модификатором gs (сокращенно генерировать заглушки) следующим образом:
      LDI r24, lo8(gs(func))
      LDI r25, hi8(gs(func))
    • Конечное расположение этой метки находится в сегменте кода вне сегмента, где расположены заглушки.
  • Компилятор генерирует такие модификаторы gs для меток кода в следующих ситуациях:
    • Получение адреса функции или метки кода.
    • Вычисление goto.
    • Если используется функция с предварительным сохранением, см. параметр командной строки -mcall-prologues.
    • Таблицы переходов switch/case. Если вы не хотите такие таблицы переходов, вы можете указать параметр командной строки -fno-jump-tables.
    • Конструкторы/деструкторы C и C++, вызываемые во время запуска/выключения.
    • Если инструменты столкнутся с модификатором gs(), описанным выше.
  • Переход к несимволическим адресам, например,
    int main (void)
    {
        /* Call function at word address 0x2 */
        return ((int(*)(void)) 0x2)();
    }

    не поддерживается. Вместо этого должна быть настроена заглушка, то есть функция должна вызываться через символ (func_4 в примере):

    int main (void)
    {
        extern int func_4 (void);
    
        /* Call function at byte address 0x4 */
        return func_4();
    }

    и приложение должно быть связано с -Wl,--defsym,func_4=0x4. В качестве альтернативы, func_4 можно определить в скрипте линкера.

3.19.6.2 Обработка специальных регистров функции RAMPD, RAMPX, RAMPY и RAMPZ ¶

Некоторые устройства AVR поддерживают память, размер которой превышает 64 КБ, к которой можно получить доступ с помощью 16-разрядных указателей. Для доступа к расположениям памяти за пределами этого диапазона 64 КБ используется содержимое регистра RAMP: Регистр адреса X, Y, Z конкатенируется с регистром специальной функции RAMPX, RAMPY, RAMPZ соответственно, чтобы получить широкий адрес. Аналогично, RAMPD используется вместе с прямой адресацией.

  • Код запуска инициализирует регистры специальных функций RAMP нулём.
  • Если используется пространство именованных адресов, отличное от общего или __flash, то RAMPZ устанавливается в соответствии с потребностями перед операцией.
  • Если устройство поддерживает ОЗУ размером более 64 КБ, и компилятору необходимо изменить RAMPZ для выполнения операции, то RAMPZ сбрасывается в ноль после выполнения операции.
  • Если устройство поставляется со специальным регистром RAMP, пролог/эпилог обработчика прерываний сохраняет/восстанавливает этот регистр специальных функций и инициализирует его нулём, в случае если код обработчика прерываний может (неявным образом) его использовать.
  • ОЗУ размером более 64 КБ не поддерживается GCC для AVR-мишеней. Если вы используете встроенный ассемблер для чтения из расположений за пределами 16-битного диапазона адресов и изменяете один из регистров RAMP, вы должны сбросить его в ноль после доступа.

3.19.6.3 Встроенные макросы AVR ¶

GCC определяет несколько встроенных макросов, чтобы код пользователя мог проверить наличие или отсутствие функций. Практически все следующие встроенные макросы выводятся из возможностей устройства и, следовательно, вызываются опцией командной строки -mmcu=.

Для ещё более специфичных встроенных макросов AVR см. Пространства именованных адресов AVR и Встроенные функции AVR.

__AVR_ARCH__

Встроенный макрос, который преобразуется в десятичное число, идентифицирующее архитектуру и зависящее от опции -mmcu=mcu. Возможные значения:

2, 25, 3, 31, 35, 4, 5, 51, 6

для mcu=avr2, avr25, avr3, avr31, avr35, avr4, avr5, avr51, avr6,

соответственно и

100, 102, 103, 104, 105, 106, 107

для mcu=avrtiny, avrxmega2, avrxmega3, avrxmega4, avrxmega5, avrxmega6, avrxmega7, соответственно. Если mcu задаёт устройство, этот встроенный макрос устанавливается соответствующим образом. Например, с -mmcu=atmega8 макрос определяется как 4.

__AVR_Device__

Установка -mmcu=device определяет этот встроенный макрос, который отражает имя устройства. Например, -mmcu=atmega8 определяет встроенный макрос __AVR_ATmega8__, -mmcu=attiny261a определяет __AVR_ATtiny261A__, и т.д.

Имена встроенных макросов следуют схеме __AVR_Device__, где Device — имя устройства из руководства пользователя AVR. Разница между Device в встроенном макросе и device в -mmcu=device заключается в том, что последнее всегда в нижнем регистре.

Если device не является устройством, а только основной архитектурой, например, ‘avr51’, этот макрос не определён.

__AVR_DEVICE_NAME__

Установка -mmcu=device определяет этот встроенный макрос как имя устройства. Например, с -mmcu=atmega8 макрос определён как atmega8.

Если device не является устройством, а только основной архитектурой, например, ‘avr51’, этот макрос не определён.

__AVR_XMEGA__

Устройство / архитектура принадлежит семейству устройств XMEGA.

__AVR_HAVE_ELPM__

Устройство имеет инструкцию ELPM.

__AVR_HAVE_ELPMX__

Устройство имеет инструкции ELPM Rn,Z и ELPM Rn,Z+.

__AVR_HAVE_MOVW__

Устройство имеет инструкцию MOVW для выполнения 16-битных перемещений регистр-регистр.

__AVR_HAVE_LPMX__

Устройство имеет инструкции LPM Rn,Z и LPM Rn,Z+.

__AVR_HAVE_MUL__

Устройство имеет аппаратный умножитель.

__AVR_HAVE_JMP_CALL__

Устройство имеет инструкции JMP и CALL. Это имеет место для устройств с более чем 8 КБ программной памяти.

__AVR_HAVE_EIJMP_EICALL__
__AVR_3_BYTE_PC__

Устройство имеет инструкции EIJMP и EICALL. Это имеет место для устройств с более чем 128 КБ программной памяти. Это также означает, что счётчик команд (PC) имеет ширину 3 байта.

__AVR_2_BYTE_PC__

Счётчик команд (PC) имеет ширину 2 байта. Это имеет место для устройств с до 128 КБ программной памяти.

__AVR_HAVE_8BIT_SP__
__AVR_HAVE_16BIT_SP__

Регистр указателя стека (SP) обрабатывается компилятором как 8-битный, соответственно 16-битный регистр. Определение этих макросов зависит от -mtiny-stack.

__AVR_HAVE_SPH__
__AVR_SP8__

Устройство имеет регистр SPH (старшая часть указателя стека) или имеет 8-битный указатель стека соответственно. Определение этих макросов зависит от -mmcu= и в случаях -mmcu=avr2 и -mmcu=avr25 также от -msp8.

__AVR_HAVE_RAMPD__
__AVR_HAVE_RAMPX__
__AVR_HAVE_RAMPY__
__AVR_HAVE_RAMPZ__

Устройство имеет регистры RAMPD, RAMPX, RAMPY, RAMPZ соответственно.

__NO_INTERRUPTS__

Этот макрос отражает опцию командной строки -mno-interrupts.

__AVR_ERRATA_SKIP__
__AVR_ERRATA_SKIP_JMP_CALL__

Некоторые устройства AVR (AT90S8515, ATmega103) не должны пропускать 32-битные инструкции из-за аппаратной ошибки. Инструкции пропуска — SBRS, SBRC, SBIS, SBIC и CPSE. Второй макрос определён только в том случае, если __AVR_HAVE_JMP_CALL__ также установлен.

__AVR_ISA_RMW__

Устройство имеет инструкции чтения-модификации-записи (XCH, LAC, LAS и LAT).

__AVR_SFR_OFFSET__=offset

Инструкции, которые могут напрямую адресовать регистры специальных функций ввода/вывода, такие как IN, OUT, SBI, и т. д., могут использовать другой адрес, как если бы они адресовались инструкцией доступа к ОЗУ, такой как LD или STS. Эта величина смещения зависит от архитектуры устройства и должна вычитаться из адреса ОЗУ для получения соответствующего адреса ввода/вывода.

__AVR_SHORT_CALLS__

Опция командной строки -mshort-calls установлена.

__AVR_PM_BASE_ADDRESS__=addr

Некоторые устройства поддерживают чтение из флэш-памяти с помощью инструкций LD*. Флэш-память видна в пространстве адресов данных со смещением __AVR_PM_BASE_ADDRESS__. Если этот макрос не определён, эта функция недоступна. При определении, адресное пространство является линейным, и нет необходимости помещать .rodata в ОЗУ. Это обрабатывается по умолчанию файлом описания компоновщика, и в настоящее время доступно для avrtiny и avrxmega3. Ещё более удобно, нет необходимости использовать адресные пространства, такие как __flash, или функции, такие как атрибут progmem и pgm_read_*.

__WITH_AVRLIBC__

Компилятор настроен для использования вместе с AVR-Libc. См. опцию конфигурации --with-avrlibc.

__HAVE_DOUBLE_MULTILIB__

Определяется, если -mdouble= действует как опция multilib.

__HAVE_DOUBLE32__
__HAVE_DOUBLE64__

Определяется, если компилятор поддерживает 32-битные двойные, соответственно 64-битные двойные. Фактическое расположение задаётся опцией -mdouble=.

__DEFAULT_DOUBLE__

Размер в битах double, если -mdouble= не установлен. Для проверки расположения double в программе используйте встроенный макрос __SIZEOF_DOUBLE__.

__HAVE_LONG_DOUBLE32__
__HAVE_LONG_DOUBLE64__
__HAVE_LONG_DOUBLE_MULTILIB__
__DEFAULT_LONG_DOUBLE__

То же самое, но для long double вместо double.

__WITH_DOUBLE_COMPARISON__

Отражает опцию конфигурации --with-double-comparison={tristate|bool|libf7} configure option и определена как 2 или 3.

__WITH_LIBF7_LIBGCC__
__WITH_LIBF7_MATH__
__WITH_LIBF7_MATH_SYMBOLS__

Отражает опцию конфигурации --with-libf7={libgcc|math|math-symbols} configure option.

Далее: Опции Blackfin, Предыдущее: Опции ARM, Вверх: Машинно-зависимые опции [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/AVR-Options.html

Spec-Zone.ru

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