Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Corinna Vinschen <vinschen@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: [PATCH]: SH 2a - Part 4: Begin using RETURN_VALUE
Date: Thu, 09 Sep 2004 12:46:00 -0000	[thread overview]
Message-ID: <20040909124701.GA7927@cygbert.vinschen.de> (raw)

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.


             reply	other threads:[~2004-09-09 12:46 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-09 12:46 Corinna Vinschen [this message]
2004-10-05 20:09 ` Elena Zannoni
2004-10-06  9:07   ` Corinna Vinschen
2004-10-06 12:28     ` Elena Zannoni
2004-10-06 12:54       ` [PATCH] sh-tdep.c: Rename store/extract functions for better readability (was Re: [PATCH]: SH 2a - Part 4: Begin using RETURN_VALUE) Corinna Vinschen
2004-10-22  3:31         ` Elena Zannoni
2004-12-14 15:53           ` Corinna Vinschen

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=20040909124701.GA7927@cygbert.vinschen.de \
    --to=vinschen@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    /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