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