OSDN Git Service

2004-12-07 Eric Christopher <echristo@redhat.com>
authorechristo <echristo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Dec 2004 22:17:21 +0000 (22:17 +0000)
committerechristo <echristo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Dec 2004 22:17:21 +0000 (22:17 +0000)
PR target/18442
* config/mips/mips.c (mips_vector_mode_supported_p): New function.
(TARGET_SCALAR_MODE_SUPPORTED_P): Define to above.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91820 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.c

index 338cc63..05d9736 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-07  Eric Christopher  <echristo@redhat.com>
+
+       PR target/18442
+       * config/mips/mips.c (mips_vector_mode_supported_p): New function.
+       (TARGET_SCALAR_MODE_SUPPORTED_P): Define to above.
+
 2004-12-07  Kazu Hirata  <kazu@cs.umass.edu>
 
        * c-common.c, expr.c, fold-const.c, print-tree.c,
index 1b98eca..990671c 100644 (file)
@@ -352,6 +352,7 @@ static bool mips_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode mode,
                                    tree, bool);
 static bool mips_callee_copies (CUMULATIVE_ARGS *, enum machine_mode mode,
                                tree, bool);
+static bool mips_scalar_mode_supported_p (enum machine_mode);
 static bool mips_vector_mode_supported_p (enum machine_mode);
 static rtx mips_prepare_builtin_arg (enum insn_code, unsigned int, tree *);
 static rtx mips_prepare_builtin_target (enum insn_code, unsigned int, rtx);
@@ -800,6 +801,9 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
 #undef TARGET_VECTOR_MODE_SUPPORTED_P
 #define TARGET_VECTOR_MODE_SUPPORTED_P mips_vector_mode_supported_p
 
+#undef TARGET_SCALAR_MODE_SUPPORTED_P
+#define TARGET_SCALAR_MODE_SUPPORTED_P mips_scalar_mode_supported_p
+
 #undef TARGET_INIT_BUILTINS
 #define TARGET_INIT_BUILTINS mips_init_builtins
 #undef TARGET_EXPAND_BUILTIN
@@ -7076,6 +7080,28 @@ mips_valid_pointer_mode (enum machine_mode mode)
   return (mode == SImode || (TARGET_64BIT && mode == DImode));
 }
 
+/* Define this so that we can deal with a testcase like:
+
+   char foo __attribute__ ((mode (SI)));
+
+   then compiled with -mabi=64 and -mint64. We have no
+   32-bit type at that point and so the default case
+   always fails.  Instead of special casing everything
+   it's easier to accept SImode in this function and
+   then punt to the default which will work for all
+   of the cases where we deal with TARGET_64BIT, etc.  */
+static bool
+mips_scalar_mode_supported_p (enum machine_mode mode)
+{
+  /* We can always handle SImode.  */
+  if (mode == SImode)
+    return true;
+  else
+    return default_scalar_mode_supported_p (mode);
+
+}
+
+
 /* Target hook for vector_mode_supported_p.  */
 static bool
 mips_vector_mode_supported_p (enum machine_mode mode)