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.

Reply via email to