aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@gcc.gnu.org>2001-11-02 19:34:16 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2001-11-02 19:34:16 +0000
commit9016e54390cedd1b765ea6887538d8bfb9d2f8d6 (patch)
tree4224b6d4e8b546b28082518363df73ad2731797c /gcc/builtins.c
parent729e3d3f015075bf124a0104d6a6aada347806c3 (diff)
downloadgcc-9016e54390cedd1b765ea6887538d8bfb9d2f8d6.zip
gcc-9016e54390cedd1b765ea6887538d8bfb9d2f8d6.tar.gz
gcc-9016e54390cedd1b765ea6887538d8bfb9d2f8d6.tar.bz2
builtins.c (apply_args_size): Handle vector arguments.
* builtins.c (apply_args_size): Handle vector arguments. (apply_result_size): Same. * machmode.def: Set WIDER mode field for all vector entries. From-SVN: r46718
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 28be342..d1eeda9 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -836,6 +836,22 @@ apply_args_size ()
&& have_insn_for (SET, mode))
best_mode = mode;
+ if (best_mode == VOIDmode)
+ for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ if (HARD_REGNO_MODE_OK (regno, mode)
+ && have_insn_for (SET, mode))
+ best_mode = mode;
+
+ if (best_mode == VOIDmode)
+ for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ if (HARD_REGNO_MODE_OK (regno, mode)
+ && have_insn_for (SET, mode))
+ best_mode = mode;
+
mode = best_mode;
if (mode == VOIDmode)
abort ();
@@ -892,6 +908,22 @@ apply_result_size ()
&& have_insn_for (SET, mode))
best_mode = mode;
+ if (best_mode == VOIDmode)
+ for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ if (HARD_REGNO_MODE_OK (regno, mode)
+ && have_insn_for (SET, mode))
+ best_mode = mode;
+
+ if (best_mode == VOIDmode)
+ for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ if (HARD_REGNO_MODE_OK (regno, mode)
+ && have_insn_for (SET, mode))
+ best_mode = mode;
+
mode = best_mode;
if (mode == VOIDmode)
abort ();