OSDN Git Service

* rs6000-tdep.c (rs6000_push_dummy_call): Replace references to
authorkevinb <kevinb>
Wed, 13 Oct 2004 16:38:22 +0000 (16:38 +0000)
committerkevinb <kevinb>
Wed, 13 Oct 2004 16:38:22 +0000 (16:38 +0000)
``deprecated_registers'' with equivalent code.  Use gdb_assert()
instead of explicit test and print statement.

gdb/rs6000-tdep.c

index 36741c5..37988a3 100644 (file)
@@ -1478,14 +1478,11 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
             There are 13 fpr's reserved for passing parameters. At this point
             there is no way we would run out of them.  */
 
-         if (len > 8)
-           printf_unfiltered ("Fatal Error: a floating point parameter "
-                               "#%d with a size > 8 is found!\n", argno);
-
-         memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE
-                                        (tdep->ppc_fp0_regnum + 1 + f_argno)],
-                 VALUE_CONTENTS (arg),
-                 len);
+         gdb_assert (len <= 8);
+
+         regcache_cooked_write (regcache,
+                                tdep->ppc_fp0_regnum + 1 + f_argno,
+                                VALUE_CONTENTS (arg));
          ++f_argno;
        }
 
@@ -1495,12 +1492,15 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
          /* Argument takes more than one register.  */
          while (argbytes < len)
            {
-             memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0,
-                     reg_size);
-             memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)],
+             char word[MAX_REGISTER_SIZE];
+             memset (word, 0, reg_size);
+             memcpy (word,
                      ((char *) VALUE_CONTENTS (arg)) + argbytes,
                      (len - argbytes) > reg_size
                        ? reg_size : len - argbytes);
+             regcache_cooked_write (regcache,
+                                   tdep->ppc_gp0_regnum + 3 + ii,
+                                   word);
              ++ii, argbytes += reg_size;
 
              if (ii >= 8)
@@ -1513,9 +1513,11 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
        {
          /* Argument can fit in one register.  No problem.  */
          int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
-         memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, reg_size);
-         memcpy ((char *)&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)] + adj, 
-                 VALUE_CONTENTS (arg), len);
+         char word[MAX_REGISTER_SIZE];
+
+         memset (word, 0, reg_size);
+         memcpy (word, VALUE_CONTENTS (arg), len);
+         regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3 +ii, word);
        }
       ++argno;
     }
@@ -1592,15 +1594,11 @@ ran_out_of_registers_for_arguments:
          if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
            {
 
-             if (len > 8)
-               printf_unfiltered ("Fatal Error: a floating point parameter"
-                                   " #%d with a size > 8 is found!\n", argno);
+             gdb_assert (len <= 8);
 
-             memcpy (&(deprecated_registers
-                        [DEPRECATED_REGISTER_BYTE
-                         (tdep->ppc_fp0_regnum + 1 + f_argno)]),
-                     VALUE_CONTENTS (arg),
-                     len);
+             regcache_cooked_write (regcache,
+                                    tdep->ppc_fp0_regnum + 1 + f_argno,
+                                    VALUE_CONTENTS (arg));
              ++f_argno;
            }