2017-06-12 11:40 GMT+04:00 Georg-Johann Lay <a...@gjlay.de>: > On 12.06.2017 08:30, Pitchumani Sivanupandi wrote: >> >> On Friday 09 June 2017 03:59 PM, Georg-Johann Lay wrote: >>> >>> Hi, >>> >>> This patch adds support for devices that can access flash memory >>> by LD* instructions, hence there is no need to put .rodata in RAM. >>> >>> The default linker script for the new multilib versions already >>> supports this feature, it's similar to avrtiny, cf. >>> >>> https://sourceware.org/PR21472 >>> >>> This patch does the following: >>> >>> * Add multilib variants avrxmega3 and avrxmega3/short-calls. >>> >>> * Add new option -mshort-calls for multilib selection between >>> devices with <= 8KiB flash and > 8KiB flash. >>> >>> * Add specs handling for -mshort-calls: The compiler knows >>> if this option is needed or not appropriate (similar to -msp8). >>> >>> * Add new ISA feature AVR_ISA_RCALL for multilib selection >>> via -mshort-calls. >>> >>> * Add a new row to architecture description that contains the >>> start address of flash memory in the RAM address range. >>> (The actual value is not needed). >>> >>> * For devices with flash in RAM space, don't let .rodata >>> objects trigger need for __do_copy_data. >>> >>> * Add some devices. >>> >>> * Add configure test for Binutils PR21472. >>> >>> * Adjust documentation etc. >>> >>> Even the smaller devices with flash <= 8KiB support JMP+CALL, >>> but we get better code by assuming RJMP+RCALL: Jump tables >>> are more efficient and insn length computation is more exact >>> (CALL -> RCALL relaxation would need -mrelax and insn size >>> would still be 4 bytes). >>> >>> Moreover, avr-libc uses __AVR_HAVE_JMP_CALL__ to determine >>> vector entry size, and libgcc uses that macro for flash size >>> estimation. >> >> Hi Johann, >> >>> + AVR_ISA_RCALL = 0x10 /* Use RJMP / RCALL even though RJMP / RCALL >>> + are available (-mshort-calls). */ >> >> >> I think you meant "even though JMP/ CALL are avariable". >> >>> +AVR_MCU ("attiny817", ARCH_AVRXMEGA3, AVR_ISA_RCALL, >>> "__AVR_ATtiny817__", 0x3e00, 0x0, 0x2000) >>> +AVR_MCU ("attiny1616", ARCH_AVRXMEGA3, AVR_ISA_NONE, >>> "__AVR_ATtiny1616__", 0x3800, 0x0, 0x4000) >> >> >> Add attiny1614 device. >> AVR_MCU ("attiny1614", ARCH_AVRXMEGA3, AVR_ISA_NONE, >> "__AVR_ATtiny1614__", 0x3800, 0x0, 0x4000) >> >> Regards, >> Pitchumani > > > Updated patch. > > * config/avr/avr-arch.h (avr_arch_id) <ARCH_AVRXMEGA3>: New enum. > (avr_mcu_t) <flash_pm_offset>: New field. > (avr_device_specific_features) <AVR_ISA_RCALL>: New enum. > * config/avr/avr.h (AVR_SHORT_CALLS): New define. > (AVR_HAVE_JMP_CALL): Don't set if AVR_SHORT_CALLS. > (AVR_TINY_PM_OFFSET): Remove macro. > * config/avr/avr.opt (-mshort-calls): New option. > * config/avr/gen-avr-mmcu-specs.c (print_mcu) > [*self_spec]: Add / remove -mshort-calls depending on AVR_ISA_RCALL. > * config/avr/avr-c.c (avr_cpu_cpp_builtins) > <__AVR_SHORT_CALLS__>: Built-in define if AVR_SHORT_CALLS. > <__AVR_HAVE_JMP_CALL__>: Use AVR_HAVE_JMP_CALL as condition > instead of avr_arch->have_jmp_call. > <__AVR_PM_BASE_ADDRESS__>: Built-in define if > avr_arch->flash_pm_offset. > [AVR_TINY] <__AVR_TINY_PM_BASE_ADDRESS__>: Use > avr_arch->flash_pm_offset to define. > * config/avr/avr-devices.c (avr_arch_types): Add initializers for > new field flash_pm_offset. Add entry for avrxmega3. > (avr_texinfo): Add entry for avrxmega3. > * avr-mcus.def: Add entries for: avrxmega3, attiny212, attiny214, > attiny412, attiny414, attiny416, attiny417, attiny814, > attiny816, attiny817, attiny1614, attiny1616, attiny1617, > > attiny3214, attiny3216, attiny3217. > * config/avr/avr.c (avr_assemble_integer)[AVR_TINY]: Use > avr_arch->flash_pm_offset instead of AVR_TINY_PM_OFFSET. > (avr_print_operand_address) [AVR_TINY]: Same. > (avr_asm_init_sections) <readonly_data_section>: Only patch > callback if avr_arch->flash_pm_offset = 0. > (avr_asm_named_section) <avr_need_copy_data_p>: Skip setting it > for rodata if avr_arch->flash_pm_offset != 0. > (avr_encode_section_info) [AVR_TINY]: Adjust comment. > * config/avr/genmultilib.awk (dir_rcall, opt_rcall): New vars. > (opts) [AVR_ISA_RCALL]: Append opt_rcall. > (m_options): Append opt_rcall. > (m_dirnames): Append dir_rcall. > * config/avr/t-multilib: Regenerate. > > * configure.ac [target=avr]: Check whether avrxmega3 default > linker description file works as needed. > * configure: Regenerate. > * doc/avr-mmcu.texi: Regenerate. > * doc/invoke.texi (AVR Options) <-mshort-calls>: Document it. > <__AVR_ARCH__>: Document avrxmega3 and 103. > <__AVR_HAVE_JMP_CALL__>: Adjust documentation. > <__AVR_SHORT_CALLS__>: Document it. > <__AVR_PM_BASE_ADDRESS__>: Document it. > * doc/extend.texi (AVR Options) <-mshort-calls>: Document it. > (AVR Variable Attributes) <progmem>: Document this is > not needed for avrxmega3. > (AVR Named Address Spaces) <__flash>: Dito. > >
Approved.