aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@bitrange.com>2004-11-13 19:52:55 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2004-11-13 19:52:55 +0000
commit85407c3fc74c3c374aa2f507a7bbd7681fae63c5 (patch)
tree44e25fac4f506c1caab43a2816b372106ed973a8
parent993bcda188c4faa0d17c6ec9246eaf1d050cd7d6 (diff)
downloadgcc-85407c3fc74c3c374aa2f507a7bbd7681fae63c5.zip
gcc-85407c3fc74c3c374aa2f507a7bbd7681fae63c5.tar.gz
gcc-85407c3fc74c3c374aa2f507a7bbd7681fae63c5.tar.bz2
re PR target/18347 (mmix-knuth-mmixware testsuite failure: gcc.dg/uninit-C.c)
PR target/18347 * config/mmix/mmix.c (mmix_function_outgoing_value): Handle TImode. Sorry for other non-complex larger-than-64-bit modes. * config/mmix/mmix.h (MIN_UNITS_PER_WORD): Do not define. From-SVN: r90592
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/mmix/mmix.c18
-rw-r--r--gcc/config/mmix/mmix.h9
3 files changed, 23 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4321801..138d0e3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-11-13 Hans-Peter Nilsson <hp@bitrange.com>
+
+ PR target/18347
+ * config/mmix/mmix.c (mmix_function_outgoing_value): Handle
+ TImode. Sorry for other non-complex larger-than-64-bit modes.
+ * config/mmix/mmix.h (MIN_UNITS_PER_WORD): Do not define.
+
2004-11-13 Kelley Cook <kcook@gcc.gnu.org>
* doc/install.texi (automake): Document that everything now uses 1.9.
diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c
index 4f79df2..e28c3b8 100644
--- a/gcc/config/mmix/mmix.c
+++ b/gcc/config/mmix/mmix.c
@@ -644,8 +644,22 @@ mmix_function_outgoing_value (tree valtype, tree func ATTRIBUTE_UNUSED)
return
gen_rtx_REG (mode, MMIX_OUTGOING_RETURN_VALUE_REGNUM);
- /* A complex type, made up of components. */
- cmode = TYPE_MODE (TREE_TYPE (valtype));
+ if (COMPLEX_MODE_P (mode))
+ /* A complex type, made up of components. */
+ cmode = TYPE_MODE (TREE_TYPE (valtype));
+ else
+ {
+ /* Of the other larger-than-register modes, we only support
+ scalar mode TImode. (At least, that's the only one that's
+ been rudimentally tested.) Make sure we're alerted for
+ unexpected cases. */
+ if (mode != TImode)
+ sorry ("support for mode %qs", GET_MODE_NAME (mode));
+
+ /* In any case, we will fill registers to the natural size. */
+ cmode = DImode;
+ }
+
nregs = ((GET_MODE_BITSIZE (mode) + BITS_PER_WORD - 1) / BITS_PER_WORD);
/* We need to take care of the effect of the register hole on return
diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h
index 501837e..fd0bb1c 100644
--- a/gcc/config/mmix/mmix.h
+++ b/gcc/config/mmix/mmix.h
@@ -269,15 +269,6 @@ extern int target_flags;
#define FLOAT_WORDS_BIG_ENDIAN 1
#define UNITS_PER_WORD 8
-/* FIXME: This macro is correlated to MAX_FIXED_MODE_SIZE in that
- e.g. this macro must not be 8 (default, UNITS_PER_WORD) when
- MAX_FIXED_MODE_SIZE is 64 (default, DImode), or really: this must be
- set manually if MAX_FIXED_MODE_SIZE is not at least twice the register
- size. By setting it to 4, we don't have to worry about TImode things
- yet. Revisit, perhaps get TImode going or get some solution that does
- not mandate TImode or lie in other ways. */
-#define MIN_UNITS_PER_WORD 4
-
/* FIXME: Promotion of modes currently generates slow code, extending
before every operation. */
/* I'm a little bit undecided about this one. It might be beneficial to