public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Moore, Catherine" <Catherine_Moore@mentor.com>
To: Robert Suchanek <Robert.Suchanek@imgtec.com>,
	Matthew Fortune	<Matthew.Fortune@imgtec.com>,
	"gcc-patches@gcc.gnu.org"	<gcc-patches@gcc.gnu.org>
Cc: "Moore, Catherine" <Catherine_Moore@mentor.com>
Subject: RE: [PATCH, MIPS] Support new interrupt handler options
Date: Mon, 13 Jul 2015 21:11:00 -0000	[thread overview]
Message-ID: <FD3DCEAC5B03E9408544A1E416F112420192C8986A@NA-MBX-04.mgc.mentorg.com> (raw)
In-Reply-To: <B5E67142681B53468FAF6B7C31356562441AA1F3@hhmail02.hh.imgtec.org>



> -----Original Message-----
> From: Robert Suchanek [mailto:Robert.Suchanek@imgtec.com]
> Sent: Wednesday, July 08, 2015 6:43 AM
> To: Matthew Fortune; Moore, Catherine; gcc-patches@gcc.gnu.org
> Subject: [PATCH, MIPS] Support new interrupt handler options
> 
> Hi,
> 
> This patch adds support for optional arguments for interrupt and
> use_shadow_register_set attributes.  The patch also fixes an ICE if both
> interrupt and use_shadow_register_set are enabled and compiled with -
> mips64r2 -mabi=64 discovered during testing of the attached test.
> 
> The interrupt attribute accepts new arguments: "eic" and
> "vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]".  The former is the
> default if no argument is given and the latter changes the behaviour of GCC
> and masks interrupts from sw0 up to and including the specified vector.  As
> part of this change, the EPC is now saved and restored unconditionally to
> recover the state in nested interrupts.  Only K1 register is clobbered for
> masked interrupts but for non-masked interrupts K0 is still used.
> 
> The use_shadow_register_set attribute has a new option, "intstack", to
> indicate that the shadow register set has a valid stack pointer.  With this
> option "rdpgpr $sp, $sp" will not be generated for an ISR.
> 
> Tested with mips-img-elf, mips-img-linux-gnu and mips64el-linux-gnu cross
> compilers. Ok to apply?
> 
> Regards,
> Robert
> 
> 2015-07-07  Matthew Fortune  <matthew.fortune@imgtec.com>
>             Robert Suchanek  <robert.suchanek@imgtec.com>
> 
> 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.

Hi Robert,
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 a couple of further comments on the existing patch, see below.

Thanks,
Catherine

> diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index
> ce21a0f..b6ad7db 100644
> --- a/gcc/config/mips/mips.c
> +++ b/gcc/config/mips/mips.c
> @@ -1325,13 +1359,62 @@ mips_interrupt_type_p (tree type)
>    return lookup_attribute ("interrupt", TYPE_ATTRIBUTES (type)) != NULL;  }
> 
> +static enum mips_int_mask
> +mips_interrupt_mask (tree type)

This function requires a comment.

> +static enum mips_shadow_set
> +mips_use_shadow_register_set (tree type)

Likewise.

>  {
> @@ -1537,6 +1620,87 @@ mips_can_inline_p (tree caller, tree callee)
>      return false;
>    return default_target_can_inline_p (caller, callee);  }
> +
> +static tree
> +mips_handle_interrupt_attr (tree *node, tree name, tree args,
> +			    int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
> {
Likewise.

> +
> +static tree
> +mips_handle_use_shadow_register_set_attr (tree *node, tree name, tree
> args,

And here as well.
> 

  reply	other threads:[~2015-07-13 21:11 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-08 10:42 Robert Suchanek
2015-07-13 21:11 ` Moore, Catherine [this message]
2015-07-14 15:18   ` Robert Suchanek
2015-07-14 21:30     ` Moore, Catherine
2015-07-15 12:03       ` Robert Suchanek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=FD3DCEAC5B03E9408544A1E416F112420192C8986A@NA-MBX-04.mgc.mentorg.com \
    --to=catherine_moore@mentor.com \
    --cc=Matthew.Fortune@imgtec.com \
    --cc=Robert.Suchanek@imgtec.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).