This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH, MIPS] Support new interrupt handler options



> -----Original Message-----
> From: Robert Suchanek [mailto:Robert.Suchanek@imgtec.com]
> Sent: Tuesday, July 14, 2015 11:14 AM
> To: Moore, Catherine; Matthew Fortune; gcc-patches@gcc.gnu.org
> Subject: RE: [PATCH, MIPS] Support new interrupt handler options
> 
> Hi Catherine,
> 
> > I'm getting build errors with the current TOT and your patch.
> >
> > The first errors that I encounter are:
> > gcc/config/mips/mips.c:1355:1: warning: 'mips_int_mask
> > mips_interrupt_mask(tree)' defined but not used [-Wunused-function]
> > gcc/config/mips/mips.c:1392:1: warning: 'mips_shadow_set
> > mips_use_shadow_register_set(tree)' defined but not used
> > [-Wunused-function]
> >
> > Removing these two functions results in further errors that I have not
> > investigated.
> > Will you try applying and building your patch again?
> 
> I have no explanation why this could happen.  My guess is that a part of the
> patch did not apply correctly.  Those functions are used in
> mips_compute_frame_info().
> 
> I did notice and fixed warnings about unused variables/arguments.

I re-ran patch with the verbose option and found that it was silently discarding hunks (starting with #7) because it thought it was garbage.

> 
> >
> > I have a couple of further comments on the existing patch, see below.
> 
> Comments added.  Please have a look at the attached revised patch.
> Tested against r225768.
> 
> Regards,
> Robert
> 
> 
> gcc/
> 	* config/mips/mips.c (mips_int_mask): New enum.
> 	(mips_shadow_set): Likewise.
> 	(int_mask): New variable.
> 	(use_shadow_register_set_p): Change type to enum
> mips_shadow_set.
> 	(machine_function): Add int_mask and use_shadow_register_set.
> 	(mips_attribute_table): Add attribute handlers for interrupt and
> 	use_shadow_register_set.
> 	(mips_interrupt_mask): New static function.
> 	(mips_handle_interrupt_attr): Likewise.
> 	(mips_handle_use_shadow_register_set_attr): Likewise.
> 	(mips_use_shadow_register_set): Change return type to enum
> 	mips_shadow_set.  Add argument handling for
> use_shadow_register_set
> 	attribute.
> 	(mips_interrupt_extra_called_saved_reg_p): Update the conditional
> to
> 	compare with mips_shadow_set enum.
> 	(mips_compute_frame_info): Add interrupt mask and
> 	use_shadow_register_set to per-function information structure.
> 	Add a stack slot for EPC unconditionally.
> 	(mips_expand_prologue): Compare use_shadow_register_set value
> 	with mips_shadow_set enum.  Save EPC always in K1, clobber only K1
> for
> 	masked interrupt register but in EIC mode use K0 and save Cause in
> K0.
> 	EPC saved and restored unconditionally.  Use PMODE_INSN macro
> when
> 	copying the stack pointer from the shadow register set.
> 	* config/mips/mips.h (SR_IM0): New define.
> 	* config/mips/mips.md (mips_rdpgpr): Rename to...
> 	(mips_rdpgpr_<mode>): ...this.  Use the Pmode iterator.
> 	* doc/extend.texi (Declaring Attributes of Functions): Document
> 	optional arguments for interrupt and use_shadow_register_set
> 	attributes.
> 
> gcc/testsuite/
> 	* gcc.target/mips/interrupt_handler-4.c: New test.

This is now OK to commit.
Catherine


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]