diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2001-11-26 10:18:47 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2001-11-26 10:18:47 +0000 |
commit | 78b583fed8b7f8047020113bedea5e0dac25b033 (patch) | |
tree | cb594fd03ac4388c66eab7a5ef38fffc9a4b0f9f /gcc | |
parent | 3cc9a32fc713254c9dcadbb1df46908bfc33e711 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/regclass.c | 20 |
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) { |