From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22553 invoked by alias); 10 Jun 2011 10:51:59 -0000 Received: (qmail 22544 invoked by uid 22791); 10 Jun 2011 10:51:58 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from mel.act-europe.fr (HELO mel.act-europe.fr) (194.98.77.210) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Jun 2011 10:51:43 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id 9B9D8CB0242; Fri, 10 Jun 2011 12:51:41 +0200 (CEST) Received: from mel.act-europe.fr ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id K0s992yfM8sG; Fri, 10 Jun 2011 12:51:38 +0200 (CEST) Received: from [192.168.1.2] (bon31-9-83-155-120-49.fbx.proxad.net [83.155.120.49]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mel.act-europe.fr (Postfix) with ESMTP id 593AACB0224; Fri, 10 Jun 2011 12:51:37 +0200 (CEST) From: Eric Botcazou To: Laurent =?iso-8859-1?q?Roug=E9?= Subject: Re: Reintroduce -mflat option on SPARC Date: Fri, 10 Jun 2011 11:11:00 -0000 User-Agent: KMail/1.9.9 Cc: gcc-patches@gcc.gnu.org References: <4D64F83B.5060704@menta.fr> <4DDE9EA9.5080206@menta.fr> <201105262132.11006.ebotcazou@adacore.com> In-Reply-To: <201105262132.11006.ebotcazou@adacore.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_4cf8Nvv7Oaz2N7p" Message-Id: <201106101251.36725.ebotcazou@adacore.com> Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-06/txt/msg00822.txt.bz2 --Boundary-00=_4cf8Nvv7Oaz2N7p Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Content-Disposition: inline Content-length: 5544 > 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. I've now installed the attached version. It adds support for the above fancy features plus sibling calls, frame pointer elimination and 64-bit code in flat mode. I'll submit the associated GDB patch sometime next week. It also contains a few changes for the regular mode: - %fp isn't a fixed register anymore, - EXIT_IGNORE_STACK is defined to 1 unconditionally, - __builtin_eh_return is more correctly implemented, - sparc_legitimate_address_p was wrongly rejecting offsettable addresses when the offset was too close to 4095. Bootstrapped/regtested on SPARC/Solaris and SPARC64/Solaris. The C testsuite is 100% clean in flat mode; for the others, you need at least -mflat multlibs. 2011-06-10 Eric Botcazou Laurent Rougé * doc/invoke.texi (SPARC options): Add -mflat. * config/sparc/sparc.opt: Likewise. * config/sparc/sparc-protos.h (sparc_expand_epilogue): Add parameter. (sparc_flat_expand_prologue): Declare. (sparc_flat_expand_epilogue): Likewise. * config/sparc/sparc.h (CPP_CPU_SPEC): Do not handle -msoft-float. (CPP_ENDIAN_SPEC): Replace with... (CPP_OTHER_SPEC): ...this. Also handle -mflat and -msoft-float. (CPP_SPEC): Adjust to above change. (EXTRA_SPECS): Likewise. (SPARC_INCOMING_INT_ARG_FIRST): Add TARGET_FLAT handling. (INCOMING_REGNO): Likewise. (OUTGOING_REGNO): Likewise. (LOCAL_REGNO): Likewise. (SETUP_FRAME_ADDRESSES): Likewise. (FIXED_REGISTERS): Set 0 for %fp. (CALL_USED_REGISTERS): Likewise. (INITIAL_ELIMINATION_OFFSET): Pass current_function_is_leaf. (EXIT_IGNORE_STACK): Define to 1 unconditionally. (RETURN_ADDR_REGNUM): Define. (RETURN_ADDR_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. (EH_RETURN_HANDLER_RTX): Delete. (EPILOGUE_USES): Use them and add TARGET_FLAT handling. * config/sparc/sparc.c (apparent_fsize, actual_fsize, num_gfregs): Delete. (struct machine_function): Add frame_size, apparent_frame_size, frame_base_reg, frame_base_offset, n_global_fp_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_global_fp_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. (eligible_for_sibcall_delay): Likewise. (RTX_OK_FOR_OFFSET_P, RTX_OK_FOR_OLO10_P): Add MODE parameter. (sparc_legitimate_address_p): Adjust to above change. (save_global_or_fp_reg_p): New predicate. (return_addr_reg_needed_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_regs): ...this. Change type of LOW and 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. (output_sibcall): Likewise. (sparc_output_mi_thunk): Likewise. (sparc_frame_pointer_required): Likewise. (sparc_conditional_register_usage): If TARGET_FLAT, disable the leaf function optimization. * config/sparc/sparc.md (flat): New attribute. (prologue): Add TARGET_FLAT handling. (save_register_window): Disable if TARGET_FLAT. (create_flat_frame_[123]): New patterns. (epilogue): Add TARGET_FLAT handling. (sibcall_epilogue): Likewise. (eh_return): New expander. (eh_return_internal): New insn and splitter. (return_internal): Add TARGET_FLAT handling. (untyped_return): Remove bogus test and use RETURN_ADDR_REGNUM. (save_stack_nonlocal): Use RETURN_ADDR_REGNUM. (nonlocal_goto): Add TARGET_FLAT handling. * config/sparc/t-elf: Add -mflat multilib. * config/sparc/t-leon: Likewise. 2011-06-10 Eric Botcazou Laurent Rougé * gcc.dg/20020503-1.c: Add back -mflat option on the SPARC. * gcc.target/sparc/sparc-ret.c: Skip if -mflat is passed. 2011-06-10 Eric Botcazou * config/sparc/linux-unwind.h (STACK_BIAS): Define. (sparc64_fallback_frame_state): Use it. (sparc64_frob_update_context): Further adjust context. * config/sparc/sol2-unwind.h (sparc64_frob_update_context): Likewise. * config/sparc/sol2-ci.S: Add TARGET_FLAT handling. * config/sparc/sol2-cn.S: Likewise. -- Eric Botcazou --Boundary-00=_4cf8Nvv7Oaz2N7p Content-Type: application/x-gzip; name="gcc-4.7-mflat-3.diff.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gcc-4.7-mflat-3.diff.gz" Content-length: 22115 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 P9H6zoL5D1xI3Rv09X8AmoxiT4f4AAA= --Boundary-00=_4cf8Nvv7Oaz2N7p--