public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Eric Botcazou <ebotcazou@adacore.com>
To: "Laurent Rougé" <laurent.rouge@menta.fr>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: Reintroduce -mflat option on SPARC
Date: Thu, 26 May 2011 21:54:00 -0000	[thread overview]
Message-ID: <201105262132.11006.ebotcazou@adacore.com> (raw)
In-Reply-To: <4DDE9EA9.5080206@menta.fr>

[-- Attachment #1: Type: text/plain, Size: 3959 bytes --]

> In fact, I haven't tried to make big changes in how mflat option was
> implemented. From my point of view, the goal was to facilitate mflat
> option reintroduction first, and then improve it after. I hope you
> understand. I know there's some place to improve, maybe you have start
> to do it ?

Yes, I have changed a few things, patch attached.  The basic stuff works, but 
not yet the fancy features (non-local gotos, setjmp/longjmp and exceptions).  
I'm also working on the GDB side.

> So why mflat is like that we should ask the questions to 'wilson' who
> did it in 92 (see revision 1275) !

Indeed, thanks for doing the archaeology. :-)


	* doc/invoke.texi (SPARC options): Add -mflat.
	* config/sparc/sparc.opt: Likewise.
	* config/sparc/sparc-protos.h (sparc_flat_expand_prologue): Declare.
	(sparc_flat_expand_epilogue): Likewise.
	(load_got_register): Likewise.
	* config/sparc/sparc.h (CPP_CPU_SPEC): Define _FLAT in flat mode.
	(SPARC_INCOMING_INT_ARG_FIRST): Add TARGET_FLAT handling.
	(INCOMING_REGNO): Likewise.
	(OUTGOING_REGNO): Likewise.
	(LOCAL_REGNO): Likewise.
	(FIXED_REGISTERS): Set 0 for %fp.
	(CALL_USED_REGISTERS): Likewise.
	(RETURN_ADDR_REGNUM): Define.
	(RETURN_ADDR_RTX): Use it.
	(EH_RETURN_HANDLER_RTX): Use it.
	(INCOMING_RETURN_ADDR_REGNUM): Define.
	(INCOMING_RETURN_ADDR_RTX): Use it.
	(DWARF_FRAME_RETURN_COLUMN): Likewise.
	(EH_RETURN_REGNUM): Define.
	(EH_RETURN_STACKADJ_RTX): Use it.
	(EPILOGUE_USES): Use them and add TARGET_FLAT handling.
	* config/sparc/sparc.c (struct machine_function): Add frame_size,
	apparent_frame_size, frame_base_reg, frame_base_offset, n_regs
	and save_local_in_regs_p fields.
	(sparc_frame_size, sparc_apparent_frame_size, sparc_frame_base_reg,
	sparc_frame_base_offset, sparc_n_regs, sparc_save_local_in_regs_p):
	New macros.
	(sparc_option_override): Error out if -fcall-saved-REG is specified
	for Out registers.
	(eligible_for_restore_insn): Fix formatting.
	(eligible_for_return_delay): Likewise.  Add TARGET_FLAT handling.
	(load_got_register): Make global.
	(save_global_or_fp_reg_p): New predicate.
	(incoming_return_addr_reg_clobbered_p): Likewise.
	(save_local_or_in_reg_p): Likewise.
	(sparc_compute_frame_size): Use them.  Add TARGET_FLAT handling.
	(SORR_SAVE, SORR_RESTORE): Delete.
	(sorr_pred_t): New typedef.
	(sorr_act_t): New enum.
	(save_or_restore_regs): Rename to...
	(emit_save_or_restore): ...this.  Changed type of LOW/HIGH parameters
	remove ACTION parameter, add LEAF_FUNCTION_P, SAVE_P, ACTION_TRUE and
	ACTION_FALSE parameters.  Implement more general mechanism.  Add CFI
	information for double-word saves in 32-bit mode.
	(emit_adjust_base_to_offset): New function extracted from...
	(emit_save_or_restore_regs): ...this.  Rename the rest to...
	(emit_save_or_restore_regs_global_fp_regs): ...this.
	(emit_save_or_restore_regs_local_in_regs): New function.
	(gen_create_flat_frame_[123]): New functions.
	(sparc_expand_prologue): Use SIZE local variable.  Adjust.
	(sparc_flat_expand_prologue): New function.
	(sparc_asm_function_prologue): Add TARGET_FLAT handling.
	(sparc_expand_epilogue): Use SIZE local variable.  Adjust.
	(sparc_flat_expand_epilogue): New function.
	(sparc_can_use_return_insn_p):  Add TARGET_FLAT handling.
	(output_return): Likewise.
	(sparc_function_ok_for_sibcall): Likewise.
	(sparc_frame_pointer_required): Likewise.
	(sparc_can_eliminate): Call sparc_frame_pointer_required directly.
	(sparc_conditional_register_usage): If TARGET_FLAT, disable leaf
	function optimization.
	* config/sparc/sparc.md (flat): New attribute.
	(prologue): Add TARGET_FLAT handling.
	(epilogue): Likewise.
	(sibcall_epilogue): Likewise.
	(save_register_window): Disable if TARGET_FLAT.
	(create_flat_frame_[123]): New patterns.
	(return_internal): Add TARGET_FLAT handling.
	(flush_register_windows): Likewise.
	(goto_handler_and_restore): Likewise.
	(exception_receiver): New pattern.
	(builtin_setjmp_receiver): Likewise.


-- 
Eric Botcazou

[-- Attachment #2: gcc-4.7-mflat-2.diff.gz --]
[-- Type: application/x-gzip, Size: 12293 bytes --]

  reply	other threads:[~2011-05-26 19:32 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-23 13:51 Laurent Rougé
2011-02-26  0:18 ` Eric Botcazou
2011-04-12 17:44 ` Eric Botcazou
2011-04-14 18:55   ` Laurent Rougé
2011-05-17 13:06     ` Eric Botcazou
2011-05-18 14:36       ` Eric Botcazou
2011-05-26 20:29         ` Laurent Rougé
2011-05-26 21:54           ` Eric Botcazou [this message]
2011-06-10 11:11             ` Eric Botcazou

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=201105262132.11006.ebotcazou@adacore.com \
    --to=ebotcazou@adacore.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=laurent.rouge@menta.fr \
    /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).