OSDN Git Service

* regclass.c (choose_hard_reg_mode): Handle vector arguments.
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 26 Nov 2001 10:18:47 +0000 (10:18 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 26 Nov 2001 10:18:47 +0000 (10:18 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47338 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/regclass.c

index a3af9cc..411ff77 100644 (file)
@@ -1,3 +1,7 @@
+2001-11-25  Aldy Hernandez  <aldyh@redhat.com>
+
+       * regclass.c (choose_hard_reg_mode): Handle vector arguments.
+
 2001-11-26  Alan Modra  <amodra@bigpond.net.au>
 
        * final.c: (insn_lengths): Make it an int *, so that large jump
index 826da24..9ef8c8c 100644 (file)
@@ -713,6 +713,26 @@ choose_hard_reg_mode (regno, nregs)
   if (found_mode != VOIDmode)
     return found_mode;
 
+  for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
+       mode != VOIDmode;
+       mode = GET_MODE_WIDER_MODE (mode))
+    if (HARD_REGNO_NREGS (regno, mode) == nregs
+       && HARD_REGNO_MODE_OK (regno, mode))
+      found_mode = mode;
+
+  if (found_mode != VOIDmode)
+    return found_mode;
+
+  for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
+       mode != VOIDmode;
+       mode = GET_MODE_WIDER_MODE (mode))
+    if (HARD_REGNO_NREGS (regno, mode) == nregs
+       && HARD_REGNO_MODE_OK (regno, mode))
+      found_mode = mode;
+
+  if (found_mode != VOIDmode)
+    return found_mode;
+
   /* Iterate over all of the CCmodes.  */
   for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m)
     {