[patch,gas,avr] PR21683: Add new pseudo instruction __gcc_isr

Georg-Johann Lay avr@gjlay.de
Thu Jun 29 07:42:00 GMT 2017


Hi, this is a small simplification:  no special treatment if there
are no epilogues.  This will we handled on GCC side.

Johann

ChangeLog remains the same.



On 28.06.2017 15:06, Georg-Johann Lay wrote:
> Hi, this adds a new pseudo-insn __gcc_ist to the GAS avr back-end.
> 
> It can be enabled by new -mgcc-isr GAS command line option.
> 
> The patch contains addition of the feature, documentation in 
> doc/c-avr.texi and some test coverage in 3 new test cases.
> 
> The feature is supposed to work together with avr-gcc and help to 
> generate more efficient code for interrupt service routines (ISRs).
> 
> The pseudo insn adds a fragment of type rs_machine_dependent to the 
> fragment chain.  These fragments are transformed into ordinary rs_fill 
> code frags once the exact code and size are worked out.  All this 
> happens during md_assemble.
> 
> A sanity check is run by md_pre_output_hook; it will diagnose dangling 
> situations that cannot be detected by md_assemble.
> 
> A new symbol is created if __gcc_isr.n_pushed is encountered.  It will 
> be replaced by the number of pushes one that number has been worked out.
> 
> 
> If this is ok, please apply.  Thanks
> 
> 
> Johann
> 
> /
>      PR gas/21683
>      * include/opcode/avr.h (AVR_INSN): Add one for __gcc_isr.
> 
> gas/
>      PR gas/21683
>      * 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.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: bin-pr21683-gccisr-v2.diff
Type: text/x-patch
Size: 35264 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20170629/fecd822f/attachment.bin>


More information about the Binutils mailing list