Add support for a __gcc_isr pseudo isntruction to the AVR assembler.
authorGeorg-Johann Lay <avr@gjlay.de>
Fri, 30 Jun 2017 15:37:39 +0000 (16:37 +0100)
committerNick Clifton <nickc@redhat.com>
Fri, 30 Jun 2017 15:37:39 +0000 (16:37 +0100)
commit32f76c677333510350f21a40db062a8d17995c53
treee0471d427aaed0ea30d3ce0044a55cc5c95a1816
parent33f466961ce01a7db6dbec6b39aafb7af1855645
Add support for a __gcc_isr pseudo isntruction to the AVR assembler.

    PR gas/21683
include * opcode/avr.h (AVR_INSN): Add one for __gcc_isr.

gas * doc/c-avr.texi (AVR Options) <-mgcc-isr>: Document it.
    (AVR Pseudo Instructions): New node.
    * config/tc-avr.h (md_pre_output_hook): Define to avr_pre_output_hook.
    (md_undefined_symbol): Define to avr_undefined_symbol.
    (avr_pre_output_hook, avr_undefined_symbol): New protos.
    * config/tc-avr.c (struc-symbol.h): Include it.
    (ISR_CHUNK_Done, ISR_CHUNK_Prologue, ISR_CHUNK_Epilogue): New enums.
    (avr_isr, avr_gccisr_opcode)
    (avr_no_sreg_hash, avr_no_sreg): New static variables.
    (avr_opt_s) <have_gccisr>: Add field.
    (avr_opt): Add initializer for have_gccisr.
    (enum options) <OPTION_HAVE_GCCISR>: Add enum.
    (md_longopts) <"mgcc-isr">: Add entry.
    (md_show_usage): Document -mgcc-isr.
    (md_parse_option) [OPTION_HAVE_GCCISR]: Handle it.
    (md_undefined_symbol): Remove.
    (avr_undefined_symbol, avr_pre_output_hook): New fuctions.
    (md_begin) <avr_no_sreg_hash, avr_gccisr_opcode>: Initialize them.
    (avr_operand) <pregno>: Add argument and set *pregno if function
    is called for a register constraint.
    [N]: Handle constraint.
    (avr_operands) <avr_operand>: Pass 5th parameter to calls.
    [avr_opt.have_gccisr]: Call avr_update_gccisr.  Call
    avr_gccisr_operands instead of avr_operands.
    (avr_update_gccisr, avr_emit_insn, avr_patch_gccisr_frag)
    (avr_gccisr_operands, avr_check_gccisr_done): New static functions.
    * testsuite/gas/avr/gccisr-01.d: New test.
    * testsuite/gas/avr/gccisr-01.s: New test.
    * testsuite/gas/avr/gccisr-02.d: New test.
    * testsuite/gas/avr/gccisr-02.s: New test.
    * testsuite/gas/avr/gccisr-03.d: New test.
    * testsuite/gas/avr/gccisr-03.s: New test.
12 files changed:
gas/ChangeLog
gas/config/tc-avr.c
gas/config/tc-avr.h
gas/doc/c-avr.texi
gas/testsuite/gas/avr/gccisr-01.d [new file with mode: 0644]
gas/testsuite/gas/avr/gccisr-01.s [new file with mode: 0644]
gas/testsuite/gas/avr/gccisr-02.d [new file with mode: 0644]
gas/testsuite/gas/avr/gccisr-02.s [new file with mode: 0644]
gas/testsuite/gas/avr/gccisr-03.d [new file with mode: 0644]
gas/testsuite/gas/avr/gccisr-03.s [new file with mode: 0644]
include/ChangeLog
include/opcode/avr.h