aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2000-09-26 16:14:34 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2000-09-26 16:14:34 +0200
commit380f6ad3dde6db991434068c4f3776c6762fa564 (patch)
treec66fd909916f4fb25cf38ae1e3b3e4138d184a79
parentef120fc0497b70180caf53e40eb1ea3eb00e0507 (diff)
downloadgcc-380f6ad3dde6db991434068c4f3776c6762fa564.zip
gcc-380f6ad3dde6db991434068c4f3776c6762fa564.tar.gz
gcc-380f6ad3dde6db991434068c4f3776c6762fa564.tar.bz2
sparc.c (sparc_emit_set_const64): Don't abort when op0 is a SUBREG.
* config/sparc/sparc.c (sparc_emit_set_const64): Don't abort when op0 is a SUBREG. (function_arg_slotno): Accept TImode/CTImode. * config/sparc/sparc.h (MIN_UNITS_PER_WORD): If IN_LIBGCC2 define to UNITS_PER_WORD. * gcc.c-torture/compile/20000923-1.c: New test. From-SVN: r36645
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/sparc/sparc.c14
-rw-r--r--gcc/config/sparc/sparc.h4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20000923-1.c8
5 files changed, 34 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c8b234..3a7a28e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2000-09-26 Jakub Jelinek <jakub@redhat.com>
+
+ * config/sparc/sparc.c (sparc_emit_set_const64): Don't abort when
+ op0 is a SUBREG.
+ (function_arg_slotno): Accept TImode/CTImode.
+ * config/sparc/sparc.h (MIN_UNITS_PER_WORD): If IN_LIBGCC2 define
+ to UNITS_PER_WORD.
+
2000-09-26 Michael Hayes <mhayes@cygnus.com>
* flow.c (flow_loop_pre_header_scan): Punt if loop enters
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 82e9a74..ec3329b 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -1832,12 +1832,17 @@ sparc_emit_set_const64 (op0, op1)
rtx temp;
/* Sanity check that we know what we are working with. */
- if (! TARGET_ARCH64
- || GET_CODE (op0) != REG
- || (REGNO (op0) >= SPARC_FIRST_FP_REG
- && REGNO (op0) <= SPARC_LAST_V9_FP_REG))
+ if (! TARGET_ARCH64)
abort ();
+ if (GET_CODE (op0) != SUBREG)
+ {
+ if (GET_CODE (op0) != REG
+ || (REGNO (op0) >= SPARC_FIRST_FP_REG
+ && REGNO (op0) <= SPARC_LAST_V9_FP_REG))
+ abort ();
+ }
+
if (reload_in_progress || reload_completed)
temp = op0;
else
@@ -3971,6 +3976,7 @@ function_arg_slotno (cum, mode, type, named, incoming_p, pregno, ppadding)
case HImode : case CHImode :
case SImode : case CSImode :
case DImode : case CDImode :
+ case TImode : case CTImode :
if (slotno >= SPARC_INT_ARG_MAX)
return -1;
regno = regbase + slotno;
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 2004c60..aedccd1 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -765,7 +765,11 @@ extern struct sparc_cpu_select sparc_select[];
/* Width of a word, in units (bytes). */
#define UNITS_PER_WORD (TARGET_ARCH64 ? 8 : 4)
+#ifdef IN_LIBGCC2
+#define MIN_UNITS_PER_WORD UNITS_PER_WORD
+#else
#define MIN_UNITS_PER_WORD 4
+#endif
/* Now define the sizes of the C data types. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e3fb537..3d9863b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2000-09-26 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/compile/20000923-1.c: New test.
+
2000-09-25 Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
* g++.old-deja/g++.other/crash20.C: Make ready for libstdc++-v3.
diff --git a/gcc/testsuite/gcc.c-torture/compile/20000923-1.c b/gcc/testsuite/gcc.c-torture/compile/20000923-1.c
new file mode 100644
index 0000000..9ed9886
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20000923-1.c
@@ -0,0 +1,8 @@
+const int a = 3;
+const int b = 50;
+
+void foo (void)
+{
+ long int x[a][b];
+ asm ("" : : "r" (x) : "memory");
+}