From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23161 invoked by alias); 9 Sep 2004 12:46:30 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 23146 invoked from network); 9 Sep 2004 12:46:28 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 9 Sep 2004 12:46:28 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i89CkRS0009616 for ; Thu, 9 Sep 2004 08:46:27 -0400 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i89CkQ703245 for ; Thu, 9 Sep 2004 08:46:26 -0400 Received: from cygbert.vinschen.de (vpn50-19.rdu.redhat.com [172.16.50.19]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id i89CkPV09887 for ; Thu, 9 Sep 2004 05:46:25 -0700 Received: by cygbert.vinschen.de (Postfix, from userid 500) id 8EDEF5808D; Thu, 9 Sep 2004 14:47:01 +0200 (CEST) Date: Thu, 09 Sep 2004 12:46:00 -0000 From: Corinna Vinschen To: gdb-patches@sources.redhat.com Subject: [PATCH]: SH 2a - Part 4: Begin using RETURN_VALUE Message-ID: <20040909124701.GA7927@cygbert.vinschen.de> Reply-To: gdb-patches@sources.redhat.com Mail-Followup-To: gdb-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2i X-SW-Source: 2004-09/txt/msg00142.txt.bz2 Hi, this is SH 2a patch 4. It does not introduce new functionality, but instead it converts sh-tdep.c to use RETURN_VALUE instead of STORE_RETURN_VALUE, EXTRACT_RETURN_VALUE, RETURN_VALUE_ON_STACK and USE_STRUCT_CONVENTION. The old functions are still used and just called from the RETURN_VALUE implementations. We have two of them, one for fpu and one for nofpu types. What this patch does *not* do is this: I would love to rename the functions sh_default_store/extract_value and sh3e_sh4_store/extract_value to sh_store/extract_value_nofpu and sh_store/extract_value_fpu. This would decouple the sense of these functions from the cpu names, which is rather irritating and wrong anyway. If that's ok, I'd submit another patch which just performs the renaming. Ok, for the sake of completeness, here are the testresults of various SH cpu types, tested on GNU/Linux host and sh-sim, before and after applying the whole set of SH 2a patches. I hope the choice of CPUs is representative enough: BEFORE AFTER ----- ----- sh-sim/-m2a -- 88 sh-sim/-m2a-nofpu -- 79 sh-sim/-m2e 100 100 sh-sim/-m3 79 79 sh-sim/-m4 88 88 sh-sim/-m4/-ml 86 86 sh-sim/-m4a-single 88 88 Corinna * sh-tdep.c (sh_return_value_nofpu): New function, implementing RETURN_VALUE. (sh_return_value_fpu): Ditto for CPUs with FPU. (sh_gdbarch_init): Remove STORE_RETURN_VALUE, EXTRACT_RETURN_VALUE, RETURN_VALUE_ON_STACK and USE_STRUCT_CONVENTION throughout. Install sh_return_value_nofpu resp. sh_return_value_fpu as RETURN_VALUE functions. --- sh-tdep.c.3 2004-09-08 18:46:55.000000000 +0200 +++ sh-tdep.c 2004-09-08 18:47:01.000000000 +0200 @@ -1281,6 +1281,34 @@ sh3e_sh4_store_return_value (struct type sh_default_store_return_value (type, regcache, valbuf); } +static enum return_value_convention +sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *type, + struct regcache *regcache, + void *readbuf, const void *writebuf) +{ + if (sh_use_struct_convention (0, type)) + return RETURN_VALUE_STRUCT_CONVENTION; + if (writebuf) + sh_default_store_return_value (type, regcache, writebuf); + else if (readbuf) + sh_default_extract_return_value (type, regcache, readbuf); + return RETURN_VALUE_REGISTER_CONVENTION; +} + +static enum return_value_convention +sh_return_value_fpu (struct gdbarch *gdbarch, struct type *type, + struct regcache *regcache, + void *readbuf, const void *writebuf) +{ + if (sh_use_struct_convention (0, type)) + return RETURN_VALUE_STRUCT_CONVENTION; + if (writebuf) + sh3e_sh4_store_return_value (type, regcache, writebuf); + else if (readbuf) + sh3e_sh4_extract_return_value (type, regcache, readbuf); + return RETURN_VALUE_REGISTER_CONVENTION; +} + /* Print the registers in a form similar to the E7000 */ static void @@ -2564,16 +2592,15 @@ sh_gdbarch_init (struct gdbarch_info inf set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info); set_gdbarch_breakpoint_from_pc (gdbarch, sh_breakpoint_from_pc); - set_gdbarch_deprecated_use_struct_convention (gdbarch, sh_use_struct_convention); set_gdbarch_print_insn (gdbarch, gdb_print_insn_sh); set_gdbarch_register_sim_regno (gdbarch, legacy_register_sim_regno); set_gdbarch_write_pc (gdbarch, generic_target_write_pc); - set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value); - set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value); - set_gdbarch_deprecated_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); + set_gdbarch_return_value (gdbarch, sh_return_value_nofpu); + set_gdbarch_deprecated_extract_struct_value_address (gdbarch, + sh_extract_struct_value_address); set_gdbarch_skip_prologue (gdbarch, sh_skip_prologue); set_gdbarch_inner_than (gdbarch, core_addr_lessthan); @@ -2607,9 +2634,7 @@ sh_gdbarch_init (struct gdbarch_info inf set_gdbarch_register_name (gdbarch, sh_sh2e_register_name); set_gdbarch_register_type (gdbarch, sh_sh3e_register_type); set_gdbarch_fp0_regnum (gdbarch, 25); - set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value); - set_gdbarch_extract_return_value (gdbarch, - sh3e_sh4_extract_return_value); + set_gdbarch_return_value (gdbarch, sh_return_value_fpu); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); break; @@ -2622,8 +2647,7 @@ sh_gdbarch_init (struct gdbarch_info inf set_gdbarch_num_pseudo_regs (gdbarch, 9); set_gdbarch_pseudo_register_read (gdbarch, sh_pseudo_register_read); set_gdbarch_pseudo_register_write (gdbarch, sh_pseudo_register_write); - set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value); - set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value); + set_gdbarch_return_value (gdbarch, sh_return_value_fpu); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); break; @@ -2652,9 +2676,7 @@ sh_gdbarch_init (struct gdbarch_info inf set_gdbarch_register_name (gdbarch, sh_sh3e_register_name); set_gdbarch_register_type (gdbarch, sh_sh3e_register_type); set_gdbarch_fp0_regnum (gdbarch, 25); - set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value); - set_gdbarch_extract_return_value (gdbarch, - sh3e_sh4_extract_return_value); + set_gdbarch_return_value (gdbarch, sh_return_value_fpu); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); break; @@ -2671,9 +2693,7 @@ sh_gdbarch_init (struct gdbarch_info inf set_gdbarch_num_pseudo_regs (gdbarch, 13); set_gdbarch_pseudo_register_read (gdbarch, sh_pseudo_register_read); set_gdbarch_pseudo_register_write (gdbarch, sh_pseudo_register_write); - set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value); - set_gdbarch_extract_return_value (gdbarch, - sh3e_sh4_extract_return_value); + set_gdbarch_return_value (gdbarch, sh_return_value_fpu); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); break; -- Corinna Vinschen Cygwin Project Co-Leader Red Hat, Inc.