aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2001-11-26 10:18:47 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2001-11-26 10:18:47 +0000
commit78b583fed8b7f8047020113bedea5e0dac25b033 (patch)
treecb594fd03ac4388c66eab7a5ef38fffc9a4b0f9f /gcc
parent3cc9a32fc713254c9dcadbb1df46908bfc33e711 (diff)
downloadgcc-78b583fed8b7f8047020113bedea5e0dac25b033.zip
gcc-78b583fed8b7f8047020113bedea5e0dac25b033.tar.gz
gcc-78b583fed8b7f8047020113bedea5e0dac25b033.tar.bz2
* regclass.c (choose_hard_reg_mode): Handle vector arguments.
From-SVN: r47338
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/regclass.c20
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a3af9cc..411ff77 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/regclass.c b/gcc/regclass.c
index 826da24..9ef8c8c 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -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)
{