gcc: AVR Options

1 
1 3.18.5 AVR Options
1 ------------------
1 
1 These options are defined for AVR implementations:
1 
1 '-mmcu=MCU'
1      Specify Atmel AVR instruction set architectures (ISA) or MCU type.
1 
1      The default for this option is 'avr2'.
1 
1      GCC supports the following AVR devices and ISAs:
1 
1      'avr2'
1           "Classic" devices with up to 8 KiB of program memory.
1           MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
1           'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
1           'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
1 
1      'avr25'
1           "Classic" devices with up to 8 KiB of program memory and with
1           the 'MOVW' instruction.
1           MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
1           'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
1           'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
1           'attiny45', 'attiny48', 'attiny441', 'attiny461',
1           'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
1           'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
1           'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
1 
1      'avr3'
1           "Classic" devices with 16 KiB up to 64 KiB of program memory.
1           MCU = 'at76c711', 'at43usb355'.
1 
1      'avr31'
1           "Classic" devices with 128 KiB of program memory.
1           MCU = 'atmega103', 'at43usb320'.
1 
1      'avr35'
1           "Classic" devices with 16 KiB up to 64 KiB of program memory
1           and with the 'MOVW' instruction.
1           MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
1           'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
1           'at90usb162'.
1 
1      'avr4'
1           "Enhanced" devices with up to 8 KiB of program memory.
1           MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
1           'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
1           'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
1           'atmega8515', 'atmega8535', 'ata6285', 'ata6286', 'ata6289',
1           'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b', 'at90pwm3',
1           'at90pwm3b', 'at90pwm81'.
1 
1      'avr5'
1           "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
1 
1           MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
1           'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
1           'atmega161', 'atmega162', 'atmega163', 'atmega164a',
1           'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
1           'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
1           'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
1           'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
1           'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
1           'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
1           'atmega324a', 'atmega324p', 'atmega324pa', 'atmega325',
1           'atmega325a', 'atmega325p', 'atmega325pa', 'atmega328',
1           'atmega328p', 'atmega328pb', 'atmega329', 'atmega329a',
1           'atmega329p', 'atmega329pa', 'atmega3250', 'atmega3250a',
1           'atmega3250p', 'atmega3250pa', 'atmega3290', 'atmega3290a',
1           'atmega3290p', 'atmega3290pa', 'atmega406', 'atmega64',
1           'atmega64a', 'atmega64c1', 'atmega64hve', 'atmega64hve2',
1           'atmega64m1', 'atmega64rfr2', 'atmega640', 'atmega644',
1           'atmega644a', 'atmega644p', 'atmega644pa', 'atmega644rfr2',
1           'atmega645', 'atmega645a', 'atmega645p', 'atmega649',
1           'atmega649a', 'atmega649p', 'atmega6450', 'atmega6450a',
1           'atmega6450p', 'atmega6490', 'atmega6490a', 'atmega6490p',
1           'ata5795', 'ata5790', 'ata5790n', 'ata5791', 'ata6613c',
1           'ata6614q', 'ata5782', 'ata5831', 'ata8210', 'ata8510',
1           'ata5702m322', 'at90pwm161', 'at90pwm216', 'at90pwm316',
1           'at90can32', 'at90can64', 'at90scr100', 'at90usb646',
1           'at90usb647', 'at94k', 'm3000'.
1 
1      'avr51'
1           "Enhanced" devices with 128 KiB of program memory.
1           MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
1           'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
1           'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
1           'at90usb1287'.
1 
1      'avr6'
1           "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
1           of program memory.
1           MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
1           'atmega2564rfr2'.
1 
1      'avrxmega2'
1           "XMEGA" devices with more than 8 KiB and up to 64 KiB of
1           program memory.
1           MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
1           'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
1           'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
1           'atxmega32d4', 'atxmega32e5'.
1 
1      'avrxmega3'
1           "XMEGA" devices with up to 64 KiB of combined program memory
1           and RAM, and with program memory visible in the RAM address
1           space.
1           MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
1           'attiny402', 'attiny404', 'attiny406', 'attiny412',
1           'attiny414', 'attiny416', 'attiny417', 'attiny804',
1           'attiny806', 'attiny807', 'attiny814', 'attiny816',
1           'attiny817', 'attiny1604', 'attiny1606', 'attiny1607',
1           'attiny1614', 'attiny1616', 'attiny1617', 'attiny3214',
1           'attiny3216', 'attiny3217', 'atmega808', 'atmega809',
1           'atmega1608', 'atmega1609', 'atmega3208', 'atmega3209',
1           'atmega4808', 'atmega4809'.
1 
1      'avrxmega4'
1           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
1           program memory.
1           MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
1           'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
1           'atxmega64d4'.
1 
1      'avrxmega5'
1           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
1           program memory and more than 64 KiB of RAM.
1           MCU = 'atxmega64a1', 'atxmega64a1u'.
1 
1      'avrxmega6'
1           "XMEGA" devices with more than 128 KiB of program memory.
1           MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
1           'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
1           'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
1           'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
1           'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
1           'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
1           'atxmega384d3'.
1 
1      'avrxmega7'
1           "XMEGA" devices with more than 128 KiB of program memory and
1           more than 64 KiB of RAM.
1           MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
1 
1      'avrtiny'
1           "TINY" Tiny core devices with 512 B up to 4 KiB of program
1           memory.
1           MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10', 'attiny20',
1           'attiny40'.
1 
1      'avr1'
1           This ISA is implemented by the minimal AVR core and supported
1           for assembler only.
1           MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
1           'at90s1200'.
1 
1 '-mabsdata'
1 
1      Assume that all data in static storage can be accessed by LDS / STS
1      instructions.  This option has only an effect on reduced Tiny
11      devices like ATtiny40.  See also the 'absdata' ⇒variable
      attribute AVR Variable Attributes.
1 
1 '-maccumulate-args'
1      Accumulate outgoing function arguments and acquire/release the
1      needed stack space for outgoing function arguments once in function
1      prologue/epilogue.  Without this option, outgoing arguments are
1      pushed before calling a function and popped afterwards.
1 
1      Popping the arguments after the function call can be expensive on
1      AVR so that accumulating the stack space might lead to smaller
1      executables because arguments need not be removed from the stack
1      after such a function call.
1 
1      This option can lead to reduced code size for functions that
1      perform several calls to functions that get their arguments on the
1      stack like calls to printf-like functions.
1 
1 '-mbranch-cost=COST'
1      Set the branch costs for conditional branch instructions to COST.
1      Reasonable values for COST are small, non-negative integers.  The
1      default branch cost is 0.
1 
1 '-mcall-prologues'
1      Functions prologues/epilogues are expanded as calls to appropriate
1      subroutines.  Code size is smaller.
1 
1 '-mgas-isr-prologues'
1      Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
1      instruction supported by GNU Binutils.  If this option is on, the
1      feature can still be disabled for individual ISRs by means of the
1      ⇒'no_gccisr' AVR Function Attributes. function attribute.
1      This feature is activated per default if optimization is on (but
1      not with '-Og', ⇒Optimize Options), and if GNU Binutils
1      support PR21683 (https://sourceware.org/PR21683).
1 
1 '-mint8'
1      Assume 'int' to be 8-bit integer.  This affects the sizes of all
1      types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
1      and 'long long' is 4 bytes.  Please note that this option does not
1      conform to the C standards, but it results in smaller code size.
1 
1 '-mmain-is-OS_task'
1      Do not save registers in 'main'.  The effect is the same like
1      attaching attribute ⇒'OS_task' AVR Function Attributes. to
1      'main'.  It is activated per default if optimization is on.
1 
1 '-mn-flash=NUM'
1      Assume that the flash memory has a size of NUM times 64 KiB.
1 
1 '-mno-interrupts'
1      Generated code is not compatible with hardware interrupts.  Code
1      size is smaller.
1 
1 '-mrelax'
1      Try to replace 'CALL' resp. 'JMP' instruction by the shorter
1      'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
1      just adds the '--mlink-relax' option to the assembler's command
1      line and the '--relax' option to the linker's command line.
1 
1      Jump relaxing is performed by the linker because jump offsets are
1      not known before code is located.  Therefore, the assembler code
1      generated by the compiler is the same, but the instructions in the
1      executable may differ from instructions in the assembler code.
1 
1      Relaxing must be turned on if linker stubs are needed, see the
1      section on 'EIND' and linker stubs below.
1 
1 '-mrmw'
1      Assume that the device supports the Read-Modify-Write instructions
1      'XCH', 'LAC', 'LAS' and 'LAT'.
1 
1 '-mshort-calls'
1 
1      Assume that 'RJMP' and 'RCALL' can target the whole program memory.
1 
1      This option is used internally for multilib selection.  It is not
1      an optimization option, and you don't need to set it by hand.
1 
1 '-msp8'
1      Treat the stack pointer register as an 8-bit register, i.e. assume
1      the high byte of the stack pointer is zero.  In general, you don't
1      need to set this option by hand.
1 
1      This option is used internally by the compiler to select and build
1      multilibs for architectures 'avr2' and 'avr25'.  These
1      architectures mix devices with and without 'SPH'.  For any setting
1      other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
1      or removes this option from the compiler proper's command line,
1      because the compiler then knows if the device or architecture has
1      an 8-bit stack pointer and thus no 'SPH' register or not.
1 
1 '-mstrict-X'
1      Use address register 'X' in a way proposed by the hardware.  This
1      means that 'X' is only used in indirect, post-increment or
1      pre-decrement addressing.
1 
1      Without this option, the 'X' register may be used in the same way
1      as 'Y' or 'Z' which then is emulated by additional instructions.
1      For example, loading a value with 'X+const' addressing with a small
1      non-negative 'const < 64' to a register RN is performed as
1 
1           adiw r26, const   ; X += const
1           ld   RN, X        ; RN = *X
1           sbiw r26, const   ; X -= const
1 
1 '-mtiny-stack'
1      Only change the lower 8 bits of the stack pointer.
1 
1 '-mfract-convert-truncate'
1      Allow to use truncation instead of rounding towards zero for
1      fractional fixed-point types.
1 
1 '-nodevicelib'
1      Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
1 
1 '-nodevicespecs'
1      Don't add '-specs=device-specs/specs-<mcu>' to the compiler
1      driver's command line.  The user takes responsibility for supplying
1      the sub-processes like compiler proper, assembler and linker with
1      appropriate command line options.
1 
1 '-Waddr-space-convert'
1      Warn about conversions between address spaces in the case where the
1      resulting address space is not contained in the incoming address
1      space.
1 
1 '-Wmisspelled-isr'
1      Warn if the ISR is misspelled, i.e.  without __vector prefix.
1      Enabled by default.
1 
1 3.18.5.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
1 ................................................................
1 
1 Pointers in the implementation are 16 bits wide.  The address of a
1 function or label is represented as word address so that indirect jumps
1 and calls can target any code address in the range of 64 Ki words.
1 
1  In order to facilitate indirect jump on devices with more than 128 Ki
1 bytes of program memory space, there is a special function register
1 called 'EIND' that serves as most significant part of the target address
1 when 'EICALL' or 'EIJMP' instructions are used.
1 
1  Indirect jumps and calls on these devices are handled as follows by the
1 compiler and are subject to some limitations:
1 
1    * The compiler never sets 'EIND'.
1 
1    * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
1      instructions or might read 'EIND' directly in order to emulate an
1      indirect call/jump by means of a 'RET' instruction.
1 
1    * The compiler assumes that 'EIND' never changes during the startup
1      code or during the application.  In particular, 'EIND' is not
1      saved/restored in function or interrupt service routine
1      prologue/epilogue.
1 
1    * For indirect calls to functions and computed goto, the linker
1      generates _stubs_.  Stubs are jump pads sometimes also called
1      _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
1      The stub contains a direct jump to the desired address.
1 
1    * Linker relaxation must be turned on so that the linker generates
1      the stubs correctly in all situations.  See the compiler option
1      '-mrelax' and the linker option '--relax'.  There are corner cases
1      where the linker is supposed to generate stubs but aborts without
1      relaxation and without a helpful error message.
1 
1    * The default linker script is arranged for code with 'EIND = 0'.  If
1      code is supposed to work for a setup with 'EIND != 0', a custom
1      linker script has to be used in order to place the sections whose
1      name start with '.trampolines' into the segment where 'EIND' points
1      to.
1 
1    * The startup code from libgcc never sets 'EIND'.  Notice that
1      startup code is a blend of code from libgcc and AVR-LibC. For the
1      impact of AVR-LibC on 'EIND', see the
1      AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
1 
1    * It is legitimate for user-specific startup code to set up 'EIND'
1      early, for example by means of initialization code located in
1      section '.init3'.  Such code runs prior to general startup code
1      that initializes RAM and calls constructors, but after the bit of
1      startup code from AVR-LibC that sets 'EIND' to the segment where
1      the vector table is located.
1           #include <avr/io.h>
1 
1           static void
1           __attribute__((section(".init3"),naked,used,no_instrument_function))
1           init3_set_eind (void)
1           {
1             __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
1                             "out %i0,r24" :: "n" (&EIND) : "r24","memory");
1           }
1 
1      The '__trampolines_start' symbol is defined in the linker script.
1 
1    * Stubs are generated automatically by the linker if the following
1      two conditions are met:
1 
1         - The address of a label is taken by means of the 'gs' modifier
1           (short for _generate stubs_) like so:
1                LDI r24, lo8(gs(FUNC))
1                LDI r25, hi8(gs(FUNC))
1         - The final location of that label is in a code segment
1           _outside_ the segment where the stubs are located.
1 
1    * The compiler emits such 'gs' modifiers for code labels in the
1      following situations:
1         - Taking address of a function or code label.
1         - Computed goto.
1         - If prologue-save function is used, see '-mcall-prologues'
1           command-line option.
1         - Switch/case dispatch tables.  If you do not want such dispatch
1           tables you can specify the '-fno-jump-tables' command-line
1           option.
1         - C and C++ constructors/destructors called during
1           startup/shutdown.
1         - If the tools hit a 'gs()' modifier explained above.
1 
1    * Jumping to non-symbolic addresses like so is _not_ supported:
1 
1           int main (void)
1           {
1               /* Call function at word address 0x2 */
1               return ((int(*)(void)) 0x2)();
1           }
1 
1      Instead, a stub has to be set up, i.e. the function has to be
1      called through a symbol ('func_4' in the example):
1 
1           int main (void)
1           {
1               extern int func_4 (void);
1 
1               /* Call function at byte address 0x4 */
1               return func_4();
1           }
1 
1      and the application be linked with '-Wl,--defsym,func_4=0x4'.
1      Alternatively, 'func_4' can be defined in the linker script.
1 
1 3.18.5.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
1 .........................................................................................
1 
1 Some AVR devices support memories larger than the 64 KiB range that can
1 be accessed with 16-bit pointers.  To access memory locations outside
1 this 64 KiB range, the content of a 'RAMP' register is used as high part
1 of the address: The 'X', 'Y', 'Z' address register is concatenated with
1 the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
1 to get a wide address.  Similarly, 'RAMPD' is used together with direct
1 addressing.
1 
1    * The startup code initializes the 'RAMP' special function registers
1      with zero.
1 
1    * If a ⇒named address space AVR Named Address Spaces. other
1      than generic or '__flash' is used, then 'RAMPZ' is set as needed
1      before the operation.
1 
1    * If the device supports RAM larger than 64 KiB and the compiler
1      needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
1      reset to zero after the operation.
1 
1    * If the device comes with a specific 'RAMP' register, the ISR
1      prologue/epilogue saves/restores that SFR and initializes it with
1      zero in case the ISR code might (implicitly) use it.
1 
1    * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
1      you use inline assembler to read from locations outside the 16-bit
1      address range and change one of the 'RAMP' registers, you must
1      reset it to zero after the access.
1 
1 3.18.5.3 AVR Built-in Macros
1 ............................
1 
1 GCC defines several built-in macros so that the user code can test for
1 the presence or absence of features.  Almost any of the following
1 built-in macros are deduced from device capabilities and thus triggered
1 by the '-mmcu=' command-line option.
1 
11  For even more AVR-specific built-in macros see ⇒AVR Named Address
 Spaces and ⇒AVR Built-in Functions.
1 
1 '__AVR_ARCH__'
1      Build-in macro that resolves to a decimal number that identifies
1      the architecture and depends on the '-mmcu=MCU' option.  Possible
1      values are:
1 
1      '2', '25', '3', '31', '35', '4', '5', '51', '6'
1 
1      for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
1      'avr51', 'avr6',
1 
1      respectively and
1 
1      '100', '102', '103', '104', '105', '106', '107'
1 
1      for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
1      'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
1      specifies a device, this built-in macro is set accordingly.  For
1      example, with '-mmcu=atmega8' the macro is defined to '4'.
1 
1 '__AVR_DEVICE__'
1      Setting '-mmcu=DEVICE' defines this built-in macro which reflects
1      the device's name.  For example, '-mmcu=atmega8' defines the
1      built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
1      '__AVR_ATtiny261A__', etc.
1 
1      The built-in macros' names follow the scheme '__AVR_DEVICE__' where
1      DEVICE is the device name as from the AVR user manual.  The
1      difference between DEVICE in the built-in macro and DEVICE in
1      '-mmcu=DEVICE' is that the latter is always lowercase.
1 
1      If DEVICE is not a device but only a core architecture like
1      'avr51', this macro is not defined.
1 
1 '__AVR_DEVICE_NAME__'
1      Setting '-mmcu=DEVICE' defines this built-in macro to the device's
1      name.  For example, with '-mmcu=atmega8' the macro is defined to
1      'atmega8'.
1 
1      If DEVICE is not a device but only a core architecture like
1      'avr51', this macro is not defined.
1 
1 '__AVR_XMEGA__'
1      The device / architecture belongs to the XMEGA family of devices.
1 
1 '__AVR_HAVE_ELPM__'
1      The device has the 'ELPM' instruction.
1 
1 '__AVR_HAVE_ELPMX__'
1      The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
1 
1 '__AVR_HAVE_MOVW__'
1      The device has the 'MOVW' instruction to perform 16-bit
1      register-register moves.
1 
1 '__AVR_HAVE_LPMX__'
1      The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
1 
1 '__AVR_HAVE_MUL__'
1      The device has a hardware multiplier.
1 
1 '__AVR_HAVE_JMP_CALL__'
1      The device has the 'JMP' and 'CALL' instructions.  This is the case
1      for devices with more than 8 KiB of program memory.
1 
1 '__AVR_HAVE_EIJMP_EICALL__'
1 '__AVR_3_BYTE_PC__'
1      The device has the 'EIJMP' and 'EICALL' instructions.  This is the
1      case for devices with more than 128 KiB of program memory.  This
1      also means that the program counter (PC) is 3 bytes wide.
1 
1 '__AVR_2_BYTE_PC__'
1      The program counter (PC) is 2 bytes wide.  This is the case for
1      devices with up to 128 KiB of program memory.
1 
1 '__AVR_HAVE_8BIT_SP__'
1 '__AVR_HAVE_16BIT_SP__'
1      The stack pointer (SP) register is treated as 8-bit respectively
1      16-bit register by the compiler.  The definition of these macros is
1      affected by '-mtiny-stack'.
1 
1 '__AVR_HAVE_SPH__'
1 '__AVR_SP8__'
1      The device has the SPH (high part of stack pointer) special
1      function register or has an 8-bit stack pointer, respectively.  The
1      definition of these macros is affected by '-mmcu=' and in the cases
1      of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
1 
1 '__AVR_HAVE_RAMPD__'
1 '__AVR_HAVE_RAMPX__'
1 '__AVR_HAVE_RAMPY__'
1 '__AVR_HAVE_RAMPZ__'
1      The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
1      function register, respectively.
1 
1 '__NO_INTERRUPTS__'
1      This macro reflects the '-mno-interrupts' command-line option.
1 
1 '__AVR_ERRATA_SKIP__'
1 '__AVR_ERRATA_SKIP_JMP_CALL__'
1      Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
1      instructions because of a hardware erratum.  Skip instructions are
1      'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
1      only defined if '__AVR_HAVE_JMP_CALL__' is also set.
1 
1 '__AVR_ISA_RMW__'
1      The device has Read-Modify-Write instructions (XCH, LAC, LAS and
1      LAT).
1 
1 '__AVR_SFR_OFFSET__=OFFSET'
1      Instructions that can address I/O special function registers
1      directly like 'IN', 'OUT', 'SBI', etc. may use a different address
1      as if addressed by an instruction to access RAM like 'LD' or 'STS'.
1      This offset depends on the device architecture and has to be
1      subtracted from the RAM address in order to get the respective
1      I/O address.
1 
1 '__AVR_SHORT_CALLS__'
1      The '-mshort-calls' command line option is set.
1 
1 '__AVR_PM_BASE_ADDRESS__=ADDR'
1      Some devices support reading from flash memory by means of 'LD*'
1      instructions.  The flash memory is seen in the data address space
1      at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
1      defined, this feature is not available.  If defined, the address
1      space is linear and there is no need to put '.rodata' into RAM.
1      This is handled by the default linker description file, and is
1      currently available for 'avrtiny' and 'avrxmega3'.  Even more
1      convenient, there is no need to use address spaces like '__flash'
1      or features like attribute 'progmem' and 'pgm_read_*'.
1 
1 '__WITH_AVRLIBC__'
1      The compiler is configured to be used together with AVR-Libc.  See
1      the '--with-avrlibc' configure option.
1